Skip to content

Commit 3143c0c

Browse files
Thomas Zimmermannjnikula
authored andcommitted
drm/i915: Initialize fbdev DRM client with callback functions
Initialize i915's fbdev client by giving an instance of struct drm_client_funcs to drm_client_init(). Also clean up with drm_client_release(). Doing this in i915 prevents fbdev helpers from initializing and releasing the client internally (see drm_fb_helper_init()). No functional change yet; the client callbacks will be filled later. v6: - rename client to "intel-fbdev" (Jouni) v2: - call drm_fb_helper_unprepare() in error handling (Jani) - fix typo in commit message (Sam) Signed-off-by: Thomas Zimmermann <[email protected]> Reviewed-by: Jouni Högander <[email protected]> Acked-by: Lucas De Marchi <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected] Signed-off-by: Jani Nikula <[email protected]>
1 parent 7d4e13b commit 3143c0c

File tree

1 file changed

+39
-4
lines changed

1 file changed

+39
-4
lines changed

drivers/gpu/drm/i915/display/intel_fbdev.c

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ static void intel_fbdev_destroy(struct intel_fbdev *ifbdev)
291291
if (ifbdev->fb)
292292
drm_framebuffer_remove(&ifbdev->fb->base);
293293

294+
drm_client_release(&ifbdev->helper.client);
294295
drm_fb_helper_unprepare(&ifbdev->helper);
295296
kfree(ifbdev);
296297
}
@@ -584,6 +585,30 @@ void intel_fbdev_restore_mode(struct drm_i915_private *dev_priv)
584585
intel_fbdev_invalidate(ifbdev);
585586
}
586587

588+
/*
589+
* Fbdev client and struct drm_client_funcs
590+
*/
591+
592+
static void intel_fbdev_client_unregister(struct drm_client_dev *client)
593+
{ }
594+
595+
static int intel_fbdev_client_restore(struct drm_client_dev *client)
596+
{
597+
return 0;
598+
}
599+
600+
static int intel_fbdev_client_hotplug(struct drm_client_dev *client)
601+
{
602+
return 0;
603+
}
604+
605+
static const struct drm_client_funcs intel_fbdev_client_funcs = {
606+
.owner = THIS_MODULE,
607+
.unregister = intel_fbdev_client_unregister,
608+
.restore = intel_fbdev_client_restore,
609+
.hotplug = intel_fbdev_client_hotplug,
610+
};
611+
587612
int intel_fbdev_init(struct drm_device *dev)
588613
{
589614
struct drm_i915_private *dev_priv = to_i915(dev);
@@ -605,16 +630,26 @@ int intel_fbdev_init(struct drm_device *dev)
605630
else
606631
ifbdev->preferred_bpp = ifbdev->helper.preferred_bpp;
607632

633+
ret = drm_client_init(dev, &ifbdev->helper.client, "intel-fbdev",
634+
&intel_fbdev_client_funcs);
635+
if (ret)
636+
goto err_drm_fb_helper_unprepare;
637+
608638
ret = drm_fb_helper_init(dev, &ifbdev->helper);
609-
if (ret) {
610-
kfree(ifbdev);
611-
return ret;
612-
}
639+
if (ret)
640+
goto err_drm_client_release;
613641

614642
dev_priv->display.fbdev.fbdev = ifbdev;
615643
INIT_WORK(&dev_priv->display.fbdev.suspend_work, intel_fbdev_suspend_worker);
616644

617645
return 0;
646+
647+
err_drm_client_release:
648+
drm_client_release(&ifbdev->helper.client);
649+
err_drm_fb_helper_unprepare:
650+
drm_fb_helper_unprepare(&ifbdev->helper);
651+
kfree(ifbdev);
652+
return ret;
618653
}
619654

620655
static void intel_fbdev_initial_config(void *data, async_cookie_t cookie)

0 commit comments

Comments
 (0)