On Thu, Mar 24, 2011 at 1:00 AM, Kevin Hilman <[email protected]> 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 <[email protected]>
> ---
> 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 [email protected]
> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html