Some comments: On Tue, 16 Nov 2010, Rajendra Nayak wrote: > Define the following architecture specific funtions for omap2/3/4 > .pwrdm_set_logic_retst > .pwrdm_read_logic_pwrst > .pwrdm_read_prev_logic_pwrst > .pwrdm_read_logic_retst > > Convert the platform-independent framework to call these functions. > > Signed-off-by: Rajendra Nayak <rnayak@xxxxxx> > Cc: Paul Walmsley <paul@xxxxxxxxx> > Cc: Benoit Cousson <b-cousson@xxxxxx> > Cc: Kevin Hilman <khilman@xxxxxxxxxxxxxxxxxxx> > --- > arch/arm/mach-omap2/powerdomains2xxx.c | 34 +++++++++++++++++++++ > arch/arm/mach-omap2/powerdomains44xx.c | 26 ++++++++++++++++ > arch/arm/plat-omap/powerdomain.c | 51 ++++++++++++++------------------ > 3 files changed, 82 insertions(+), 29 deletions(-) > > diff --git a/arch/arm/mach-omap2/powerdomains2xxx.c b/arch/arm/mach-omap2/powerdomains2xxx.c > index dfeb8af..779529d 100644 > --- a/arch/arm/mach-omap2/powerdomains2xxx.c > +++ b/arch/arm/mach-omap2/powerdomains2xxx.c > @@ -45,9 +45,43 @@ static int omap2_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm) > OMAP3430_LASTPOWERSTATEENTERED_MASK); > } > > +static int omap2_pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst) > +{ > + u32 v; > + > + v = pwrst << __ffs(OMAP3430_LOGICL1CACHERETSTATE_MASK); > + prm_rmw_mod_reg_bits(OMAP3430_LOGICL1CACHERETSTATE_MASK, v, > + pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL); > + > + return 0; > +} > + > +static int omap2_pwrdm_read_logic_pwrst(struct powerdomain *pwrdm) > +{ > + return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP2_PM_PWSTST, > + OMAP3430_LOGICSTATEST_MASK); > +} Not present on OMAP2xxx, so, does not belong here. > + > + > +static int omap2_pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm) > +{ > + return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST, > + OMAP3430_LASTLOGICSTATEENTERED_MASK); > +} Not present on OMAP2xxx, so, does not belong here. > + > +static int omap2_pwrdm_read_logic_retst(struct powerdomain *pwrdm) > +{ > + return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL, > + OMAP3430_LOGICSTATEST_MASK); > +} Not present on OMAP2xxx, so, does not belong here. > + > struct pwrdm_functions omap2_pwrdm_functions = { > .pwrdm_set_next_pwrst = omap2_pwrdm_set_next_pwrst, > .pwrdm_read_next_pwrst = omap2_pwrdm_read_next_pwrst, > .pwrdm_read_pwrst = omap2_pwrdm_read_pwrst, > .pwrdm_read_prev_pwrst = omap2_pwrdm_read_prev_pwrst, > + .pwrdm_set_logic_retst = omap2_pwrdm_set_logic_retst, > + .pwrdm_read_logic_pwrst = omap2_pwrdm_read_logic_pwrst, > + .pwrdm_read_prev_logic_pwrst = omap2_pwrdm_read_prev_logic_pwrst, > + .pwrdm_read_logic_retst = omap2_pwrdm_read_logic_retst, > }; > diff --git a/arch/arm/mach-omap2/powerdomains44xx.c b/arch/arm/mach-omap2/powerdomains44xx.c > index b3aaf9b..016a425 100644 > --- a/arch/arm/mach-omap2/powerdomains44xx.c > +++ b/arch/arm/mach-omap2/powerdomains44xx.c > @@ -45,9 +45,35 @@ static int omap4_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm) > OMAP4430_LASTPOWERSTATEENTERED_MASK); > } > > +static int omap4_pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst) > +{ > + u32 v; > + > + v = pwrst << __ffs(OMAP4430_LOGICRETSTATE_MASK); > + prm_rmw_mod_reg_bits(OMAP4430_LOGICRETSTATE_MASK, v, > + pwrdm->prcm_offs, OMAP4_PM_PWSTCTRL); > + > + return 0; > +} > + > +static int omap4_pwrdm_read_logic_pwrst(struct powerdomain *pwrdm) > +{ > + return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP4_PM_PWSTST, > + OMAP4430_LOGICSTATEST_MASK); > +} > + > +static int omap4_pwrdm_read_logic_retst(struct powerdomain *pwrdm) > +{ > + return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP4_PM_PWSTCTRL, > + OMAP4430_LOGICRETSTATE_MASK); > +} > + > struct pwrdm_functions omap4_pwrdm_functions = { > .pwrdm_set_next_pwrst = omap4_pwrdm_set_next_pwrst, > .pwrdm_read_next_pwrst = omap4_pwrdm_read_next_pwrst, > .pwrdm_read_pwrst = omap4_pwrdm_read_pwrst, > .pwrdm_read_prev_pwrst = omap4_pwrdm_read_prev_pwrst, > + .pwrdm_set_logic_retst = omap4_pwrdm_set_logic_retst, > + .pwrdm_read_logic_pwrst = omap4_pwrdm_read_logic_pwrst, > + .pwrdm_read_logic_retst = omap4_pwrdm_read_logic_retst, > }; > diff --git a/arch/arm/plat-omap/powerdomain.c b/arch/arm/plat-omap/powerdomain.c > index 73d6dad..9177fbb 100644 > --- a/arch/arm/plat-omap/powerdomain.c > +++ b/arch/arm/plat-omap/powerdomain.c > @@ -531,7 +531,7 @@ int pwrdm_read_prev_pwrst(struct powerdomain *pwrdm) > */ > int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst) > { > - u32 v; > + int ret = -EINVAL; > > if (!pwrdm) > return -EINVAL; > @@ -542,17 +542,10 @@ int pwrdm_set_logic_retst(struct powerdomain *pwrdm, u8 pwrst) > pr_debug("powerdomain: setting next logic powerstate for %s to %0x\n", > pwrdm->name, pwrst); > > - /* > - * The register bit names below may not correspond to the > - * actual names of the bits in each powerdomain's register, > - * but the type of value returned is the same for each > - * powerdomain. > - */ > - v = pwrst << __ffs(OMAP3430_LOGICL1CACHERETSTATE_MASK); > - prm_rmw_mod_reg_bits(OMAP3430_LOGICL1CACHERETSTATE_MASK, v, > - pwrdm->prcm_offs, pwrstctrl_reg_offs); > + if (arch_pwrdm && arch_pwrdm->pwrdm_set_logic_retst) > + ret = arch_pwrdm->pwrdm_set_logic_retst(pwrdm, pwrst); > > - return 0; > + return ret; > } > > /** > @@ -695,11 +688,15 @@ int pwrdm_set_mem_retst(struct powerdomain *pwrdm, u8 bank, u8 pwrst) > */ > int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm) > { > + int ret = -EINVAL; > + > if (!pwrdm) > return -EINVAL; > > - return prm_read_mod_bits_shift(pwrdm->prcm_offs, pwrstst_reg_offs, > - OMAP3430_LOGICSTATEST_MASK); > + if (arch_pwrdm && arch_pwrdm->pwrdm_read_logic_pwrst) > + ret = arch_pwrdm->pwrdm_read_logic_pwrst(pwrdm); > + > + return ret; > } > > /** > @@ -712,17 +709,15 @@ int pwrdm_read_logic_pwrst(struct powerdomain *pwrdm) > */ > int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm) > { > + int ret = -EINVAL; > + > if (!pwrdm) > return -EINVAL; > > - /* > - * The register bit names below may not correspond to the > - * actual names of the bits in each powerdomain's register, > - * but the type of value returned is the same for each > - * powerdomain. > - */ > - return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST, > - OMAP3430_LASTLOGICSTATEENTERED_MASK); > + if (arch_pwrdm && arch_pwrdm->pwrdm_read_prev_logic_pwrst) > + ret = arch_pwrdm->pwrdm_read_prev_logic_pwrst(pwrdm); > + > + return ret; > } > > /** > @@ -735,17 +730,15 @@ int pwrdm_read_prev_logic_pwrst(struct powerdomain *pwrdm) > */ > int pwrdm_read_logic_retst(struct powerdomain *pwrdm) > { > + int ret = -EINVAL; > + > if (!pwrdm) > return -EINVAL; > > - /* > - * The register bit names below may not correspond to the > - * actual names of the bits in each powerdomain's register, > - * but the type of value returned is the same for each > - * powerdomain. > - */ > - return prm_read_mod_bits_shift(pwrdm->prcm_offs, pwrstctrl_reg_offs, > - OMAP3430_LOGICSTATEST_MASK); > + if (arch_pwrdm && arch_pwrdm->pwrdm_read_logic_retst) > + ret = arch_pwrdm->pwrdm_read_logic_retst(pwrdm); > + > + return ret; > } > > /** > -- > 1.7.0.4 > - Paul -- 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