diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/omap_drv.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/omap_drv.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/gpu/drm/omapdrm/omap_drv.c b/drivers/gpu/drm/omapdrm/omap_drv.c index 721a358531b0..10e24ca928f2 100644 --- a/drivers/gpu/drm/omapdrm/omap_drv.c +++ b/drivers/gpu/drm/omapdrm/omap_drv.c | |||
@@ -324,6 +324,32 @@ static int omap_modeset_init(struct drm_device *dev) | |||
324 | } | 324 | } |
325 | 325 | ||
326 | /* | 326 | /* |
327 | * Enable the HPD in external components if supported | ||
328 | */ | ||
329 | static void omap_modeset_enable_external_hpd(void) | ||
330 | { | ||
331 | struct omap_dss_device *dssdev = NULL; | ||
332 | |||
333 | for_each_dss_dev(dssdev) { | ||
334 | if (dssdev->driver->enable_hpd) | ||
335 | dssdev->driver->enable_hpd(dssdev); | ||
336 | } | ||
337 | } | ||
338 | |||
339 | /* | ||
340 | * Disable the HPD in external components if supported | ||
341 | */ | ||
342 | static void omap_modeset_disable_external_hpd(void) | ||
343 | { | ||
344 | struct omap_dss_device *dssdev = NULL; | ||
345 | |||
346 | for_each_dss_dev(dssdev) { | ||
347 | if (dssdev->driver->disable_hpd) | ||
348 | dssdev->driver->disable_hpd(dssdev); | ||
349 | } | ||
350 | } | ||
351 | |||
352 | /* | ||
327 | * drm ioctl funcs | 353 | * drm ioctl funcs |
328 | */ | 354 | */ |
329 | 355 | ||
@@ -602,6 +628,7 @@ static int pdev_probe(struct platform_device *pdev) | |||
602 | priv->fbdev = omap_fbdev_init(ddev); | 628 | priv->fbdev = omap_fbdev_init(ddev); |
603 | 629 | ||
604 | drm_kms_helper_poll_init(ddev); | 630 | drm_kms_helper_poll_init(ddev); |
631 | omap_modeset_enable_external_hpd(); | ||
605 | 632 | ||
606 | /* | 633 | /* |
607 | * Register the DRM device with the core and the connectors with | 634 | * Register the DRM device with the core and the connectors with |
@@ -614,6 +641,7 @@ static int pdev_probe(struct platform_device *pdev) | |||
614 | return 0; | 641 | return 0; |
615 | 642 | ||
616 | err_cleanup_helpers: | 643 | err_cleanup_helpers: |
644 | omap_modeset_disable_external_hpd(); | ||
617 | drm_kms_helper_poll_fini(ddev); | 645 | drm_kms_helper_poll_fini(ddev); |
618 | if (priv->fbdev) | 646 | if (priv->fbdev) |
619 | omap_fbdev_free(ddev); | 647 | omap_fbdev_free(ddev); |
@@ -642,6 +670,7 @@ static int pdev_remove(struct platform_device *pdev) | |||
642 | 670 | ||
643 | drm_dev_unregister(ddev); | 671 | drm_dev_unregister(ddev); |
644 | 672 | ||
673 | omap_modeset_disable_external_hpd(); | ||
645 | drm_kms_helper_poll_fini(ddev); | 674 | drm_kms_helper_poll_fini(ddev); |
646 | 675 | ||
647 | if (priv->fbdev) | 676 | if (priv->fbdev) |