From: Daniel Kurtz <djku...@chromium.org>

Register connectors with userspace after all components are bound.

Signed-off-by: Daniel Kurtz <djkurtz at chromium.org>
Reviewed-by: Dominik Behr <dbehr at chromium.org>

drm_connector_get_name -> connector->name
This patch is necessary to make X11 see screens it seems.

Signed-off-by: Heiko Stuebner <heiko at sntech.de>
---
 drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c 
b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
index 21a481b..30da781 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -129,6 +129,7 @@ static int rockchip_drm_load(struct drm_device *drm_dev, 
unsigned long flags)
        struct rockchip_drm_private *private;
        struct dma_iommu_mapping *mapping;
        struct device *dev = drm_dev->dev;
+       struct drm_connector *connector;
        int ret;

        private = devm_kzalloc(drm_dev->dev, sizeof(*private), GFP_KERNEL);
@@ -171,6 +172,23 @@ static int rockchip_drm_load(struct drm_device *drm_dev, 
unsigned long flags)
        if (ret)
                goto err_detach_device;

+       /*
+        * 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_dev->mode_config.connector_list,
+                       head) {
+               ret = drm_connector_register(connector);
+               if (ret) {
+                       dev_err(drm_dev->dev,
+                               "[CONNECTOR:%d:%s] drm_connector_register 
failed: %d\n",
+                               connector->base.id,
+                               connector->name, ret);
+                       goto err_unbind;
+               }
+       }
+
        /* init kms poll for handling hpd */
        drm_kms_helper_poll_init(drm_dev);

@@ -200,6 +218,7 @@ err_vblank_cleanup:
        drm_vblank_cleanup(drm_dev);
 err_kms_helper_poll_fini:
        drm_kms_helper_poll_fini(drm_dev);
+err_unbind:
        component_unbind_all(dev, drm_dev);
 err_detach_device:
        arm_iommu_detach_device(dev);
-- 
2.1.1


Reply via email to