From: Jean Pihet <j-pihet@xxxxxx> Use the caching API for the previous, current and next power domains states. Signed-off-by: Jean Pihet <j-pihet@xxxxxx> --- arch/arm/mach-omap2/powerdomain.c | 32 ++++++++++++++++++++++++++------ 1 files changed, 26 insertions(+), 6 deletions(-) diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c index 18e1ffc..2058e27 100644 --- a/arch/arm/mach-omap2/powerdomain.c +++ b/arch/arm/mach-omap2/powerdomain.c @@ -854,6 +854,8 @@ int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst) smp_processor_id()); /* Program the pwrdm desired target state */ ret = arch_pwrdm->pwrdm_set_next_pwrst(pwrdm, pwrst); + if (!ret) + pwrdm_cache_write(pwrdm, PWRDM_CACHE_NEXT_PWRST, pwrst); } return ret; @@ -869,13 +871,19 @@ int pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst) */ int pwrdm_read_next_pwrst(struct powerdomain *pwrdm) { - int ret = -EINVAL; + int pwrst, ret = -EINVAL; if (!pwrdm) return -EINVAL; - if (arch_pwrdm && arch_pwrdm->pwrdm_read_next_pwrst) + if (!pwrdm_cache_read(pwrdm, PWRDM_CACHE_NEXT_PWRST, &pwrst)) + return pwrst; + + if (arch_pwrdm && arch_pwrdm->pwrdm_read_next_pwrst) { ret = arch_pwrdm->pwrdm_read_next_pwrst(pwrdm); + if (ret >= 0) + pwrdm_cache_write(pwrdm, PWRDM_CACHE_NEXT_PWRST, ret); + } return ret; } @@ -906,13 +914,19 @@ int pwrdm_read_next_func_pwrst(struct powerdomain *pwrdm) */ int pwrdm_read_pwrst(struct powerdomain *pwrdm) { - int ret = -EINVAL; + int pwrst, ret = -EINVAL; if (!pwrdm) return -EINVAL; - if (arch_pwrdm && arch_pwrdm->pwrdm_read_pwrst) + if (!pwrdm_cache_read(pwrdm, PWRDM_CACHE_PWRST, &pwrst)) + return pwrst; + + if (arch_pwrdm && arch_pwrdm->pwrdm_read_pwrst) { ret = arch_pwrdm->pwrdm_read_pwrst(pwrdm); + if (ret >= 0) + pwrdm_cache_write(pwrdm, PWRDM_CACHE_PWRST, ret); + } return ret; } @@ -943,13 +957,19 @@ int pwrdm_read_func_pwrst(struct powerdomain *pwrdm) */ int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm) { - int ret = -EINVAL; + int pwrst, ret = -EINVAL; if (!pwrdm) return -EINVAL; - if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_pwrst) + if (!pwrdm_cache_read(pwrdm, PWRDM_CACHE_PREV_PWRST, &pwrst)) + return pwrst; + + if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_pwrst) { ret = arch_pwrdm->pwrdm_read_prev_pwrst(pwrdm); + if (ret >= 0) + pwrdm_cache_write(pwrdm, PWRDM_CACHE_PREV_PWRST, ret); + } return ret; } -- 1.7.7.6 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html