PM / AVS: rockchip-io: Add rk3328 io-domains support
authordavid.wu <david.wu@rock-chips.com>
Wed, 18 Jan 2017 03:49:47 +0000 (11:49 +0800)
committerdavid.wu <david.wu@rock-chips.com>
Wed, 18 Jan 2017 04:00:29 +0000 (12:00 +0800)
Change-Id: Ib99a22042cdc23367cd48a178b61b8744a8b3a57
Signed-off-by: david.wu <david.wu@rock-chips.com>
Documentation/devicetree/bindings/power/rockchip-io-domain.txt
drivers/power/avs/rockchip-io-domain.c

index 132a7d79e907fe565f25a6f0b108e8787a739beb..50d92c5d5abae2fa752038c53ec1ac1891dfcdae 100644 (file)
@@ -33,6 +33,7 @@ Required properties:
 - compatible: should be one of:
   - "rockchip,rk3188-io-voltage-domain" for rk3188
   - "rockchip,rk3288-io-voltage-domain" for rk3288
+  - "rockchip,rk3328-io-voltage-domain" for rk3328
   - "rockchip,rk3366-io-voltage-domain" for rk3366
   - "rockchip,rk3368-io-voltage-domain" for rk3368
   - "rockchip,rk3368-pmu-io-voltage-domain" for rk3368 pmu-domains
index 9078777187aeb186aab97d88daea9ec1257927e4..610f1049f2981700307584dd5cfeed6bf52e49db 100644 (file)
 #define RK3288_SOC_CON2_FLASH0         BIT(7)
 #define RK3288_SOC_FLASH_SUPPLY_NUM    2
 
+#define RK3328_SOC_CON4                        0x410
+#define RK3328_SOC_CON4_VCCIO2         BIT(7)
+#define RK3328_SOC_VCCIO2_SUPPLY_NUM   1
+
 #define RK3366_SOC_CON6                        0x418
 #define RK3366_SOC_CON6_FLASH0         BIT(14)
 #define RK3366_SOC_FLASH_SUPPLY_NUM    2
@@ -170,6 +174,25 @@ static void rk3288_iodomain_init(struct rockchip_iodomain *iod)
                dev_warn(iod->dev, "couldn't update flash0 ctrl\n");
 }
 
+static void rk3328_iodomain_init(struct rockchip_iodomain *iod)
+{
+       int ret;
+       u32 val;
+
+       /* if no vccio2 supply we should leave things alone */
+       if (!iod->supplies[RK3328_SOC_VCCIO2_SUPPLY_NUM].reg)
+               return;
+
+       /*
+        * set vccio2 iodomain to also use this framework
+        * instead of a special gpio.
+        */
+       val = RK3328_SOC_CON4_VCCIO2 | (RK3328_SOC_CON4_VCCIO2 << 16);
+       ret = regmap_write(iod->grf, RK3328_SOC_CON4, val);
+       if (ret < 0)
+               dev_warn(iod->dev, "couldn't update vccio2 vsel ctrl\n");
+}
+
 static void rk3366_iodomain_init(struct rockchip_iodomain *iod)
 {
        int ret;
@@ -270,6 +293,20 @@ static const struct rockchip_iodomain_soc_data soc_data_rk3288 = {
        .init = rk3288_iodomain_init,
 };
 
+static const struct rockchip_iodomain_soc_data soc_data_rk3328 = {
+       .grf_offset = 0x410,
+       .supply_names = {
+               "vccio1",
+               "vccio2",
+               "vccio3",
+               "vccio4",
+               "vccio5",
+               "vccio6",
+               "pmuio",
+       },
+       .init = rk3328_iodomain_init,
+};
+
 static const struct rockchip_iodomain_soc_data soc_data_rk3366 = {
        .grf_offset = 0x900,
        .supply_names = {
@@ -349,6 +386,10 @@ static const struct of_device_id rockchip_iodomain_match[] = {
                .compatible = "rockchip,rk3288-io-voltage-domain",
                .data = (void *)&soc_data_rk3288
        },
+       {
+               .compatible = "rockchip,rk3328-io-voltage-domain",
+               .data = (void *)&soc_data_rk3328
+       },
        {
                .compatible = "rockchip,rk3366-io-voltage-domain",
                .data = (void *)&soc_data_rk3366