Commit a23456e9 authored by Peter 'p2' De Schrijver's avatar Peter 'p2' De Schrijver Committed by Kevin Hilman

OMAP: PM: Add closures to clkdm_for_each and pwrdm_for_each.

Add some infrastructure to easily iterate over clock and power
domains.
Signed-off-by: default avatarPeter 'p2' De Schrijver <peter.de-schrijver@nokia.com>
Signed-off-by: default avatarKevin Hilman <khilman@deeprootsystems.com>
parent fe617af7
...@@ -299,7 +299,8 @@ struct clockdomain *clkdm_lookup(const char *name) ...@@ -299,7 +299,8 @@ struct clockdomain *clkdm_lookup(const char *name)
* anything else to indicate failure; or -EINVAL if the function pointer * anything else to indicate failure; or -EINVAL if the function pointer
* is null. * 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; struct clockdomain *clkdm;
int ret = 0; int ret = 0;
...@@ -309,7 +310,7 @@ int clkdm_for_each(int (*fn)(struct clockdomain *clkdm)) ...@@ -309,7 +310,7 @@ int clkdm_for_each(int (*fn)(struct clockdomain *clkdm))
mutex_lock(&clkdm_mutex); mutex_lock(&clkdm_mutex);
list_for_each_entry(clkdm, &clkdm_list, node) { list_for_each_entry(clkdm, &clkdm_list, node) {
ret = (*fn)(clkdm); ret = (*fn)(clkdm, user);
if (ret) if (ret)
break; break;
} }
......
...@@ -333,7 +333,7 @@ static struct platform_suspend_ops omap_pm_ops = { ...@@ -333,7 +333,7 @@ static struct platform_suspend_ops omap_pm_ops = {
.valid = suspend_valid_only_mem, .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); omap2_clkdm_allow_idle(clkdm);
return 0; return 0;
...@@ -385,7 +385,7 @@ static void __init prcm_setup_regs(void) ...@@ -385,7 +385,7 @@ static void __init prcm_setup_regs(void)
omap2_clkdm_sleep(gfx_clkdm); omap2_clkdm_sleep(gfx_clkdm);
/* Enable clockdomain hardware-supervised control for all clkdms */ /* 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 */ /* Enable clock autoidle for all domains */
cm_write_mod_reg(OMAP24XX_AUTO_CAM | cm_write_mod_reg(OMAP24XX_AUTO_CAM |
......
...@@ -664,7 +664,7 @@ static void __init prcm_setup_regs(void) ...@@ -664,7 +664,7 @@ static void __init prcm_setup_regs(void)
omap3_d2d_idle(); 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; struct power_state *pwrst;
...@@ -689,7 +689,7 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm) ...@@ -689,7 +689,7 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm)
* supported. Initiate sleep transition for other clockdomains, if * supported. Initiate sleep transition for other clockdomains, if
* they are not used * 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) if (clkdm->flags & CLKDM_CAN_ENABLE_AUTO)
omap2_clkdm_allow_idle(clkdm); omap2_clkdm_allow_idle(clkdm);
...@@ -722,13 +722,13 @@ static int __init omap3_pm_init(void) ...@@ -722,13 +722,13 @@ static int __init omap3_pm_init(void)
goto err1; goto err1;
} }
ret = pwrdm_for_each(pwrdms_setup); ret = pwrdm_for_each(pwrdms_setup, NULL);
if (ret) { if (ret) {
printk(KERN_ERR "Failed to setup powerdomains\n"); printk(KERN_ERR "Failed to setup powerdomains\n");
goto err2; goto err2;
} }
(void) clkdm_for_each(clkdms_setup); (void) clkdm_for_each(clkdms_setup, NULL);
mpu_pwrdm = pwrdm_lookup("mpu_pwrdm"); mpu_pwrdm = pwrdm_lookup("mpu_pwrdm");
if (mpu_pwrdm == NULL) { if (mpu_pwrdm == NULL) {
......
...@@ -95,7 +95,8 @@ int clkdm_register(struct clockdomain *clkdm); ...@@ -95,7 +95,8 @@ int clkdm_register(struct clockdomain *clkdm);
int clkdm_unregister(struct clockdomain *clkdm); int clkdm_unregister(struct clockdomain *clkdm);
struct clockdomain *clkdm_lookup(const char *name); 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); struct powerdomain *clkdm_get_pwrdm(struct clockdomain *clkdm);
void omap2_clkdm_allow_idle(struct clockdomain *clkdm); void omap2_clkdm_allow_idle(struct clockdomain *clkdm);
......
...@@ -128,7 +128,8 @@ int pwrdm_register(struct powerdomain *pwrdm); ...@@ -128,7 +128,8 @@ int pwrdm_register(struct powerdomain *pwrdm);
int pwrdm_unregister(struct powerdomain *pwrdm); int pwrdm_unregister(struct powerdomain *pwrdm);
struct powerdomain *pwrdm_lookup(const char *name); 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_add_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm);
int pwrdm_del_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm); int pwrdm_del_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment