diff options
| -rw-r--r-- | arch/arm/mach-omap2/omap_hwmod.c | 18 | ||||
| -rw-r--r-- | arch/arm/mach-omap2/omap_hwmod.h | 2 | 
2 files changed, 20 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index 4653efb87a2..f37d22c597f 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c @@ -2053,6 +2053,23 @@ static int _omap4_get_context_lost(struct omap_hwmod *oh)  }  /** + * _enable_preprogram - Pre-program an IP block during the _enable() process + * @oh: struct omap_hwmod * + * + * Some IP blocks (such as AESS) require some additional programming + * after enable before they can enter idle.  If a function pointer to + * do so is present in the hwmod data, then call it and pass along the + * return value; otherwise, return 0. + */ +static int __init _enable_preprogram(struct omap_hwmod *oh) +{ +	if (!oh->class->enable_preprogram) +		return 0; + +	return oh->class->enable_preprogram(oh); +} + +/**   * _enable - enable an omap_hwmod   * @oh: struct omap_hwmod *   * @@ -2156,6 +2173,7 @@ static int _enable(struct omap_hwmod *oh)  				_update_sysc_cache(oh);  			_enable_sysc(oh);  		} +		r = _enable_preprogram(oh);  	} else {  		if (soc_ops.disable_module)  			soc_ops.disable_module(oh); diff --git a/arch/arm/mach-omap2/omap_hwmod.h b/arch/arm/mach-omap2/omap_hwmod.h index 3ae852a522f..41066b4b7a7 100644 --- a/arch/arm/mach-omap2/omap_hwmod.h +++ b/arch/arm/mach-omap2/omap_hwmod.h @@ -501,6 +501,7 @@ struct omap_hwmod_omap4_prcm {   * @rev: revision of the IP class   * @pre_shutdown: ptr to fn to be executed immediately prior to device shutdown   * @reset: ptr to fn to be executed in place of the standard hwmod reset fn + * @enable_preprogram:  ptr to fn to be executed during device enable   *   * Represent the class of a OMAP hardware "modules" (e.g. timer,   * smartreflex, gpio, uart...) @@ -524,6 +525,7 @@ struct omap_hwmod_class {  	u32					rev;  	int					(*pre_shutdown)(struct omap_hwmod *oh);  	int					(*reset)(struct omap_hwmod *oh); +	int					(*enable_preprogram)(struct omap_hwmod *oh);  };  /**  |