diff options
Diffstat (limited to 'drivers/power')
-rwxr-xr-x[-rw-r--r--] | drivers/power/avs/rockchip-io-domain.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/drivers/power/avs/rockchip-io-domain.c b/drivers/power/avs/rockchip-io-domain.c index 80994566a1c8..8986382718dd 100644..100755 --- a/drivers/power/avs/rockchip-io-domain.c +++ b/drivers/power/avs/rockchip-io-domain.c | |||
@@ -47,6 +47,10 @@ | |||
47 | #define RK3368_SOC_CON15_FLASH0 BIT(14) | 47 | #define RK3368_SOC_CON15_FLASH0 BIT(14) |
48 | #define RK3368_SOC_FLASH_SUPPLY_NUM 2 | 48 | #define RK3368_SOC_FLASH_SUPPLY_NUM 2 |
49 | 49 | ||
50 | #define RK3399_PMUGRF_CON0 0x180 | ||
51 | #define RK3399_PMUGRF_CON0_VSEL BIT(8) | ||
52 | #define RK3399_PMUGRF_VSEL_SUPPLY_NUM 9 | ||
53 | |||
50 | struct rockchip_iodomain; | 54 | struct rockchip_iodomain; |
51 | 55 | ||
52 | /** | 56 | /** |
@@ -181,6 +185,25 @@ static void rk3368_iodomain_init(struct rockchip_iodomain *iod) | |||
181 | dev_warn(iod->dev, "couldn't update flash0 ctrl\n"); | 185 | dev_warn(iod->dev, "couldn't update flash0 ctrl\n"); |
182 | } | 186 | } |
183 | 187 | ||
188 | static void rk3399_pmu_iodomain_init(struct rockchip_iodomain *iod) | ||
189 | { | ||
190 | int ret; | ||
191 | u32 val; | ||
192 | |||
193 | /* if no pmu io supply we should leave things alone */ | ||
194 | if (!iod->supplies[RK3399_PMUGRF_VSEL_SUPPLY_NUM].reg) | ||
195 | return; | ||
196 | |||
197 | /* | ||
198 | * set pmu io iodomain to also use this framework | ||
199 | * instead of a special gpio. | ||
200 | */ | ||
201 | val = RK3399_PMUGRF_CON0_VSEL | (RK3399_PMUGRF_CON0_VSEL << 16); | ||
202 | ret = regmap_write(iod->grf, RK3399_PMUGRF_CON0, val); | ||
203 | if (ret < 0) | ||
204 | dev_warn(iod->dev, "couldn't update pmu io iodomain ctrl\n"); | ||
205 | } | ||
206 | |||
184 | /* | 207 | /* |
185 | * On the rk3188 the io-domains are handled by a shared register with the | 208 | * On the rk3188 the io-domains are handled by a shared register with the |
186 | * lower 8 bits being still being continuing drive-strength settings. | 209 | * lower 8 bits being still being continuing drive-strength settings. |
@@ -252,6 +275,33 @@ static const struct rockchip_iodomain_soc_data soc_data_rk3368_pmu = { | |||
252 | }, | 275 | }, |
253 | }; | 276 | }; |
254 | 277 | ||
278 | static const struct rockchip_iodomain_soc_data soc_data_rk3399 = { | ||
279 | .grf_offset = 0xe640, | ||
280 | .supply_names = { | ||
281 | "bt656", /* APIO2_VDD */ | ||
282 | "audio", /* APIO5_VDD */ | ||
283 | "sdmmc", /* SDMMC0_VDD */ | ||
284 | "gpio1830", /* APIO4_VDD */ | ||
285 | }, | ||
286 | }; | ||
287 | |||
288 | static const struct rockchip_iodomain_soc_data soc_data_rk3399_pmu = { | ||
289 | .grf_offset = 0x180, | ||
290 | .supply_names = { | ||
291 | NULL, | ||
292 | NULL, | ||
293 | NULL, | ||
294 | NULL, | ||
295 | NULL, | ||
296 | NULL, | ||
297 | NULL, | ||
298 | NULL, | ||
299 | NULL, | ||
300 | "pmu1830", /* PMUIO2_VDD */ | ||
301 | }, | ||
302 | .init = rk3399_pmu_iodomain_init, | ||
303 | }; | ||
304 | |||
255 | static const struct of_device_id rockchip_iodomain_match[] = { | 305 | static const struct of_device_id rockchip_iodomain_match[] = { |
256 | { | 306 | { |
257 | .compatible = "rockchip,rk3188-io-voltage-domain", | 307 | .compatible = "rockchip,rk3188-io-voltage-domain", |
@@ -269,6 +319,14 @@ static const struct of_device_id rockchip_iodomain_match[] = { | |||
269 | .compatible = "rockchip,rk3368-pmu-io-voltage-domain", | 319 | .compatible = "rockchip,rk3368-pmu-io-voltage-domain", |
270 | .data = (void *)&soc_data_rk3368_pmu | 320 | .data = (void *)&soc_data_rk3368_pmu |
271 | }, | 321 | }, |
322 | { | ||
323 | .compatible = "rockchip,rk3399-io-voltage-domain", | ||
324 | .data = (void *)&soc_data_rk3399 | ||
325 | }, | ||
326 | { | ||
327 | .compatible = "rockchip,rk3399-pmu-io-voltage-domain", | ||
328 | .data = (void *)&soc_data_rk3399_pmu | ||
329 | }, | ||
272 | { /* sentinel */ }, | 330 | { /* sentinel */ }, |
273 | }; | 331 | }; |
274 | MODULE_DEVICE_TABLE(of, rockchip_iodomain_match); | 332 | MODULE_DEVICE_TABLE(of, rockchip_iodomain_match); |