aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/omap_drv.c
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2018-05-30 14:46:44 -0400
committerTomi Valkeinen <tomi.valkeinen@ti.com>2018-09-03 09:13:29 -0400
commit18412b667c96d1a5210f33191e128866a72cea07 (patch)
treeca07dc5a58fca60f9ee4b054bd54272d09ae950d /drivers/gpu/drm/omapdrm/omap_drv.c
parenta21a8f3c93e1a95cc811a1297ec60aa455a6c523 (diff)
drm/omap: Merge HPD enable operation with HPD callback registration
The omap_dss_device .enable_hpd() and .disable_hpd() are used to enable and disable hot-plug detection at omapdrm probe and remove time. This is required to avoid reporting hot-plug detection events before the DRM infrastructure is ready to accept them, as that could result in crashes or other malfunction. Hot-plug event reporting is conditioned by both HPD being enabled through the .enable_hpd() operation and by the HPD callback being registered though the .register_hpd_cb() operation. We thus don't need a separate enable operation if we can guarantee that callbacks won't be registered too early. HPD callbacks are registered at connector initialization time, which is too early to start reporting HPD events. There's however nothing blocking a move of callback registration to a later time when the omapdrm driver calls the HPD enable operations. Do so, and remove the HPD enable operation completely from omap_dss_device drivers. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_drv.c')
-rw-r--r--drivers/gpu/drm/omapdrm/omap_drv.c16
1 files changed, 4 insertions, 12 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c
index 843222118fa7..0cca16c323d9 100644
--- a/drivers/gpu/drm/omapdrm/omap_drv.c
+++ b/drivers/gpu/drm/omapdrm/omap_drv.c
@@ -375,12 +375,8 @@ static void omap_modeset_enable_external_hpd(struct drm_device *ddev)
375 struct omap_drm_private *priv = ddev->dev_private; 375 struct omap_drm_private *priv = ddev->dev_private;
376 int i; 376 int i;
377 377
378 for (i = 0; i < priv->num_pipes; i++) { 378 for (i = 0; i < priv->num_pipes; i++)
379 struct omap_dss_device *display = priv->pipes[i].display; 379 omap_connector_enable_hpd(priv->pipes[i].connector);
380
381 if (display->ops->enable_hpd)
382 display->ops->enable_hpd(display);
383 }
384} 380}
385 381
386/* 382/*
@@ -391,12 +387,8 @@ static void omap_modeset_disable_external_hpd(struct drm_device *ddev)
391 struct omap_drm_private *priv = ddev->dev_private; 387 struct omap_drm_private *priv = ddev->dev_private;
392 int i; 388 int i;
393 389
394 for (i = 0; i < priv->num_pipes; i++) { 390 for (i = 0; i < priv->num_pipes; i++)
395 struct omap_dss_device *display = priv->pipes[i].display; 391 omap_connector_disable_hpd(priv->pipes[i].connector);
396
397 if (display->ops->disable_hpd)
398 display->ops->disable_hpd(display);
399 }
400} 392}
401 393
402/* 394/*