Skip to content

Commit

Permalink
imx-drm: delay publishing sysfs connector entries
Browse files Browse the repository at this point in the history
Delay publishing sysfs connector entries until all components have
initialised.  This reduces the probability of generating false hotplug
events when we're uncertain whether the driver can fully initialise.
This also pulls that code out of the individual imx-drm connector
drivers.

Acked-by: Philipp Zabel <p.zabel@pengutronix.de>
Acked-by: Shawn Guo <shawn.guo@linaro.org>
Reviewed-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
  • Loading branch information
Russell King committed Feb 24, 2014
1 parent 17b5001 commit e355e7d
Showing 1 changed file with 21 additions and 1 deletion.
22 changes: 21 additions & 1 deletion drivers/staging/imx-drm/imx-drm-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ static int imx_drm_connector_register(
imx_drm_connector->connector->connector_type);
drm_mode_group_reinit(imxdrm->drm);

return drm_sysfs_connector_add(imx_drm_connector->connector);
return 0;
}

/*
Expand All @@ -379,6 +379,7 @@ static void imx_drm_connector_unregister(
static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags)
{
struct imx_drm_device *imxdrm = __imx_drm_device();
struct drm_connector *connector;
int ret;

imxdrm->drm = drm;
Expand Down Expand Up @@ -432,8 +433,27 @@ static int imx_drm_driver_load(struct drm_device *drm, unsigned long flags)
ret = component_bind_all(drm->dev, drm);
if (ret)
goto err_relock;

/*
* All components are now added, we can publish the connector sysfs
* entries to userspace. This will generate hotplug events and so
* userspace will expect to be able to access DRM at this point.
*/
list_for_each_entry(connector, &drm->mode_config.connector_list, head) {
ret = drm_sysfs_connector_add(connector);
if (ret) {
dev_err(drm->dev,
"[CONNECTOR:%d:%s] drm_sysfs_connector_add failed: %d\n",
connector->base.id,
drm_get_connector_name(connector), ret);
goto err_unbind;
}
}

return 0;

err_unbind:
component_unbind_all(drm->dev, drm);
err_relock:
mutex_lock(&imxdrm->mutex);
err_vblank:
Expand Down

0 comments on commit e355e7d

Please sign in to comment.