aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/power/avs/rockchip-io-domain.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/power/avs/rockchip-io-domain.c')
-rw-r--r--drivers/power/avs/rockchip-io-domain.c59
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
46struct rockchip_iodomain; 50struct 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
165static 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
227static 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
243static 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
204static const struct of_device_id rockchip_iodomain_match[] = { 255static 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