]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soc: rockchip: io-domain: Add RK3308 IO voltage domains
authorDavid Wu <david.wu@rock-chips.com>
Tue, 21 May 2024 21:10:13 +0000 (21:10 +0000)
committerHeiko Stuebner <heiko@sntech.de>
Fri, 23 Aug 2024 09:52:53 +0000 (11:52 +0200)
Add IO voltage domains support for the RK3308 SoC.

Signed-off-by: David Wu <david.wu@rock-chips.com>
Signed-off-by: Jianqun Xu <jay.xu@rock-chips.com>
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
Link: https://lore.kernel.org/r/20240521211029.1236094-11-jonas@kwiboo.se
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
drivers/soc/rockchip/io-domain.c

index 18f809c160a72063033fc71f65fee0db9588e1b3..fd9fd31f71c25382382bbaee5996cbb3c14986a1 100644 (file)
 #define RK3288_SOC_CON2_FLASH0         BIT(7)
 #define RK3288_SOC_FLASH_SUPPLY_NUM    2
 
+#define RK3308_SOC_CON0                        0x300
+#define RK3308_SOC_CON0_VCCIO3         BIT(8)
+#define RK3308_SOC_VCCIO3_SUPPLY_NUM   3
+
 #define RK3328_SOC_CON4                        0x410
 #define RK3328_SOC_CON4_VCCIO2         BIT(7)
 #define RK3328_SOC_VCCIO2_SUPPLY_NUM   1
@@ -229,6 +233,25 @@ static void rk3288_iodomain_init(struct rockchip_iodomain *iod)
                dev_warn(iod->dev, "couldn't update flash0 ctrl\n");
 }
 
+static void rk3308_iodomain_init(struct rockchip_iodomain *iod)
+{
+       int ret;
+       u32 val;
+
+       /* if no vccio3 supply we should leave things alone */
+       if (!iod->supplies[RK3308_SOC_VCCIO3_SUPPLY_NUM].reg)
+               return;
+
+       /*
+        * set vccio3 iodomain to also use this framework
+        * instead of a special gpio.
+        */
+       val = RK3308_SOC_CON0_VCCIO3 | (RK3308_SOC_CON0_VCCIO3 << 16);
+       ret = regmap_write(iod->grf, RK3308_SOC_CON0, val);
+       if (ret < 0)
+               dev_warn(iod->dev, "couldn't update vccio3 vsel ctrl\n");
+}
+
 static void rk3328_iodomain_init(struct rockchip_iodomain *iod)
 {
        int ret;
@@ -376,6 +399,19 @@ static const struct rockchip_iodomain_soc_data soc_data_rk3288 = {
        .init = rk3288_iodomain_init,
 };
 
+static const struct rockchip_iodomain_soc_data soc_data_rk3308 = {
+       .grf_offset = 0x300,
+       .supply_names = {
+               "vccio0",
+               "vccio1",
+               "vccio2",
+               "vccio3",
+               "vccio4",
+               "vccio5",
+       },
+       .init = rk3308_iodomain_init,
+};
+
 static const struct rockchip_iodomain_soc_data soc_data_rk3328 = {
        .grf_offset = 0x410,
        .supply_names = {
@@ -528,6 +564,10 @@ static const struct of_device_id rockchip_iodomain_match[] = {
                .compatible = "rockchip,rk3288-io-voltage-domain",
                .data = &soc_data_rk3288
        },
+       {
+               .compatible = "rockchip,rk3308-io-voltage-domain",
+               .data = &soc_data_rk3308
+       },
        {
                .compatible = "rockchip,rk3328-io-voltage-domain",
                .data = &soc_data_rk3328