aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOlof Johansson <olof@lixom.net>2018-05-25 16:47:10 -0400
committerOlof Johansson <olof@lixom.net>2018-05-25 16:47:10 -0400
commitd6bde1dbe36c1b7712421c85e161b2c054007e99 (patch)
tree205811f1927a9237c0dcfdac790241b3e4ba0d3c
parent6874f9de65314fcea76f7654ba93017616e6c2d9 (diff)
parentf54e714cfc53b9164d1206f9ee49042195532a51 (diff)
Merge tag 'imx-drivers-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/drivers
i.MX drivers update for 4.18: - Use platform_device_add_data() instead of a pointer to a static memory in gpc/gpcv2 driver for platform data passing, so that we can avoid a BUG() when calling platform_device_put(). * tag 'imx-drivers-4.18' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux: soc: imx: gpc: Do not pass static memory as platform data soc: imx: gpcv2: Do not pass static memory as platform data Signed-off-by: Olof Johansson <olof@lixom.net>
-rw-r--r--drivers/soc/imx/gpc.c18
-rw-r--r--drivers/soc/imx/gpcv2.c22
2 files changed, 28 insertions, 12 deletions
diff --git a/drivers/soc/imx/gpc.c b/drivers/soc/imx/gpc.c
index c4d35f32af8d..32f0748fd067 100644
--- a/drivers/soc/imx/gpc.c
+++ b/drivers/soc/imx/gpc.c
@@ -443,17 +443,25 @@ static int imx_gpc_probe(struct platform_device *pdev)
443 if (domain_index >= of_id_data->num_domains) 443 if (domain_index >= of_id_data->num_domains)
444 continue; 444 continue;
445 445
446 domain = &imx_gpc_domains[domain_index];
447 domain->regmap = regmap;
448 domain->ipg_rate_mhz = ipg_rate_mhz;
449
450 pd_pdev = platform_device_alloc("imx-pgc-power-domain", 446 pd_pdev = platform_device_alloc("imx-pgc-power-domain",
451 domain_index); 447 domain_index);
452 if (!pd_pdev) { 448 if (!pd_pdev) {
453 of_node_put(np); 449 of_node_put(np);
454 return -ENOMEM; 450 return -ENOMEM;
455 } 451 }
456 pd_pdev->dev.platform_data = domain; 452
453 ret = platform_device_add_data(pd_pdev,
454 &imx_gpc_domains[domain_index],
455 sizeof(imx_gpc_domains[domain_index]));
456 if (ret) {
457 platform_device_put(pd_pdev);
458 of_node_put(np);
459 return ret;
460 }
461 domain = pd_pdev->dev.platform_data;
462 domain->regmap = regmap;
463 domain->ipg_rate_mhz = ipg_rate_mhz;
464
457 pd_pdev->dev.parent = &pdev->dev; 465 pd_pdev->dev.parent = &pdev->dev;
458 pd_pdev->dev.of_node = np; 466 pd_pdev->dev.of_node = np;
459 467
diff --git a/drivers/soc/imx/gpcv2.c b/drivers/soc/imx/gpcv2.c
index afc7ecc3c187..f4e3bd40c72e 100644
--- a/drivers/soc/imx/gpcv2.c
+++ b/drivers/soc/imx/gpcv2.c
@@ -155,7 +155,7 @@ static int imx7_gpc_pu_pgc_sw_pdn_req(struct generic_pm_domain *genpd)
155 return imx7_gpc_pu_pgc_sw_pxx_req(genpd, false); 155 return imx7_gpc_pu_pgc_sw_pxx_req(genpd, false);
156} 156}
157 157
158static struct imx7_pgc_domain imx7_pgc_domains[] = { 158static const struct imx7_pgc_domain imx7_pgc_domains[] = {
159 [IMX7_POWER_DOMAIN_MIPI_PHY] = { 159 [IMX7_POWER_DOMAIN_MIPI_PHY] = {
160 .genpd = { 160 .genpd = {
161 .name = "mipi-phy", 161 .name = "mipi-phy",
@@ -321,11 +321,6 @@ static int imx_gpcv2_probe(struct platform_device *pdev)
321 continue; 321 continue;
322 } 322 }
323 323
324 domain = &imx7_pgc_domains[domain_index];
325 domain->regmap = regmap;
326 domain->genpd.power_on = imx7_gpc_pu_pgc_sw_pup_req;
327 domain->genpd.power_off = imx7_gpc_pu_pgc_sw_pdn_req;
328
329 pd_pdev = platform_device_alloc("imx7-pgc-domain", 324 pd_pdev = platform_device_alloc("imx7-pgc-domain",
330 domain_index); 325 domain_index);
331 if (!pd_pdev) { 326 if (!pd_pdev) {
@@ -334,7 +329,20 @@ static int imx_gpcv2_probe(struct platform_device *pdev)
334 return -ENOMEM; 329 return -ENOMEM;
335 } 330 }
336 331
337 pd_pdev->dev.platform_data = domain; 332 ret = platform_device_add_data(pd_pdev,
333 &imx7_pgc_domains[domain_index],
334 sizeof(imx7_pgc_domains[domain_index]));
335 if (ret) {
336 platform_device_put(pd_pdev);
337 of_node_put(np);
338 return ret;
339 }
340
341 domain = pd_pdev->dev.platform_data;
342 domain->regmap = regmap;
343 domain->genpd.power_on = imx7_gpc_pu_pgc_sw_pup_req;
344 domain->genpd.power_off = imx7_gpc_pu_pgc_sw_pdn_req;
345
338 pd_pdev->dev.parent = dev; 346 pd_pdev->dev.parent = dev;
339 pd_pdev->dev.of_node = np; 347 pd_pdev->dev.of_node = np;
340 348