On Thu, Mar 24, 2011 at 1:00 AM, Kevin Hilman <khilman@xxxxxx> wrote: > When a powerdomain is registered, lookup the voltage domain by name > and keep a pointer to the containing voltagedomain in the powerdomain > structure. > > Modeled after similar method between powerdomain and clockdomain layers. > > Signed-off-by: Kevin Hilman <khilman@xxxxxx> > --- > arch/arm/mach-omap2/powerdomain.c | 21 +++++++++++++++++++++ > arch/arm/mach-omap2/powerdomain.h | 1 + > arch/arm/mach-omap2/voltage.h | 1 + > 3 files changed, 23 insertions(+), 0 deletions(-) > > diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c > index 49c6513..8fccd4b 100644 > --- a/arch/arm/mach-omap2/powerdomain.c > +++ b/arch/arm/mach-omap2/powerdomain.c > @@ -77,6 +77,7 @@ static struct powerdomain *_pwrdm_lookup(const char *name) > static int _pwrdm_register(struct powerdomain *pwrdm) > { > int i; > + struct voltagedomain *voltdm; > > if (!pwrdm || !pwrdm->name) > return -EINVAL; > @@ -94,6 +95,14 @@ static int _pwrdm_register(struct powerdomain *pwrdm) > if (_pwrdm_lookup(pwrdm->name)) > return -EEXIST; > > + voltdm = voltdm_lookup(pwrdm->voltdm.name); > + if (!voltdm) { > + pr_err("powerdomain: %s: voltagedomain %s does not exist\n", > + pwrdm->name, pwrdm->voltdm.name); > + return -EINVAL; Per patch 10/19 some power domains do not have an associated voltage domain struct filled in. This will result in failure of the power domain registration. I think this is not expected. > + } > + pwrdm->voltdm.ptr = voltdm; > + > list_add(&pwrdm->node, &pwrdm_list); > > /* Initialize the powerdomain's state counter */ > @@ -383,6 +392,18 @@ int pwrdm_for_each_clkdm(struct powerdomain *pwrdm, > } > > /** > + * pwrdm_get_voltdm - return a ptr to the voltdm that this pwrdm resides in > + * @pwrdm: struct powerdomain * > + * > + * Return a pointer to the struct voltageomain that the specified powerdomain > + * @pwrdm exists in. > + */ > +struct voltagedomain *pwrdm_get_voltdm(struct powerdomain *pwrdm) > +{ > + return pwrdm->voltdm.ptr; > +} > + > +/** > * pwrdm_get_mem_bank_count - get number of memory banks in this powerdomain > * @pwrdm: struct powerdomain * > * > diff --git a/arch/arm/mach-omap2/powerdomain.h b/arch/arm/mach-omap2/powerdomain.h > index cc03a0d..3a1ec37 100644 > --- a/arch/arm/mach-omap2/powerdomain.h > +++ b/arch/arm/mach-omap2/powerdomain.h > @@ -183,6 +183,7 @@ int pwrdm_del_clkdm(struct powerdomain *pwrdm, struct clockdomain *clkdm); > int pwrdm_for_each_clkdm(struct powerdomain *pwrdm, > int (*fn)(struct powerdomain *pwrdm, > struct clockdomain *clkdm)); > +struct voltagedomain *pwrdm_get_voltdm(struct powerdomain *pwrdm); > > int pwrdm_get_mem_bank_count(struct powerdomain *pwrdm); > > diff --git a/arch/arm/mach-omap2/voltage.h b/arch/arm/mach-omap2/voltage.h > index cacd76e..966aa88 100644 > --- a/arch/arm/mach-omap2/voltage.h > +++ b/arch/arm/mach-omap2/voltage.h > @@ -186,4 +186,5 @@ extern void omap44xx_voltagedomains_init(void); > > struct voltagedomain *voltdm_lookup(const char *name); > void voltdm_init(struct voltagedomain **voltdm_list); > +int voltdm_add_pwrdm(struct voltagedomain *voltdm, struct powerdomain *pwrdm); > #endif > -- > 1.7.4 > > -- > 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 > -- 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