From df8465ab9d5366f5ae65ae109116653ce278a980 Mon Sep 17 00:00:00 2001 From: Jianqun Xu Date: Tue, 21 Apr 2020 10:14:44 +0800 Subject: [PATCH] power/avs: rockchip-io-domain: rv1126 support to control vccio1 Change-Id: I000a2c7c6e3747aebb6e4b3dd32cb02821c53f15 Signed-off-by: Jianqun Xu --- drivers/power/avs/rockchip-io-domain.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/drivers/power/avs/rockchip-io-domain.c b/drivers/power/avs/rockchip-io-domain.c index ce902fbb6493..b6e2ed384582 100644 --- a/drivers/power/avs/rockchip-io-domain.c +++ b/drivers/power/avs/rockchip-io-domain.c @@ -43,6 +43,10 @@ #define PX30_IO_VSEL_VCCIO6_SRC BIT(0) #define PX30_IO_VSEL_VCCIO6_SUPPLY_NUM 1 +#define RV1126_PMUGRF_IO_VSEL 0x140 +#define RV1126_PMUGRF_IO_VSEL_VCCIO1_SRC BIT(0) +#define RV1126_PMUGRF_IO_VSEL_VCCIO1_SUPPLY_NUM 1 + #define RK3288_SOC_CON2 0x24c #define RK3288_SOC_CON2_FLASH0 BIT(7) #define RK3288_SOC_FLASH_SUPPLY_NUM 2 @@ -178,6 +182,26 @@ static void px30_iodomain_init(struct rockchip_iodomain *iod) dev_warn(iod->dev, "couldn't update vccio0 ctrl\n"); } +static void rv1126_pmu_iodomain_init(struct rockchip_iodomain *iod) +{ + int ret; + u32 val; + + /* if no pmu io supply we should leave things alone */ + if (!iod->supplies[RV1126_PMUGRF_IO_VSEL_VCCIO1_SUPPLY_NUM].reg) + return; + + /* + * set pmu io iodomain to also use this framework + * instead of a special gpio. + */ + val = RV1126_PMUGRF_IO_VSEL_VCCIO1_SRC | + (RV1126_PMUGRF_IO_VSEL_VCCIO1_SRC << 16); + ret = regmap_write(iod->grf, RV1126_PMUGRF_IO_VSEL, val); + if (ret < 0) + dev_warn(iod->dev, "couldn't update pmu io iodomain ctrl\n"); +} + static void rk3288_iodomain_init(struct rockchip_iodomain *iod) { int ret; @@ -489,6 +513,7 @@ static const struct rockchip_iodomain_soc_data soc_data_rv1126_pmu = { "pmuio0", "pmuio1", }, + .init = rv1126_pmu_iodomain_init, }; static const struct of_device_id rockchip_iodomain_match[] = {