[v2,06/60] drm/omap: dss: Move platform_device_register from core.c to dss.c probe

Message ID 20180526172518.18710-7-laurent.pinchart@ideasonboard.com
State New
Headers show
Series
  • Untitled series #11717
Related show

Commit Message

Laurent Pinchart May 26, 2018, 5:24 p.m.
From: Jyri Sarha <jsarha@ti.com>

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>
---
Changes since v0:

- Store the OMAP DRM platform device pointer in struct dss_device
- Register the OMAP DRM platform device at the very end of dss_bind()
---
 drivers/gpu/drm/omapdrm/dss/core.c | 26 ++------------------------
 drivers/gpu/drm/omapdrm/dss/dss.c  | 13 +++++++++++++
 drivers/gpu/drm/omapdrm/dss/dss.h  |  2 ++
 3 files changed, 17 insertions(+), 24 deletions(-)

Comments

Sebastian Reichel June 10, 2018, 3:40 p.m. | #1
Hi,

On Sat, May 26, 2018 at 08:24:24PM +0300, Laurent Pinchart wrote:
> From: Jyri Sarha <jsarha@ti.com>

> 

> 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>


-- Sebastian

> Changes since v0:

> 

> - Store the OMAP DRM platform device pointer in struct dss_device

> - Register the OMAP DRM platform device at the very end of dss_bind()

> ---

>  drivers/gpu/drm/omapdrm/dss/core.c | 26 ++------------------------

>  drivers/gpu/drm/omapdrm/dss/dss.c  | 13 +++++++++++++

>  drivers/gpu/drm/omapdrm/dss/dss.h  |  2 ++

>  3 files changed, 17 insertions(+), 24 deletions(-)

> 

> diff --git a/drivers/gpu/drm/omapdrm/dss/core.c b/drivers/gpu/drm/omapdrm/dss/core.c

> index acef7ece5783..6c9f667f9982 100644

> --- a/drivers/gpu/drm/omapdrm/dss/core.c

> +++ b/drivers/gpu/drm/omapdrm/dss/core.c

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

>  }

> diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c

> index d27d7f85bcd1..abd45b08f3a1 100644

> --- a/drivers/gpu/drm/omapdrm/dss/dss.c

> +++ b/drivers/gpu/drm/omapdrm/dss/dss.c

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

> diff --git a/drivers/gpu/drm/omapdrm/dss/dss.h b/drivers/gpu/drm/omapdrm/dss/dss.h

> index 847c78ade024..4f1eb7f5b922 100644

> --- a/drivers/gpu/drm/omapdrm/dss/dss.h

> +++ b/drivers/gpu/drm/omapdrm/dss/dss.h

> @@ -235,6 +235,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;

> -- 

> Regards,

> 

> Laurent Pinchart

> 

> _______________________________________________

> dri-devel mailing list

> dri-devel@lists.freedesktop.org

> https://lists.freedesktop.org/mailman/listinfo/dri-devel

Patch

diff --git a/drivers/gpu/drm/omapdrm/dss/core.c b/drivers/gpu/drm/omapdrm/dss/core.c
index acef7ece5783..6c9f667f9982 100644
--- a/drivers/gpu/drm/omapdrm/dss/core.c
+++ b/drivers/gpu/drm/omapdrm/dss/core.c
@@ -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));
 }
diff --git a/drivers/gpu/drm/omapdrm/dss/dss.c b/drivers/gpu/drm/omapdrm/dss/dss.c
index d27d7f85bcd1..abd45b08f3a1 100644
--- a/drivers/gpu/drm/omapdrm/dss/dss.c
+++ b/drivers/gpu/drm/omapdrm/dss/dss.c
@@ -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);
diff --git a/drivers/gpu/drm/omapdrm/dss/dss.h b/drivers/gpu/drm/omapdrm/dss/dss.h
index 847c78ade024..4f1eb7f5b922 100644
--- a/drivers/gpu/drm/omapdrm/dss/dss.h
+++ b/drivers/gpu/drm/omapdrm/dss/dss.h
@@ -235,6 +235,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;