POWER: AVS: rockchp: add rk3366 io domain supprot
[firefly-linux-kernel-4.4.55.git] / drivers / power / avs / rockchip-io-domain.c
index 80994566a1c8f7594fceb3fd323e90e922ab666b..90941242864512997f1a2013cf01da6530047684 100644 (file)
 #define RK3288_SOC_CON2_FLASH0         BIT(7)
 #define RK3288_SOC_FLASH_SUPPLY_NUM    2
 
+#define RK3366_SOC_CON6                        0x418
+#define RK3366_SOC_CON6_FLASH0         BIT(14)
+#define RK3366_SOC_FLASH_SUPPLY_NUM    2
+
 #define RK3368_SOC_CON15               0x43c
 #define RK3368_SOC_CON15_FLASH0                BIT(14)
 #define RK3368_SOC_FLASH_SUPPLY_NUM    2
@@ -162,6 +166,25 @@ static void rk3288_iodomain_init(struct rockchip_iodomain *iod)
                dev_warn(iod->dev, "couldn't update flash0 ctrl\n");
 }
 
+static void rk3366_iodomain_init(struct rockchip_iodomain *iod)
+{
+       int ret;
+       u32 val;
+
+       /* if no flash supply we should leave things alone */
+       if (!iod->supplies[RK3366_SOC_FLASH_SUPPLY_NUM].reg)
+               return;
+
+       /*
+        * set flash0 iodomain to also use this framework
+        * instead of a special gpio.
+        */
+       val = RK3366_SOC_CON6_FLASH0 | (RK3366_SOC_CON6_FLASH0 << 16);
+       ret = regmap_write(iod->grf, RK3368_SOC_CON15, val);
+       if (ret < 0)
+               dev_warn(iod->dev, "couldn't update flash0 ctrl\n");
+}
+
 static void rk3368_iodomain_init(struct rockchip_iodomain *iod)
 {
        int ret;
@@ -224,6 +247,21 @@ static const struct rockchip_iodomain_soc_data soc_data_rk3288 = {
        .init = rk3288_iodomain_init,
 };
 
+static const struct rockchip_iodomain_soc_data soc_data_rk3366 = {
+       .grf_offset = 0x900,
+       .supply_names = {
+               "lcdc",         /* LCDC_IOVDD */
+               "dvpts",        /* DVP_IOVDD */
+               "flash",        /* FLASH_IOVDD (emmc) */
+               "wifibt",       /* APIO1_IOVDD */
+               NULL,
+               "audio",        /* AUDIO_IODVDD */
+               "sdcard",       /* SDMMC_IOVDD (sdmmc) */
+               "tphdsor",      /* APIO2_IOVDD */
+       },
+       .init = rk3366_iodomain_init,
+};
+
 static const struct rockchip_iodomain_soc_data soc_data_rk3368 = {
        .grf_offset = 0x900,
        .supply_names = {
@@ -261,6 +299,10 @@ static const struct of_device_id rockchip_iodomain_match[] = {
                .compatible = "rockchip,rk3288-io-voltage-domain",
                .data = (void *)&soc_data_rk3288
        },
+       {
+               .compatible = "rockchip,rk3366-io-voltage-domain",
+               .data = (void *)&soc_data_rk3366
+       },
        {
                .compatible = "rockchip,rk3368-io-voltage-domain",
                .data = (void *)&soc_data_rk3368