]> git.karo-electronics.de Git - linux-beck.git/commitdiff
OMAP: PM: Add closures to clkdm_for_each and pwrdm_for_each.
authorPeter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
Wed, 15 Oct 2008 15:13:47 +0000 (18:13 +0300)
committerKevin Hilman <khilman@deeprootsystems.com>
Wed, 2 Sep 2009 22:08:23 +0000 (15:08 -0700)
Add some infrastructure to easily iterate over clock and power
domains.

Signed-off-by: Peter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
arch/arm/mach-omap2/clockdomain.c
arch/arm/mach-omap2/pm24xx.c
arch/arm/mach-omap2/pm34xx.c
arch/arm/plat-omap/include/mach/clockdomain.h
arch/arm/plat-omap/include/mach/powerdomain.h

index 5b0b90b76e13a6ebd138936ba856c5cc0f3c7d05..4ef7b4f5474e581e12983c2e827d13229ceb2683 100644 (file)
@@ -299,7 +299,8 @@ struct clockdomain *clkdm_lookup(const char *name)
  * anything else to indicate failure; or -EINVAL if the function pointer
  * is null.
  */
-int clkdm_for_each(int (*fn)(struct clockdomain *clkdm))
+int clkdm_for_each(int (*fn)(struct clockdomain *clkdm, void *user),
+                       void *user)
 {
        struct clockdomain *clkdm;
        int ret = 0;
@@ -309,7 +310,7 @@ int clkdm_for_each(int (*fn)(struct clockdomain *clkdm))
 
        mutex_lock(&clkdm_mutex);
        list_for_each_entry(clkdm, &clkdm_list, node) {
-               ret = (*fn)(clkdm);
+               ret = (*fn)(clkdm, user);
                if (ret)
                        break;
        }
index 528dbdc26e2363536335c88446b8c17ebbef234b..bff5c4e89742f59c8de35550db88acdce44785ab 100644 (file)
@@ -333,7 +333,7 @@ static struct platform_suspend_ops omap_pm_ops = {
        .valid          = suspend_valid_only_mem,
 };
 
-static int _pm_clkdm_enable_hwsup(struct clockdomain *clkdm)
+static int _pm_clkdm_enable_hwsup(struct clockdomain *clkdm, void *unused)
 {
        omap2_clkdm_allow_idle(clkdm);
        return 0;
@@ -385,7 +385,7 @@ static void __init prcm_setup_regs(void)
        omap2_clkdm_sleep(gfx_clkdm);
 
        /* Enable clockdomain hardware-supervised control for all clkdms */
-       clkdm_for_each(_pm_clkdm_enable_hwsup);
+       clkdm_for_each(_pm_clkdm_enable_hwsup, NULL);
 
        /* Enable clock autoidle for all domains */
        cm_write_mod_reg(OMAP24XX_AUTO_CAM |
index f1976242f9974cb21715931523fa3d557d029896..331dfca93ed5a71d2bc56564bbbf1bb72182da5d 100644 (file)
@@ -664,7 +664,7 @@ static void __init prcm_setup_regs(void)
        omap3_d2d_idle();
 }
 
-static int __init pwrdms_setup(struct powerdomain *pwrdm)
+static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
 {
        struct power_state *pwrst;
 
@@ -689,7 +689,7 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm)
  * supported. Initiate sleep transition for other clockdomains, if
  * they are not used
  */
-static int __init clkdms_setup(struct clockdomain *clkdm)
+static int __init clkdms_setup(struct clockdomain *clkdm, void *unused)
 {
        if (clkdm->flags & CLKDM_CAN_ENABLE_AUTO)
                omap2_clkdm_allow_idle(clkdm);
@@ -722,13 +722,13 @@ static int __init omap3_pm_init(void)
                goto err1;
        }
 
-       ret = pwrdm_for_each(pwrdms_setup);
+       ret = pwrdm_for_each(pwrdms_setup, NULL);
        if (ret) {
                printk(KERN_ERR "Failed to setup powerdomains\n");
                goto err2;
        }
 
-       (void) clkdm_for_each(clkdms_setup);
+       (void) clkdm_for_each(clkdms_setup, NULL);
 
        mpu_pwrdm = pwrdm_lookup("mpu_pwrdm");
        if (mpu_pwrdm == NULL) {
index b9d0dd2da89b4f4f47378e31157e895639e30d29..99ebd886f134ca4c76a0d7a95dce7a508795de12 100644 (file)
@@ -95,7 +95,8 @@ int clkdm_register(struct clockdomain *clkdm);
 int clkdm_unregister(struct clockdomain *clkdm);
 struct clockdomain *clkdm_lookup(const char *name);
 
-int clkdm_for_each(int (*fn)(struct clockdomain *clkdm));
+int clkdm_for_each(int (*fn)(struct clockdomain *clkdm, void *user),
+                       void *user);
 struct powerdomain *clkdm_get_pwrdm(struct clockdomain *clkdm);
 
 void omap2_clkdm_allow_idle(struct clockdomain *clkdm);
index 52663fc549d2d92224a69ee58e9b563fd9436026..de03f3dbbf3dfef83caa8033c949131f88792a94 100644 (file)
@@ -128,7 +128,8 @@ int pwrdm_register(struct powerdomain *pwrdm);
 int pwrdm_unregister(struct powerdomain *pwrdm);
 struct powerdomain *pwrdm_lookup(const char *name);
 
-int pwrdm_for_each(int (*fn)(struct powerdomain *pwrdm));
+int pwrdm_for_each(int (*fn)(struct powerdomain *pwrdm, void *user),
+                       void *user);
 
 int pwrdm_add_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm);
 int pwrdm_del_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm);