]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/omap: dss: Move platform_device_register from core.c to dss.c probe
authorJyri Sarha <jsarha@ti.com>
Fri, 16 Feb 2018 11:25:07 +0000 (13:25 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 3 Sep 2018 13:13:25 +0000 (16:13 +0300)
Register the omapdrm device when we know that dss device probe going
to succeed. This avoids DSS6 and DSS2 omapdrm device registration from
colliding with each other.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
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>
drivers/gpu/drm/omapdrm/dss/core.c
drivers/gpu/drm/omapdrm/dss/dss.c
drivers/gpu/drm/omapdrm/dss/dss.h

index 07d00a186f151ae83ca0db4fd13576826af462d9..a2edabc9f6b38987bef698269e2e871906419128 100644 (file)
@@ -45,36 +45,14 @@ static struct platform_driver * const omap_dss_drivers[] = {
 #endif
 };
 
-static struct platform_device *omap_drm_device;
-
 static int __init omap_dss_init(void)
 {
-       int r;
-
-       r = platform_register_drivers(omap_dss_drivers,
-                                     ARRAY_SIZE(omap_dss_drivers));
-       if (r)
-               goto err_reg;
-
-       omap_drm_device = platform_device_register_simple("omapdrm", 0, NULL, 0);
-       if (IS_ERR(omap_drm_device)) {
-               r = PTR_ERR(omap_drm_device);
-               goto err_reg;
-       }
-
-       return 0;
-
-err_reg:
-       platform_unregister_drivers(omap_dss_drivers,
-                                   ARRAY_SIZE(omap_dss_drivers));
-
-       return r;
+       return platform_register_drivers(omap_dss_drivers,
+                                        ARRAY_SIZE(omap_dss_drivers));
 }
 
 static void __exit omap_dss_exit(void)
 {
-       platform_device_unregister(omap_drm_device);
-
        platform_unregister_drivers(omap_dss_drivers,
                                    ARRAY_SIZE(omap_dss_drivers));
 }
index 9af7108dbf5f4b26bcf0076ebf6ac48f14608cf6..64479b209c1f1bba4d1b73de5ef327a096a38fa7 100644 (file)
@@ -1315,6 +1315,7 @@ static const struct soc_device_attribute dss_soc_devices[] = {
 static int dss_bind(struct device *dev)
 {
        struct dss_device *dss = dev_get_drvdata(dev);
+       struct platform_device *drm_pdev;
        int r;
 
        r = component_bind_all(dev, NULL);
@@ -1325,11 +1326,23 @@ static int dss_bind(struct device *dev)
 
        omapdss_set_dss(dss);
 
+       drm_pdev = platform_device_register_simple("omapdrm", 0, NULL, 0);
+       if (IS_ERR(drm_pdev)) {
+               component_unbind_all(dev, NULL);
+               return PTR_ERR(drm_pdev);
+       }
+
+       dss->drm_pdev = drm_pdev;
+
        return 0;
 }
 
 static void dss_unbind(struct device *dev)
 {
+       struct dss_device *dss = dev_get_drvdata(dev);
+
+       platform_device_unregister(dss->drm_pdev);
+
        omapdss_set_dss(NULL);
 
        component_unbind_all(dev, NULL);
index 38302631b64baf811476aaf143f5dbe88a304f37..e6baad7e653f0a47550b641fead78a12d6554b09 100644 (file)
@@ -238,6 +238,8 @@ struct dss_device {
        struct regmap   *syscon_pll_ctrl;
        u32             syscon_pll_ctrl_offset;
 
+       struct platform_device *drm_pdev;
+
        struct clk      *parent_clk;
        struct clk      *dss_clk;
        unsigned long   dss_clk_rate;