Re: [PATCH/RFC 12/19] OMAP2+: powerdomain: add voltage domain lookup during register

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux