This starts to implement the power domains that are just skeleton
implementations right now.

Signed-off-by: Linus Walleij <[email protected]>
---
 drivers/pmdomain/st/ste-ux500-pm-domain.c | 125 +++++++++++++++++++++++++++++-
 1 file changed, 124 insertions(+), 1 deletion(-)

diff --git a/drivers/pmdomain/st/ste-ux500-pm-domain.c 
b/drivers/pmdomain/st/ste-ux500-pm-domain.c
index 6896cb4a7b71..723001004690 100644
--- a/drivers/pmdomain/st/ste-ux500-pm-domain.c
+++ b/drivers/pmdomain/st/ste-ux500-pm-domain.c
@@ -41,14 +41,137 @@ static int pd_power_on(struct generic_pm_domain *domain)
        return 0;
 }
 
+/*
+ * Apart from these voltage domains there is also VSAFE which is always
+ * on. Vape_esram0_pwr for eSRAM0 is connected to VSAFE.
+ */
 static struct generic_pm_domain ux500_pm_domain_vape = {
-       .name = "VAPE",
+       /* Vape_pwr */
+       .name = "VAPE",  /* 0.95 .. 1.20 V */
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_varm = {
+       .name = "VARM",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vmodem = {
+       .name = "VMODEM",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vpll = {
+       .name = "VPLL", /* 1.8 V */
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+/*
+ * CHECKME: as these are used directly by peripherals as regulators,
+ * perhaps they should stay in the regulator subsystem?
+ */
+static struct generic_pm_domain ux500_pm_domain_vsmps1 = {
+       .name = "VSMPS1", /* Also called VIO (1.2V) */
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vsmps2 = {
+       .name = "VSMPS2", /* Also called VIO (1.8V) */
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vsmps3 = {
+       .name = "VSMPS3",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_vrf1 = {
+       .name = "VRF1",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+/* The following are technically children of VAPE */
+static struct generic_pm_domain ux500_pm_domain_sva_mmdsp = {
+       /* Vape_SVA_MMDSP_pwr */
+       .name = "SVA_MMDSP",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_sva_pipe = {
+       /* Vape_SVA_pwr */
+       .name = "SVA_PIPE",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_sia_mmdsp = {
+       /* Vape_SIA_MMDSP_pwr */
+       .name = "SIA_MMDSP",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_sia_pipe = {
+       /* Vape_SIA_pwr */
+       .name = "SIA_PIPE",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_sga = {
+       /* Vape_SGA_pwr */
+       .name = "SGA",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_b2r2_mcde = {
+       /* Vape_DSS_pwr DSS (display subsystem) */
+       .name = "B2R2_MCDE",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_esram_12 = {
+       /* Vape_esram0_pwr, Vape_esram1_pwr */
+       .name = "ESRAM_12",
+       .power_off = pd_power_off,
+       .power_on = pd_power_on,
+};
+
+static struct generic_pm_domain ux500_pm_domain_esram_34 = {
+       /* Vape_esram3_pwr, Vape_esram4_pwr */
+       .name = "ESRAM_34",
        .power_off = pd_power_off,
        .power_on = pd_power_on,
 };
 
 static struct generic_pm_domain *ux500_pm_domains[NR_DOMAINS] = {
        [DOMAIN_VAPE] = &ux500_pm_domain_vape,
+       [DOMAIN_VARM] = &ux500_pm_domain_varm,
+       [DOMAIN_VMODEM] = &ux500_pm_domain_vmodem,
+       [DOMAIN_VPLL] = &ux500_pm_domain_vpll,
+       [DOMAIN_VSMPS1] = &ux500_pm_domain_vsmps1,
+       [DOMAIN_VSMPS2] = &ux500_pm_domain_vsmps2,
+       [DOMAIN_VSMPS3] = &ux500_pm_domain_vsmps3,
+       [DOMAIN_VRF1] = &ux500_pm_domain_vrf1,
+       [DOMAIN_SVA_MMDSP] = &ux500_pm_domain_sva_mmdsp,
+       [DOMAIN_SVA_PIPE] = &ux500_pm_domain_sva_pipe,
+       [DOMAIN_SIA_MMDSP] = &ux500_pm_domain_sia_mmdsp,
+       [DOMAIN_SIA_PIPE] = &ux500_pm_domain_sia_pipe,
+       [DOMAIN_SGA] = &ux500_pm_domain_sga,
+       [DOMAIN_B2R2_MCDE] = &ux500_pm_domain_b2r2_mcde,
+       [DOMAIN_ESRAM_12] = &ux500_pm_domain_esram_12,
+       [DOMAIN_ESRAM_34] = &ux500_pm_domain_esram_34,
 };
 
 static const struct of_device_id ux500_pm_domain_matches[] = {

-- 
2.54.0

Reply via email to