diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2018-10-02 04:15:07 -0400 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2018-10-02 04:15:17 -0400 |
| commit | 9620135fe10a07e0c96d9593e09215954ce81520 (patch) | |
| tree | d321015d397cb5be2de615a7a9fb9f2cf1f0a67e | |
| parent | 64d20b774f49b31e9d5ebe413d5c3d37195e9a64 (diff) | |
| parent | 8d8e3b7d8f06f69005d829d4a195b00ef976004b (diff) | |
Merge tag 'imx-drivers-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux into next/drivers
i.MX drivers update for 4.20:
- A couple of patches from Anson to update variable and macro naming
in GPCv2 driver, as a preparation of reusing the driver on i.MX8.
- Switch GPC/GPCv2 drivers to use SPDX identifier for licence claiming.
- Clean up the unnecessary DT node name NULL pointer checking from
imx-weim driver, since it can never be NULL at all.
- A couple of improvements on GPC driver from Sven Schmitt to correct
PDN register and use GPC_PGC_DOMAIN_* indexes for consistency.
* tag 'imx-drivers-4.20' of git://git.kernel.org/pub/scm/linux/kernel/git/shawnguo/linux:
soc: imx: gpcv2: Switch to SPDX identifier
soc: imx: gpc: Switch to SPDX identifier
bus: imx-weim: drop unnecessary DT node name NULL check
soc: imx: gpcv2: make pgc driver more generic for other i.MX platforms
soc: imx: gpcv2: use A_CORE instread of A7 for more i.MX platforms
soc: imx: gpc: use GPC_PGC_DOMAIN_* indexes
soc: imx: gpc: fix PDN delay
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
| -rw-r--r-- | drivers/bus/imx-weim.c | 3 | ||||
| -rw-r--r-- | drivers/soc/imx/gpc.c | 26 | ||||
| -rw-r--r-- | drivers/soc/imx/gpcv2.c | 100 |
3 files changed, 66 insertions, 63 deletions
diff --git a/drivers/bus/imx-weim.c b/drivers/bus/imx-weim.c index 6a94aa6a22c2..d84996a4528e 100644 --- a/drivers/bus/imx-weim.c +++ b/drivers/bus/imx-weim.c | |||
| @@ -156,9 +156,6 @@ static int __init weim_parse_dt(struct platform_device *pdev, | |||
| 156 | } | 156 | } |
| 157 | 157 | ||
| 158 | for_each_available_child_of_node(pdev->dev.of_node, child) { | 158 | for_each_available_child_of_node(pdev->dev.of_node, child) { |
| 159 | if (!child->name) | ||
| 160 | continue; | ||
| 161 | |||
| 162 | ret = weim_timing_setup(child, base, devtype); | 159 | ret = weim_timing_setup(child, base, devtype); |
| 163 | if (ret) | 160 | if (ret) |
| 164 | dev_warn(&pdev->dev, "%pOF set timing failed.\n", | 161 | dev_warn(&pdev->dev, "%pOF set timing failed.\n", |
diff --git a/drivers/soc/imx/gpc.c b/drivers/soc/imx/gpc.c index b3da635970ea..aa3729ecaa9e 100644 --- a/drivers/soc/imx/gpc.c +++ b/drivers/soc/imx/gpc.c | |||
| @@ -1,13 +1,7 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright 2015-2017 Pengutronix, Lucas Stach <kernel@pengutronix.de> | 3 | * Copyright 2015-2017 Pengutronix, Lucas Stach <kernel@pengutronix.de> |
| 3 | * Copyright 2011-2013 Freescale Semiconductor, Inc. | 4 | * Copyright 2011-2013 Freescale Semiconductor, Inc. |
| 4 | * | ||
| 5 | * The code contained herein is licensed under the GNU General Public | ||
| 6 | * License. You may obtain a copy of the GNU General Public License | ||
| 7 | * Version 2 or later at the following locations: | ||
| 8 | * | ||
| 9 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 10 | * http://www.gnu.org/copyleft/gpl.html | ||
| 11 | */ | 5 | */ |
| 12 | 6 | ||
| 13 | #include <linux/clk.h> | 7 | #include <linux/clk.h> |
| @@ -69,7 +63,7 @@ static int imx6_pm_domain_power_off(struct generic_pm_domain *genpd) | |||
| 69 | u32 val; | 63 | u32 val; |
| 70 | 64 | ||
| 71 | /* Read ISO and ISO2SW power down delays */ | 65 | /* Read ISO and ISO2SW power down delays */ |
| 72 | regmap_read(pd->regmap, pd->reg_offs + GPC_PGC_PUPSCR_OFFS, &val); | 66 | regmap_read(pd->regmap, pd->reg_offs + GPC_PGC_PDNSCR_OFFS, &val); |
| 73 | iso = val & 0x3f; | 67 | iso = val & 0x3f; |
| 74 | iso2sw = (val >> 8) & 0x3f; | 68 | iso2sw = (val >> 8) & 0x3f; |
| 75 | 69 | ||
| @@ -247,6 +241,7 @@ builtin_platform_driver(imx_pgc_power_domain_driver) | |||
| 247 | #define GPC_PGC_DOMAIN_ARM 0 | 241 | #define GPC_PGC_DOMAIN_ARM 0 |
| 248 | #define GPC_PGC_DOMAIN_PU 1 | 242 | #define GPC_PGC_DOMAIN_PU 1 |
| 249 | #define GPC_PGC_DOMAIN_DISPLAY 2 | 243 | #define GPC_PGC_DOMAIN_DISPLAY 2 |
| 244 | #define GPC_PGC_DOMAIN_PCI 3 | ||
| 250 | 245 | ||
| 251 | static struct genpd_power_state imx6_pm_domain_pu_state = { | 246 | static struct genpd_power_state imx6_pm_domain_pu_state = { |
| 252 | .power_off_latency_ns = 25000, | 247 | .power_off_latency_ns = 25000, |
| @@ -254,12 +249,13 @@ static struct genpd_power_state imx6_pm_domain_pu_state = { | |||
| 254 | }; | 249 | }; |
| 255 | 250 | ||
| 256 | static struct imx_pm_domain imx_gpc_domains[] = { | 251 | static struct imx_pm_domain imx_gpc_domains[] = { |
| 257 | { | 252 | [GPC_PGC_DOMAIN_ARM] { |
| 258 | .base = { | 253 | .base = { |
| 259 | .name = "ARM", | 254 | .name = "ARM", |
| 260 | .flags = GENPD_FLAG_ALWAYS_ON, | 255 | .flags = GENPD_FLAG_ALWAYS_ON, |
| 261 | }, | 256 | }, |
| 262 | }, { | 257 | }, |
| 258 | [GPC_PGC_DOMAIN_PU] { | ||
| 263 | .base = { | 259 | .base = { |
| 264 | .name = "PU", | 260 | .name = "PU", |
| 265 | .power_off = imx6_pm_domain_power_off, | 261 | .power_off = imx6_pm_domain_power_off, |
| @@ -269,7 +265,8 @@ static struct imx_pm_domain imx_gpc_domains[] = { | |||
| 269 | }, | 265 | }, |
| 270 | .reg_offs = 0x260, | 266 | .reg_offs = 0x260, |
| 271 | .cntr_pdn_bit = 0, | 267 | .cntr_pdn_bit = 0, |
| 272 | }, { | 268 | }, |
| 269 | [GPC_PGC_DOMAIN_DISPLAY] { | ||
| 273 | .base = { | 270 | .base = { |
| 274 | .name = "DISPLAY", | 271 | .name = "DISPLAY", |
| 275 | .power_off = imx6_pm_domain_power_off, | 272 | .power_off = imx6_pm_domain_power_off, |
| @@ -277,7 +274,8 @@ static struct imx_pm_domain imx_gpc_domains[] = { | |||
| 277 | }, | 274 | }, |
| 278 | .reg_offs = 0x240, | 275 | .reg_offs = 0x240, |
| 279 | .cntr_pdn_bit = 4, | 276 | .cntr_pdn_bit = 4, |
| 280 | }, { | 277 | }, |
| 278 | [GPC_PGC_DOMAIN_PCI] { | ||
| 281 | .base = { | 279 | .base = { |
| 282 | .name = "PCI", | 280 | .name = "PCI", |
| 283 | .power_off = imx6_pm_domain_power_off, | 281 | .power_off = imx6_pm_domain_power_off, |
| @@ -348,8 +346,8 @@ static const struct regmap_config imx_gpc_regmap_config = { | |||
| 348 | }; | 346 | }; |
| 349 | 347 | ||
| 350 | static struct generic_pm_domain *imx_gpc_onecell_domains[] = { | 348 | static struct generic_pm_domain *imx_gpc_onecell_domains[] = { |
| 351 | &imx_gpc_domains[0].base, | 349 | &imx_gpc_domains[GPC_PGC_DOMAIN_ARM].base, |
| 352 | &imx_gpc_domains[1].base, | 350 | &imx_gpc_domains[GPC_PGC_DOMAIN_PU].base, |
| 353 | }; | 351 | }; |
| 354 | 352 | ||
| 355 | static struct genpd_onecell_data imx_gpc_onecell_data = { | 353 | static struct genpd_onecell_data imx_gpc_onecell_data = { |
diff --git a/drivers/soc/imx/gpcv2.c b/drivers/soc/imx/gpcv2.c index 6ef18cf8f243..e7b5994fee9d 100644 --- a/drivers/soc/imx/gpcv2.c +++ b/drivers/soc/imx/gpcv2.c | |||
| @@ -1,3 +1,4 @@ | |||
| 1 | // SPDX-License-Identifier: GPL-2.0+ | ||
| 1 | /* | 2 | /* |
| 2 | * Copyright 2017 Impinj, Inc | 3 | * Copyright 2017 Impinj, Inc |
| 3 | * Author: Andrey Smirnov <andrew.smirnov@gmail.com> | 4 | * Author: Andrey Smirnov <andrew.smirnov@gmail.com> |
| @@ -5,29 +6,23 @@ | |||
| 5 | * Based on the code of analogus driver: | 6 | * Based on the code of analogus driver: |
| 6 | * | 7 | * |
| 7 | * Copyright 2015-2017 Pengutronix, Lucas Stach <kernel@pengutronix.de> | 8 | * Copyright 2015-2017 Pengutronix, Lucas Stach <kernel@pengutronix.de> |
| 8 | * | ||
| 9 | * The code contained herein is licensed under the GNU General Public | ||
| 10 | * License. You may obtain a copy of the GNU General Public License | ||
| 11 | * Version 2 or later at the following locations: | ||
| 12 | * | ||
| 13 | * http://www.opensource.org/licenses/gpl-license.html | ||
| 14 | * http://www.gnu.org/copyleft/gpl.html | ||
| 15 | */ | 9 | */ |
| 16 | 10 | ||
| 11 | #include <linux/of_device.h> | ||
| 17 | #include <linux/platform_device.h> | 12 | #include <linux/platform_device.h> |
| 18 | #include <linux/pm_domain.h> | 13 | #include <linux/pm_domain.h> |
| 19 | #include <linux/regmap.h> | 14 | #include <linux/regmap.h> |
| 20 | #include <linux/regulator/consumer.h> | 15 | #include <linux/regulator/consumer.h> |
| 21 | #include <dt-bindings/power/imx7-power.h> | 16 | #include <dt-bindings/power/imx7-power.h> |
| 22 | 17 | ||
| 23 | #define GPC_LPCR_A7_BSC 0x000 | 18 | #define GPC_LPCR_A_CORE_BSC 0x000 |
| 24 | 19 | ||
| 25 | #define GPC_PGC_CPU_MAPPING 0x0ec | 20 | #define GPC_PGC_CPU_MAPPING 0x0ec |
| 26 | #define USB_HSIC_PHY_A7_DOMAIN BIT(6) | 21 | #define USB_HSIC_PHY_A_CORE_DOMAIN BIT(6) |
| 27 | #define USB_OTG2_PHY_A7_DOMAIN BIT(5) | 22 | #define USB_OTG2_PHY_A_CORE_DOMAIN BIT(5) |
| 28 | #define USB_OTG1_PHY_A7_DOMAIN BIT(4) | 23 | #define USB_OTG1_PHY_A_CORE_DOMAIN BIT(4) |
| 29 | #define PCIE_PHY_A7_DOMAIN BIT(3) | 24 | #define PCIE_PHY_A_CORE_DOMAIN BIT(3) |
| 30 | #define MIPI_PHY_A7_DOMAIN BIT(2) | 25 | #define MIPI_PHY_A_CORE_DOMAIN BIT(2) |
| 31 | 26 | ||
| 32 | #define GPC_PU_PGC_SW_PUP_REQ 0x0f8 | 27 | #define GPC_PU_PGC_SW_PUP_REQ 0x0f8 |
| 33 | #define GPC_PU_PGC_SW_PDN_REQ 0x104 | 28 | #define GPC_PU_PGC_SW_PDN_REQ 0x104 |
| @@ -53,7 +48,7 @@ | |||
| 53 | 48 | ||
| 54 | #define GPC_PGC_CTRL_PCR BIT(0) | 49 | #define GPC_PGC_CTRL_PCR BIT(0) |
| 55 | 50 | ||
| 56 | struct imx7_pgc_domain { | 51 | struct imx_pgc_domain { |
| 57 | struct generic_pm_domain genpd; | 52 | struct generic_pm_domain genpd; |
| 58 | struct regmap *regmap; | 53 | struct regmap *regmap; |
| 59 | struct regulator *regulator; | 54 | struct regulator *regulator; |
| @@ -69,11 +64,16 @@ struct imx7_pgc_domain { | |||
| 69 | struct device *dev; | 64 | struct device *dev; |
| 70 | }; | 65 | }; |
| 71 | 66 | ||
| 72 | static int imx7_gpc_pu_pgc_sw_pxx_req(struct generic_pm_domain *genpd, | 67 | struct imx_pgc_domain_data { |
| 68 | const struct imx_pgc_domain *domains; | ||
| 69 | size_t domains_num; | ||
| 70 | }; | ||
| 71 | |||
| 72 | static int imx_gpc_pu_pgc_sw_pxx_req(struct generic_pm_domain *genpd, | ||
| 73 | bool on) | 73 | bool on) |
| 74 | { | 74 | { |
| 75 | struct imx7_pgc_domain *domain = container_of(genpd, | 75 | struct imx_pgc_domain *domain = container_of(genpd, |
| 76 | struct imx7_pgc_domain, | 76 | struct imx_pgc_domain, |
| 77 | genpd); | 77 | genpd); |
| 78 | unsigned int offset = on ? | 78 | unsigned int offset = on ? |
| 79 | GPC_PU_PGC_SW_PUP_REQ : GPC_PU_PGC_SW_PDN_REQ; | 79 | GPC_PU_PGC_SW_PUP_REQ : GPC_PU_PGC_SW_PDN_REQ; |
| @@ -150,24 +150,24 @@ unmap: | |||
| 150 | return ret; | 150 | return ret; |
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | static int imx7_gpc_pu_pgc_sw_pup_req(struct generic_pm_domain *genpd) | 153 | static int imx_gpc_pu_pgc_sw_pup_req(struct generic_pm_domain *genpd) |
| 154 | { | 154 | { |
| 155 | return imx7_gpc_pu_pgc_sw_pxx_req(genpd, true); | 155 | return imx_gpc_pu_pgc_sw_pxx_req(genpd, true); |
| 156 | } | 156 | } |
| 157 | 157 | ||
| 158 | static int imx7_gpc_pu_pgc_sw_pdn_req(struct generic_pm_domain *genpd) | 158 | static int imx_gpc_pu_pgc_sw_pdn_req(struct generic_pm_domain *genpd) |
| 159 | { | 159 | { |
| 160 | return imx7_gpc_pu_pgc_sw_pxx_req(genpd, false); | 160 | return imx_gpc_pu_pgc_sw_pxx_req(genpd, false); |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | static const struct imx7_pgc_domain imx7_pgc_domains[] = { | 163 | static const struct imx_pgc_domain imx7_pgc_domains[] = { |
| 164 | [IMX7_POWER_DOMAIN_MIPI_PHY] = { | 164 | [IMX7_POWER_DOMAIN_MIPI_PHY] = { |
| 165 | .genpd = { | 165 | .genpd = { |
| 166 | .name = "mipi-phy", | 166 | .name = "mipi-phy", |
| 167 | }, | 167 | }, |
| 168 | .bits = { | 168 | .bits = { |
| 169 | .pxx = MIPI_PHY_SW_Pxx_REQ, | 169 | .pxx = MIPI_PHY_SW_Pxx_REQ, |
| 170 | .map = MIPI_PHY_A7_DOMAIN, | 170 | .map = MIPI_PHY_A_CORE_DOMAIN, |
| 171 | }, | 171 | }, |
| 172 | .voltage = 1000000, | 172 | .voltage = 1000000, |
| 173 | .pgc = PGC_MIPI, | 173 | .pgc = PGC_MIPI, |
| @@ -179,7 +179,7 @@ static const struct imx7_pgc_domain imx7_pgc_domains[] = { | |||
| 179 | }, | 179 | }, |
| 180 | .bits = { | 180 | .bits = { |
| 181 | .pxx = PCIE_PHY_SW_Pxx_REQ, | 181 | .pxx = PCIE_PHY_SW_Pxx_REQ, |
| 182 | .map = PCIE_PHY_A7_DOMAIN, | 182 | .map = PCIE_PHY_A_CORE_DOMAIN, |
| 183 | }, | 183 | }, |
| 184 | .voltage = 1000000, | 184 | .voltage = 1000000, |
| 185 | .pgc = PGC_PCIE, | 185 | .pgc = PGC_PCIE, |
| @@ -191,16 +191,21 @@ static const struct imx7_pgc_domain imx7_pgc_domains[] = { | |||
| 191 | }, | 191 | }, |
| 192 | .bits = { | 192 | .bits = { |
| 193 | .pxx = USB_HSIC_PHY_SW_Pxx_REQ, | 193 | .pxx = USB_HSIC_PHY_SW_Pxx_REQ, |
| 194 | .map = USB_HSIC_PHY_A7_DOMAIN, | 194 | .map = USB_HSIC_PHY_A_CORE_DOMAIN, |
| 195 | }, | 195 | }, |
| 196 | .voltage = 1200000, | 196 | .voltage = 1200000, |
| 197 | .pgc = PGC_USB_HSIC, | 197 | .pgc = PGC_USB_HSIC, |
| 198 | }, | 198 | }, |
| 199 | }; | 199 | }; |
| 200 | 200 | ||
| 201 | static int imx7_pgc_domain_probe(struct platform_device *pdev) | 201 | static const struct imx_pgc_domain_data imx7_pgc_domain_data = { |
| 202 | .domains = imx7_pgc_domains, | ||
| 203 | .domains_num = ARRAY_SIZE(imx7_pgc_domains), | ||
| 204 | }; | ||
| 205 | |||
| 206 | static int imx_pgc_domain_probe(struct platform_device *pdev) | ||
| 202 | { | 207 | { |
| 203 | struct imx7_pgc_domain *domain = pdev->dev.platform_data; | 208 | struct imx_pgc_domain *domain = pdev->dev.platform_data; |
| 204 | int ret; | 209 | int ret; |
| 205 | 210 | ||
| 206 | domain->dev = &pdev->dev; | 211 | domain->dev = &pdev->dev; |
| @@ -233,9 +238,9 @@ static int imx7_pgc_domain_probe(struct platform_device *pdev) | |||
| 233 | return ret; | 238 | return ret; |
| 234 | } | 239 | } |
| 235 | 240 | ||
| 236 | static int imx7_pgc_domain_remove(struct platform_device *pdev) | 241 | static int imx_pgc_domain_remove(struct platform_device *pdev) |
| 237 | { | 242 | { |
| 238 | struct imx7_pgc_domain *domain = pdev->dev.platform_data; | 243 | struct imx_pgc_domain *domain = pdev->dev.platform_data; |
| 239 | 244 | ||
| 240 | of_genpd_del_provider(domain->dev->of_node); | 245 | of_genpd_del_provider(domain->dev->of_node); |
| 241 | pm_genpd_remove(&domain->genpd); | 246 | pm_genpd_remove(&domain->genpd); |
| @@ -243,25 +248,26 @@ static int imx7_pgc_domain_remove(struct platform_device *pdev) | |||
| 243 | return 0; | 248 | return 0; |
| 244 | } | 249 | } |
| 245 | 250 | ||
| 246 | static const struct platform_device_id imx7_pgc_domain_id[] = { | 251 | static const struct platform_device_id imx_pgc_domain_id[] = { |
| 247 | { "imx7-pgc-domain", }, | 252 | { "imx-pgc-domain", }, |
| 248 | { }, | 253 | { }, |
| 249 | }; | 254 | }; |
| 250 | 255 | ||
| 251 | static struct platform_driver imx7_pgc_domain_driver = { | 256 | static struct platform_driver imx_pgc_domain_driver = { |
| 252 | .driver = { | 257 | .driver = { |
| 253 | .name = "imx7-pgc", | 258 | .name = "imx-pgc", |
| 254 | }, | 259 | }, |
| 255 | .probe = imx7_pgc_domain_probe, | 260 | .probe = imx_pgc_domain_probe, |
| 256 | .remove = imx7_pgc_domain_remove, | 261 | .remove = imx_pgc_domain_remove, |
| 257 | .id_table = imx7_pgc_domain_id, | 262 | .id_table = imx_pgc_domain_id, |
| 258 | }; | 263 | }; |
| 259 | builtin_platform_driver(imx7_pgc_domain_driver) | 264 | builtin_platform_driver(imx_pgc_domain_driver) |
| 260 | 265 | ||
| 261 | static int imx_gpcv2_probe(struct platform_device *pdev) | 266 | static int imx_gpcv2_probe(struct platform_device *pdev) |
| 262 | { | 267 | { |
| 268 | static const struct imx_pgc_domain_data *domain_data; | ||
| 263 | static const struct regmap_range yes_ranges[] = { | 269 | static const struct regmap_range yes_ranges[] = { |
| 264 | regmap_reg_range(GPC_LPCR_A7_BSC, | 270 | regmap_reg_range(GPC_LPCR_A_CORE_BSC, |
| 265 | GPC_M4_PU_PDN_FLG), | 271 | GPC_M4_PU_PDN_FLG), |
| 266 | regmap_reg_range(GPC_PGC_CTRL(PGC_MIPI), | 272 | regmap_reg_range(GPC_PGC_CTRL(PGC_MIPI), |
| 267 | GPC_PGC_SR(PGC_MIPI)), | 273 | GPC_PGC_SR(PGC_MIPI)), |
| @@ -307,9 +313,11 @@ static int imx_gpcv2_probe(struct platform_device *pdev) | |||
| 307 | return ret; | 313 | return ret; |
| 308 | } | 314 | } |
| 309 | 315 | ||
| 316 | domain_data = of_device_get_match_data(&pdev->dev); | ||
| 317 | |||
| 310 | for_each_child_of_node(pgc_np, np) { | 318 | for_each_child_of_node(pgc_np, np) { |
| 311 | struct platform_device *pd_pdev; | 319 | struct platform_device *pd_pdev; |
| 312 | struct imx7_pgc_domain *domain; | 320 | struct imx_pgc_domain *domain; |
| 313 | u32 domain_index; | 321 | u32 domain_index; |
| 314 | 322 | ||
| 315 | ret = of_property_read_u32(np, "reg", &domain_index); | 323 | ret = of_property_read_u32(np, "reg", &domain_index); |
| @@ -319,14 +327,14 @@ static int imx_gpcv2_probe(struct platform_device *pdev) | |||
| 319 | return ret; | 327 | return ret; |
| 320 | } | 328 | } |
| 321 | 329 | ||
| 322 | if (domain_index >= ARRAY_SIZE(imx7_pgc_domains)) { | 330 | if (domain_index >= domain_data->domains_num) { |
| 323 | dev_warn(dev, | 331 | dev_warn(dev, |
| 324 | "Domain index %d is out of bounds\n", | 332 | "Domain index %d is out of bounds\n", |
| 325 | domain_index); | 333 | domain_index); |
| 326 | continue; | 334 | continue; |
| 327 | } | 335 | } |
| 328 | 336 | ||
| 329 | pd_pdev = platform_device_alloc("imx7-pgc-domain", | 337 | pd_pdev = platform_device_alloc("imx-pgc-domain", |
| 330 | domain_index); | 338 | domain_index); |
| 331 | if (!pd_pdev) { | 339 | if (!pd_pdev) { |
| 332 | dev_err(dev, "Failed to allocate platform device\n"); | 340 | dev_err(dev, "Failed to allocate platform device\n"); |
| @@ -335,8 +343,8 @@ static int imx_gpcv2_probe(struct platform_device *pdev) | |||
| 335 | } | 343 | } |
| 336 | 344 | ||
| 337 | ret = platform_device_add_data(pd_pdev, | 345 | ret = platform_device_add_data(pd_pdev, |
| 338 | &imx7_pgc_domains[domain_index], | 346 | &domain_data->domains[domain_index], |
| 339 | sizeof(imx7_pgc_domains[domain_index])); | 347 | sizeof(domain_data->domains[domain_index])); |
| 340 | if (ret) { | 348 | if (ret) { |
| 341 | platform_device_put(pd_pdev); | 349 | platform_device_put(pd_pdev); |
| 342 | of_node_put(np); | 350 | of_node_put(np); |
| @@ -345,8 +353,8 @@ static int imx_gpcv2_probe(struct platform_device *pdev) | |||
| 345 | 353 | ||
| 346 | domain = pd_pdev->dev.platform_data; | 354 | domain = pd_pdev->dev.platform_data; |
| 347 | domain->regmap = regmap; | 355 | domain->regmap = regmap; |
| 348 | domain->genpd.power_on = imx7_gpc_pu_pgc_sw_pup_req; | 356 | domain->genpd.power_on = imx_gpc_pu_pgc_sw_pup_req; |
| 349 | domain->genpd.power_off = imx7_gpc_pu_pgc_sw_pdn_req; | 357 | domain->genpd.power_off = imx_gpc_pu_pgc_sw_pdn_req; |
| 350 | 358 | ||
| 351 | pd_pdev->dev.parent = dev; | 359 | pd_pdev->dev.parent = dev; |
| 352 | pd_pdev->dev.of_node = np; | 360 | pd_pdev->dev.of_node = np; |
| @@ -363,7 +371,7 @@ static int imx_gpcv2_probe(struct platform_device *pdev) | |||
| 363 | } | 371 | } |
| 364 | 372 | ||
| 365 | static const struct of_device_id imx_gpcv2_dt_ids[] = { | 373 | static const struct of_device_id imx_gpcv2_dt_ids[] = { |
| 366 | { .compatible = "fsl,imx7d-gpc" }, | 374 | { .compatible = "fsl,imx7d-gpc", .data = &imx7_pgc_domain_data, }, |
| 367 | { } | 375 | { } |
| 368 | }; | 376 | }; |
| 369 | 377 | ||
