[PATCH 5/8] OMAP2+: hwmod: allow multiple calls to omap_hwmod_init()

Cousson, Benoit b-cousson at ti.com
Wed Feb 23 09:46:12 EST 2011


On 2/23/2011 8:11 AM, Paul Walmsley wrote:
> There's no longer any reason why we should prevent multiple
> calls to omap_hwmod_init().  It is now simply used to register an
> array of hwmods.
>
> This should allow a subset of hwmods (e.g., hwmods
> handling the system clocksource and clockevents) to be registered
> earlier than the remaining mass of hwmods.

Cool... that one was needed anyway.
It will allow potentially to split the original omapxxx_hwmod list in 
severals parts and thus handle the features or the infrastructure hwmods 
we need to init early od based on the chip capabilities.

I was considering that during the discussion with Sanjeev 
(http://www.spinics.net/lists/linux-omap/msg46716.html).

Benoit

>
> Signed-off-by: Paul Walmsley<paul at pwsan.com>
> Cc: Benoît Cousson<b-cousson at ti.com>
> Cc: Kevin Hilman<khilman at ti.com>
> ---
>   arch/arm/mach-omap2/omap_hwmod.c |   29 ++++++++++-------------------
>   1 files changed, 10 insertions(+), 19 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c
> index 41f548e..86eacaf 100644
> --- a/arch/arm/mach-omap2/omap_hwmod.c
> +++ b/arch/arm/mach-omap2/omap_hwmod.c
> @@ -162,9 +162,6 @@ static LIST_HEAD(omap_hwmod_list);
>   /* mpu_oh: used to add/remove MPU initiator from sleepdep list */
>   static struct omap_hwmod *mpu_oh;
>
> -/* inited: 0 if omap_hwmod_init() has not yet been called; 1 otherwise */
> -static u8 inited;
> -
>
>   /* Private functions */
>
> @@ -1600,26 +1597,20 @@ int omap_hwmod_for_each(int (*fn)(struct omap_hwmod *oh, void *data),
>    */
>   int __init omap_hwmod_init(struct omap_hwmod **ohs)
>   {
> -	struct omap_hwmod *oh;
> -	int r;
> -
> -	if (inited)
> -		return -EINVAL;
> -
> -	inited = 1;
> +	int r, i;
>
>   	if (!ohs)
>   		return 0;
>
> -	oh = *ohs;
> -	while (oh) {
> -		if (omap_chip_is(oh->omap_chip)) {
> -			r = _register(oh);
> -			WARN(r, "omap_hwmod: %s: _register returned "
> -			     "%d\n", oh->name, r);
> -		}
> -		oh = *++ohs;
> -	}
> +	i = 0;
> +	do {
> +		if (!omap_chip_is(ohs[i]->omap_chip))
> +			continue;
> +
> +		r = _register(ohs[i]);
> +		WARN(r, "omap_hwmod: %s: _register returned %d\n", ohs[i]->name,
> +		     r);
> +	} while (ohs[++i]);
>
>   	return 0;
>   }
>
>




More information about the linux-arm-kernel mailing list