diff options
Diffstat (limited to 'drivers/power/avs/rockchip-io-domain.c')
-rw-r--r-- | drivers/power/avs/rockchip-io-domain.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/drivers/power/avs/rockchip-io-domain.c b/drivers/power/avs/rockchip-io-domain.c index 3ae35d0590d2..2e300028f0f7 100644 --- a/drivers/power/avs/rockchip-io-domain.c +++ b/drivers/power/avs/rockchip-io-domain.c | |||
@@ -43,6 +43,10 @@ | |||
43 | #define RK3288_SOC_CON2_FLASH0 BIT(7) | 43 | #define RK3288_SOC_CON2_FLASH0 BIT(7) |
44 | #define RK3288_SOC_FLASH_SUPPLY_NUM 2 | 44 | #define RK3288_SOC_FLASH_SUPPLY_NUM 2 |
45 | 45 | ||
46 | #define RK3368_SOC_CON15 0x43c | ||
47 | #define RK3368_SOC_CON15_FLASH0 BIT(14) | ||
48 | #define RK3368_SOC_FLASH_SUPPLY_NUM 2 | ||
49 | |||
46 | struct rockchip_iodomain; | 50 | struct rockchip_iodomain; |
47 | 51 | ||
48 | /** | 52 | /** |
@@ -158,6 +162,25 @@ static void rk3288_iodomain_init(struct rockchip_iodomain *iod) | |||
158 | dev_warn(iod->dev, "couldn't update flash0 ctrl\n"); | 162 | dev_warn(iod->dev, "couldn't update flash0 ctrl\n"); |
159 | } | 163 | } |
160 | 164 | ||
165 | static void rk3368_iodomain_init(struct rockchip_iodomain *iod) | ||
166 | { | ||
167 | int ret; | ||
168 | u32 val; | ||
169 | |||
170 | /* if no flash supply we should leave things alone */ | ||
171 | if (!iod->supplies[RK3368_SOC_FLASH_SUPPLY_NUM].reg) | ||
172 | return; | ||
173 | |||
174 | /* | ||
175 | * set flash0 iodomain to also use this framework | ||
176 | * instead of a special gpio. | ||
177 | */ | ||
178 | val = RK3368_SOC_CON15_FLASH0 | (RK3368_SOC_CON15_FLASH0 << 16); | ||
179 | ret = regmap_write(iod->grf, RK3368_SOC_CON15, val); | ||
180 | if (ret < 0) | ||
181 | dev_warn(iod->dev, "couldn't update flash0 ctrl\n"); | ||
182 | } | ||
183 | |||
161 | /* | 184 | /* |
162 | * On the rk3188 the io-domains are handled by a shared register with the | 185 | * On the rk3188 the io-domains are handled by a shared register with the |
163 | * lower 8 bits being still being continuing drive-strength settings. | 186 | * lower 8 bits being still being continuing drive-strength settings. |
@@ -201,6 +224,34 @@ static const struct rockchip_iodomain_soc_data soc_data_rk3288 = { | |||
201 | .init = rk3288_iodomain_init, | 224 | .init = rk3288_iodomain_init, |
202 | }; | 225 | }; |
203 | 226 | ||
227 | static const struct rockchip_iodomain_soc_data soc_data_rk3368 = { | ||
228 | .grf_offset = 0x900, | ||
229 | .supply_names = { | ||
230 | NULL, /* reserved */ | ||
231 | "dvp", /* DVPIO_VDD */ | ||
232 | "flash0", /* FLASH0_VDD (emmc) */ | ||
233 | "wifi", /* APIO2_VDD (sdio0) */ | ||
234 | NULL, | ||
235 | "audio", /* APIO3_VDD */ | ||
236 | "sdcard", /* SDMMC0_VDD (sdmmc) */ | ||
237 | "gpio30", /* APIO1_VDD */ | ||
238 | "gpio1830", /* APIO4_VDD (gpujtag) */ | ||
239 | }, | ||
240 | .init = rk3368_iodomain_init, | ||
241 | }; | ||
242 | |||
243 | static const struct rockchip_iodomain_soc_data soc_data_rk3368_pmu = { | ||
244 | .grf_offset = 0x100, | ||
245 | .supply_names = { | ||
246 | NULL, | ||
247 | NULL, | ||
248 | NULL, | ||
249 | NULL, | ||
250 | "pmu", /*PMU IO domain*/ | ||
251 | "vop", /*LCDC IO domain*/ | ||
252 | }, | ||
253 | }; | ||
254 | |||
204 | static const struct of_device_id rockchip_iodomain_match[] = { | 255 | static const struct of_device_id rockchip_iodomain_match[] = { |
205 | { | 256 | { |
206 | .compatible = "rockchip,rk3188-io-voltage-domain", | 257 | .compatible = "rockchip,rk3188-io-voltage-domain", |
@@ -210,6 +261,14 @@ static const struct of_device_id rockchip_iodomain_match[] = { | |||
210 | .compatible = "rockchip,rk3288-io-voltage-domain", | 261 | .compatible = "rockchip,rk3288-io-voltage-domain", |
211 | .data = (void *)&soc_data_rk3288 | 262 | .data = (void *)&soc_data_rk3288 |
212 | }, | 263 | }, |
264 | { | ||
265 | .compatible = "rockchip,rk3368-io-voltage-domain", | ||
266 | .data = (void *)&soc_data_rk3368 | ||
267 | }, | ||
268 | { | ||
269 | .compatible = "rockchip,rk3368-pmu-io-voltage-domain", | ||
270 | .data = (void *)&soc_data_rk3368_pmu | ||
271 | }, | ||
213 | { /* sentinel */ }, | 272 | { /* sentinel */ }, |
214 | }; | 273 | }; |
215 | 274 | ||