]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ARM / shmobile: Make A3RV be a subdomain of A4LC on SH7372
authorRafael J. Wysocki <rjw@sisk.pl>
Mon, 8 Aug 2011 21:44:19 +0000 (23:44 +0200)
committerRafael J. Wysocki <rjw@sisk.pl>
Mon, 8 Aug 2011 21:44:19 +0000 (23:44 +0200)
Instead of coding the undocumented dependencies between power domains
A3RV and A4LC on SH7372 directly into the low-level power up/down
routines, make A3RV be a subdomain of A4LC, which will cause the
same dependecies to hold.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
arch/arm/mach-shmobile/pm-sh7372.c
arch/arm/mach-shmobile/setup-sh7372.c

index 933fb411be0f2233b05c5f57009b0b4a0b99b670..168ed5890ce82eca9b31d1f1a3bcd4b040601c68 100644 (file)
@@ -91,35 +91,6 @@ static int pd_power_up(struct generic_pm_domain *genpd)
        return ret;
 }
 
-static int pd_power_up_a3rv(struct generic_pm_domain *genpd)
-{
-       int ret = pd_power_up(genpd);
-
-       /* force A4LC on after A3RV has been requested on */
-       pm_genpd_poweron(&sh7372_a4lc.genpd);
-
-       return ret;
-}
-
-static int pd_power_down_a3rv(struct generic_pm_domain *genpd)
-{
-       int ret = pd_power_down(genpd);
-
-       /* try to power down A4LC after A3RV is requested off */
-       genpd_queue_power_off_work(&sh7372_a4lc.genpd);
-
-       return ret;
-}
-
-static int pd_power_down_a4lc(struct generic_pm_domain *genpd)
-{
-       /* only power down A4LC if A3RV is off */
-       if (!(__raw_readl(PSTR) & (1 << sh7372_a3rv.bit_shift)))
-               return pd_power_down(genpd);
-
-       return -EBUSY;
-}
-
 static bool pd_active_wakeup(struct device *dev)
 {
        return true;
@@ -133,17 +104,8 @@ void sh7372_init_pm_domain(struct sh7372_pm_domain *sh7372_pd)
        genpd->stop_device = pm_clk_suspend;
        genpd->start_device = pm_clk_resume;
        genpd->active_wakeup = pd_active_wakeup;
-
-       if (sh7372_pd == &sh7372_a4lc) {
-               genpd->power_off = pd_power_down_a4lc;
-               genpd->power_on = pd_power_up;
-       } else if (sh7372_pd == &sh7372_a3rv) {
-               genpd->power_off = pd_power_down_a3rv;
-               genpd->power_on = pd_power_up_a3rv;
-       } else {
-               genpd->power_off = pd_power_down;
-               genpd->power_on = pd_power_up;
-       }
+       genpd->power_off = pd_power_down;
+       genpd->power_on = pd_power_up;
        genpd->power_on(&sh7372_pd->genpd);
 }
 
index 79f0413d8725cb8af1bbc5e5ba9d91e7f29feca8..a8d6abb70fc3c05b012c3b2e123215292fdc1640 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/sh_dma.h>
 #include <linux/sh_intc.h>
 #include <linux/sh_timer.h>
+#include <linux/pm_domain.h>
 #include <mach/hardware.h>
 #include <mach/sh7372.h>
 #include <asm/mach-types.h>
@@ -848,6 +849,8 @@ void __init sh7372_add_standard_devices(void)
        sh7372_init_pm_domain(&sh7372_a3ri);
        sh7372_init_pm_domain(&sh7372_a3sg);
 
+       pm_genpd_add_subdomain(&sh7372_a4lc.genpd, &sh7372_a3sg.genpd);
+
        platform_add_devices(sh7372_early_devices,
                            ARRAY_SIZE(sh7372_early_devices));