Simplify the code by doing less dynamic allocation.

This also allows easier direct manipulation of individual power domains.

Signed-off-by: Leonard Crestez <leonard.cres...@nxp.com>
---
 drivers/soc/imx/gpc.c | 35 +++++++++++++++++------------------
 1 file changed, 17 insertions(+), 18 deletions(-)

diff --git a/drivers/soc/imx/gpc.c b/drivers/soc/imx/gpc.c
index 32f0748fd067..83cb275592e9 100644
--- a/drivers/soc/imx/gpc.c
+++ b/drivers/soc/imx/gpc.c
@@ -283,10 +283,24 @@ static struct imx_pm_domain imx_gpc_domains[] = {
                .reg_offs = 0x200,
                .cntr_pdn_bit = 6,
        },
 };
 
+#define DEFINE_IMX_GPC_PDEV(_id) \
+       { \
+               .name   = "imx-pgc-power-domain", \
+               .id     = _id, \
+               .dev    = { .platform_data = &imx_gpc_domains[_id] }, \
+       }
+
+static struct platform_device imx_pgc_pdev[] = {
+       DEFINE_IMX_GPC_PDEV(0),
+       DEFINE_IMX_GPC_PDEV(1),
+       DEFINE_IMX_GPC_PDEV(2),
+       DEFINE_IMX_GPC_PDEV(3),
+};
+
 struct imx_gpc_dt_data {
        int num_domains;
        bool err009619_present;
 };
 
@@ -441,35 +455,20 @@ static int imx_gpc_probe(struct platform_device *pdev)
                                return ret;
                        }
                        if (domain_index >= of_id_data->num_domains)
                                continue;
 
-                       pd_pdev = platform_device_alloc("imx-pgc-power-domain",
-                                                       domain_index);
-                       if (!pd_pdev) {
-                               of_node_put(np);
-                               return -ENOMEM;
-                       }
-
-                       ret = platform_device_add_data(pd_pdev,
-                                                      
&imx_gpc_domains[domain_index],
-                                                      
sizeof(imx_gpc_domains[domain_index]));
-                       if (ret) {
-                               platform_device_put(pd_pdev);
-                               of_node_put(np);
-                               return ret;
-                       }
-                       domain = pd_pdev->dev.platform_data;
+                       domain = &imx_gpc_domains[domain_index];
                        domain->regmap = regmap;
                        domain->ipg_rate_mhz = ipg_rate_mhz;
 
+                       pd_pdev = &imx_pgc_pdev[domain_index];
                        pd_pdev->dev.parent = &pdev->dev;
                        pd_pdev->dev.of_node = np;
 
-                       ret = platform_device_add(pd_pdev);
+                       ret = platform_device_register(pd_pdev);
                        if (ret) {
-                               platform_device_put(pd_pdev);
                                of_node_put(np);
                                return ret;
                        }
                }
        }
-- 
2.17.1

Reply via email to