|
|
@@ -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);
|