Skip to content

Commit

Permalink
drm/imx: kill firstopen callback
Browse files Browse the repository at this point in the history
This thing seems to do some kind of delayed setup. Really, real kms
drivers shouldn't do that at all. Either stuff needs to be dynamically
hotplugged or the driver setup sequence needs to be fixed.

This patch here just moves the setup at the very end of the driver
load callback, with the locking adjusted accordingly.

v2: Also move the corresponding put from ->lastclose to ->unload.

Cc: Sascha Hauer <s.hauer@pengutronix.de>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
  • Loading branch information
Daniel Vetter authored and Dave Airlie committed Aug 19, 2013
1 parent 24f4003 commit b5dc0d1
Showing 1 changed file with 5 additions and 15 deletions.
20 changes: 5 additions & 15 deletions drivers/staging/imx-drm/imx-drm-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,28 +69,20 @@ struct imx_drm_connector {
struct module *owner;
};

static int imx_drm_driver_firstopen(struct drm_device *drm)
{
if (!imx_drm_device_get())
return -EINVAL;

return 0;
}

static void imx_drm_driver_lastclose(struct drm_device *drm)
{
struct imx_drm_device *imxdrm = drm->dev_private;

if (imxdrm->fbhelper)
drm_fbdev_cma_restore_mode(imxdrm->fbhelper);

imx_drm_device_put();
}

static int imx_drm_driver_unload(struct drm_device *drm)
{
struct imx_drm_device *imxdrm = drm->dev_private;

imx_drm_device_put();

drm_mode_config_cleanup(imxdrm->drm);
drm_kms_helper_poll_fini(imxdrm->drm);

Expand Down Expand Up @@ -225,8 +217,6 @@ struct drm_device *imx_drm_device_get(void)
struct imx_drm_connector *con;
struct imx_drm_crtc *crtc;

mutex_lock(&imxdrm->mutex);

list_for_each_entry(enc, &imxdrm->encoder_list, list) {
if (!try_module_get(enc->owner)) {
dev_err(imxdrm->dev, "could not get module %s\n",
Expand All @@ -253,8 +243,6 @@ struct drm_device *imx_drm_device_get(void)

imxdrm->references++;

mutex_unlock(&imxdrm->mutex);

return imxdrm->drm;

unwind_crtc:
Expand Down Expand Up @@ -446,6 +434,9 @@ static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags)
*/
imxdrm->drm->vblank_disable_allowed = 1;

if (!imx_drm_device_get())
ret = -EINVAL;

ret = 0;

err_init:
Expand Down Expand Up @@ -790,7 +781,6 @@ static struct drm_driver imx_drm_driver = {
.driver_features = DRIVER_MODESET | DRIVER_GEM,
.load = imx_drm_driver_load,
.unload = imx_drm_driver_unload,
.firstopen = imx_drm_driver_firstopen,
.lastclose = imx_drm_driver_lastclose,
.gem_free_object = drm_gem_cma_free_object,
.gem_vm_ops = &drm_gem_cma_vm_ops,
Expand Down

0 comments on commit b5dc0d1

Please sign in to comment.