drm/rockchip: Drop drm_driver.load/unload callbacks
authorTomeu Vizoso <tomeu.vizoso@collabora.com>
Fri, 10 Jun 2016 11:14:13 +0000 (13:14 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 10 Jun 2016 14:47:48 +0000 (16:47 +0200)
They are deprecated and by moving their implementations to bind/unbind
we can call drm_connector_register_all instead of open-coding it.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso@collabora.com>
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1465557253-10670-1-git-send-email-tomeu.vizoso@collabora.com
drivers/gpu/drm/rockchip/rockchip_drm_drv.c

index 09a4d429c0f091804ec1e1c07e7e344018116b2b..1e67802ec7ef74ab43815da0d2a0a8936b0e2d85 100644 (file)
@@ -38,6 +38,7 @@
 #define DRIVER_MINOR   0
 
 static bool is_support_iommu = true;
+static struct drm_driver rockchip_drm_driver;
 
 /*
  * Attach a (component) device to the shared drm dma mapping from master drm
@@ -133,18 +134,29 @@ static void rockchip_drm_crtc_disable_vblank(struct drm_device *dev,
                priv->crtc_funcs[pipe]->disable_vblank(crtc);
 }
 
-static int rockchip_drm_load(struct drm_device *drm_dev, unsigned long flags)
+static int rockchip_drm_bind(struct device *dev)
 {
+       struct drm_device *drm_dev;
        struct rockchip_drm_private *private;
        struct dma_iommu_mapping *mapping = NULL;
-       struct device *dev = drm_dev->dev;
-       struct drm_connector *connector;
        int ret;
 
-       private = devm_kzalloc(drm_dev->dev, sizeof(*private), GFP_KERNEL);
-       if (!private)
+       drm_dev = drm_dev_alloc(&rockchip_drm_driver, dev);
+       if (!drm_dev)
                return -ENOMEM;
 
+       ret = drm_dev_register(drm_dev, 0);
+       if (ret)
+               goto err_free;
+
+       dev_set_drvdata(dev, drm_dev);
+
+       private = devm_kzalloc(drm_dev->dev, sizeof(*private), GFP_KERNEL);
+       if (!private) {
+               ret = -ENOMEM;
+               goto err_unregister;
+       }
+
        mutex_init(&private->commit.lock);
        INIT_WORK(&private->commit.work, rockchip_drm_atomic_work);
 
@@ -187,21 +199,10 @@ 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;
-               }
+       ret = drm_connector_register_all(drm_dev);
+       if (ret) {
+               dev_err(dev, "failed to register connectors\n");
+               goto err_unbind;
        }
 
        /* init kms poll for handling hpd */
@@ -241,12 +242,16 @@ err_release_mapping:
 err_config_cleanup:
        drm_mode_config_cleanup(drm_dev);
        drm_dev->dev_private = NULL;
+err_unregister:
+       drm_dev_unregister(drm_dev);
+err_free:
+       drm_dev_unref(drm_dev);
        return ret;
 }
 
-static int rockchip_drm_unload(struct drm_device *drm_dev)
+static void rockchip_drm_unbind(struct device *dev)
 {
-       struct device *dev = drm_dev->dev;
+       struct drm_device *drm_dev = dev_get_drvdata(dev);
 
        rockchip_drm_fbdev_fini(drm_dev);
        drm_vblank_cleanup(drm_dev);
@@ -256,8 +261,9 @@ static int rockchip_drm_unload(struct drm_device *drm_dev)
                arm_iommu_detach_device(dev);
        drm_mode_config_cleanup(drm_dev);
        drm_dev->dev_private = NULL;
-
-       return 0;
+       drm_dev_unregister(drm_dev);
+       drm_dev_unref(drm_dev);
+       dev_set_drvdata(dev, NULL);
 }
 
 static void rockchip_drm_crtc_cancel_pending_vblank(struct drm_crtc *crtc,
@@ -304,8 +310,6 @@ static const struct file_operations rockchip_drm_driver_fops = {
 static struct drm_driver rockchip_drm_driver = {
        .driver_features        = DRIVER_MODESET | DRIVER_GEM |
                                  DRIVER_PRIME | DRIVER_ATOMIC,
-       .load                   = rockchip_drm_load,
-       .unload                 = rockchip_drm_unload,
        .preclose               = rockchip_drm_preclose,
        .lastclose              = rockchip_drm_lastclose,
        .get_vblank_counter     = drm_vblank_no_hw_counter,
@@ -440,37 +444,6 @@ static void rockchip_add_endpoints(struct device *dev,
        }
 }
 
-static int rockchip_drm_bind(struct device *dev)
-{
-       struct drm_device *drm;
-       int ret;
-
-       drm = drm_dev_alloc(&rockchip_drm_driver, dev);
-       if (!drm)
-               return -ENOMEM;
-
-       ret = drm_dev_register(drm, 0);
-       if (ret)
-               goto err_free;
-
-       dev_set_drvdata(dev, drm);
-
-       return 0;
-
-err_free:
-       drm_dev_unref(drm);
-       return ret;
-}
-
-static void rockchip_drm_unbind(struct device *dev)
-{
-       struct drm_device *drm = dev_get_drvdata(dev);
-
-       drm_dev_unregister(drm);
-       drm_dev_unref(drm);
-       dev_set_drvdata(dev, NULL);
-}
-
 static const struct component_master_ops rockchip_drm_ops = {
        .bind = rockchip_drm_bind,
        .unbind = rockchip_drm_unbind,