POWER: AVS: rockchip: add rk3399 io domain support
authorDavid Wu <david.wu@rock-chips.com>
Tue, 15 Mar 2016 15:28:05 +0000 (23:28 +0800)
committerGerrit Code Review <gerrit@rock-chips.com>
Wed, 16 Mar 2016 12:28:09 +0000 (20:28 +0800)
Change-Id: If4ccc31372f1cdbea84fc27009c1b8f9238ee1e9
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 2d2ea68e760b67879e31af1e94c1af54d53b02eb..32149b7b827e09ad04a1bc39b460525305499138 100644 (file)
@@ -36,6 +36,8 @@ Required properties:
   - "rockchip,rk3366-io-voltage-domain" for rk3366
   - "rockchip,rk3368-io-voltage-domain" for rk3368
   - "rockchip,rk3368-pmu-io-voltage-domain" for rk3368 pmu-domains
+  - "rockchip,rk3399-io-voltage-domain" for rk3399
+  - "rockchip,rk3399-pmu-io-voltage-domain" for rk3399 pmu-domains
 - rockchip,grf: phandle to the syscon managing the "general register files"
 
 
@@ -89,6 +91,15 @@ Possible supplies for rk3368 pmu-domains:
 - pmu-supply:    The supply connected to PMUIO_VDD.
 - vop-supply:    The supply connected to LCDC_VDD.
 
+Possible supplies for rk3399:
+- bt656-supply:  The supply connected to APIO2_VDD.
+- audio-supply:  The supply connected to APIO5_VDD.
+- sdmmc-supply:  The supply connected to SDMMC0_VDD.
+- gpio1830       The supply connected to APIO4_VDD.
+
+Possible supplies for rk3399 pmu-domains:
+- pmu1830-supply:The supply connected to PMUIO2_VDD.
+
 Example:
 
        io-domains {
index 90941242864512997f1a2013cf01da6530047684..f6a212ccbd6d26603ac9f719dc8de2449a4ea873 100644 (file)
 #define RK3368_SOC_CON15_FLASH0                BIT(14)
 #define RK3368_SOC_FLASH_SUPPLY_NUM    2
 
+#define RK3399_PMUGRF_CON0             0x180
+#define RK3399_PMUGRF_CON0_VSEL                BIT(8)
+#define RK3399_PMUGRF_VSEL_SUPPLY_NUM  9
+
 struct rockchip_iodomain;
 
 /**
@@ -204,6 +208,25 @@ static void rk3368_iodomain_init(struct rockchip_iodomain *iod)
                dev_warn(iod->dev, "couldn't update flash0 ctrl\n");
 }
 
+static void rk3399_pmu_iodomain_init(struct rockchip_iodomain *iod)
+{
+       int ret;
+       u32 val;
+
+       /* if no pmu io supply we should leave things alone */
+       if (!iod->supplies[RK3399_PMUGRF_VSEL_SUPPLY_NUM].reg)
+               return;
+
+       /*
+        * set pmu io iodomain to also use this framework
+        * instead of a special gpio.
+        */
+       val = RK3399_PMUGRF_CON0_VSEL | (RK3399_PMUGRF_CON0_VSEL << 16);
+       ret = regmap_write(iod->grf, RK3399_PMUGRF_CON0, val);
+       if (ret < 0)
+               dev_warn(iod->dev, "couldn't update pmu io iodomain ctrl\n");
+}
+
 /*
  * On the rk3188 the io-domains are handled by a shared register with the
  * lower 8 bits being still being continuing drive-strength settings.
@@ -290,6 +313,33 @@ static const struct rockchip_iodomain_soc_data soc_data_rk3368_pmu = {
        },
 };
 
+static const struct rockchip_iodomain_soc_data soc_data_rk3399 = {
+       .grf_offset = 0xe640,
+       .supply_names = {
+               "bt656",                /* APIO2_VDD */
+               "audio",                /* APIO5_VDD */
+               "sdmmc",                /* SDMMC0_VDD */
+               "gpio1830",             /* APIO4_VDD */
+       },
+};
+
+static const struct rockchip_iodomain_soc_data soc_data_rk3399_pmu = {
+       .grf_offset = 0x180,
+       .supply_names = {
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               NULL,
+               "pmu1830",              /* PMUIO2_VDD */
+       },
+       .init = rk3399_pmu_iodomain_init,
+};
+
 static const struct of_device_id rockchip_iodomain_match[] = {
        {
                .compatible = "rockchip,rk3188-io-voltage-domain",
@@ -311,6 +361,14 @@ static const struct of_device_id rockchip_iodomain_match[] = {
                .compatible = "rockchip,rk3368-pmu-io-voltage-domain",
                .data = (void *)&soc_data_rk3368_pmu
        },
+       {
+               .compatible = "rockchip,rk3399-io-voltage-domain",
+               .data = (void *)&soc_data_rk3399
+       },
+       {
+               .compatible = "rockchip,rk3399-pmu-io-voltage-domain",
+               .data = (void *)&soc_data_rk3399_pmu
+       },
        { /* sentinel */ },
 };
 MODULE_DEVICE_TABLE(of, rockchip_iodomain_match);