diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-28 23:00:40 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-28 23:00:40 -0500 |
commit | 7307c00f335a4e986586b12334696098d2fc2bcd (patch) | |
tree | 3427b10ffc57570cf6153056f6ae1dac200cb3b3 /arch/arm/mach-omap2/omap_hwmod.c | |
parent | f8f466c81795a3ed2b8a74c8feebc280aec3db81 (diff) | |
parent | 55ccb1a8b4c14c086427fd6b7272448fbd0c4449 (diff) |
Merge tag 'late-omap' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
Pull ARM SoC late OMAP changes from Olof Johansson:
"This branch contains changes for OMAP that came in late during the
release staging, close to when the merge window opened.
It contains, among other things:
- OMAP PM fixes and some patches for audio device integration
- OMAP clock fixes related to common clock conversion
- A set of patches cleaning up WFI entry and blocking.
- A set of fixes and IP block support for PM on TI AM33xx SoCs
(Beaglebone, etc)
- A set of smaller fixes and cleanups around AM33xx restart and
revision detection, as well as removal of some dead code
(CONFIG_32K_TIMER_HZ)"
* tag 'late-omap' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc: (34 commits)
ARM: omap2: include linux/errno.h in hwmod_reset
ARM: OMAP2+: fix some omap_device_build() calls that aren't compiled by default
ARM: OMAP4: hwmod data: Enable AESS hwmod device
ARM: OMAP4: hwmod data: Update AESS data with memory bank area
ARM: OMAP4+: AESS: enable internal auto-gating during initial setup
ASoC: TI AESS: add autogating-enable function, callable from architecture code
ARM: OMAP2+: hwmod: add enable_preprogram hook
ARM: OMAP4: clock data: Add missing clkdm association for dpll_usb
ARM: OMAP2+: PM: Fix the dt return condition in pm_late_init()
ARM: OMAP2: am33xx-hwmod: Fix "register offset NULL check" bug
ARM: OMAP2+: AM33xx: hwmod: add missing HWMOD_NO_IDLEST flags
ARM: OMAP: AM33xx hwmod: Add parent-child relationship for PWM subsystem
ARM: OMAP: AM33xx hwmod: Corrects PWM subsystem HWMOD entries
ARM: DTS: AM33XX: Add nodes for OCMC RAM and WKUP-M3
ARM: OMAP2+: AM33XX: Update the hardreset API
ARM: OMAP2+: AM33XX: hwmod: Update the WKUP-M3 hwmod with reset status bit
ARM: OMAP2+: AM33XX: hwmod: Fixup cpgmac0 hwmod entry
ARM: OMAP2+: AM33XX: hwmod: Update TPTC0 hwmod with the right flags
ARM: OMAP2+: AM33XX: hwmod: Register OCMC RAM hwmod
ARM: OMAP2+: AM33XX: CM/PRM: Use __ASSEMBLER__ macros in header files
...
Diffstat (limited to 'arch/arm/mach-omap2/omap_hwmod.c')
-rw-r--r-- | arch/arm/mach-omap2/omap_hwmod.c | 23 |
1 files changed, 19 insertions, 4 deletions
diff --git a/arch/arm/mach-omap2/omap_hwmod.c b/arch/arm/mach-omap2/omap_hwmod.c index a8984989dec8..c2c798c08c2b 100644 --- a/arch/arm/mach-omap2/omap_hwmod.c +++ b/arch/arm/mach-omap2/omap_hwmod.c | |||
@@ -2055,6 +2055,23 @@ static int _omap4_get_context_lost(struct omap_hwmod *oh) | |||
2055 | } | 2055 | } |
2056 | 2056 | ||
2057 | /** | 2057 | /** |
2058 | * _enable_preprogram - Pre-program an IP block during the _enable() process | ||
2059 | * @oh: struct omap_hwmod * | ||
2060 | * | ||
2061 | * Some IP blocks (such as AESS) require some additional programming | ||
2062 | * after enable before they can enter idle. If a function pointer to | ||
2063 | * do so is present in the hwmod data, then call it and pass along the | ||
2064 | * return value; otherwise, return 0. | ||
2065 | */ | ||
2066 | static int __init _enable_preprogram(struct omap_hwmod *oh) | ||
2067 | { | ||
2068 | if (!oh->class->enable_preprogram) | ||
2069 | return 0; | ||
2070 | |||
2071 | return oh->class->enable_preprogram(oh); | ||
2072 | } | ||
2073 | |||
2074 | /** | ||
2058 | * _enable - enable an omap_hwmod | 2075 | * _enable - enable an omap_hwmod |
2059 | * @oh: struct omap_hwmod * | 2076 | * @oh: struct omap_hwmod * |
2060 | * | 2077 | * |
@@ -2160,6 +2177,7 @@ static int _enable(struct omap_hwmod *oh) | |||
2160 | _update_sysc_cache(oh); | 2177 | _update_sysc_cache(oh); |
2161 | _enable_sysc(oh); | 2178 | _enable_sysc(oh); |
2162 | } | 2179 | } |
2180 | r = _enable_preprogram(oh); | ||
2163 | } else { | 2181 | } else { |
2164 | if (soc_ops.disable_module) | 2182 | if (soc_ops.disable_module) |
2165 | soc_ops.disable_module(oh); | 2183 | soc_ops.disable_module(oh); |
@@ -3049,11 +3067,8 @@ static int _am33xx_assert_hardreset(struct omap_hwmod *oh, | |||
3049 | static int _am33xx_deassert_hardreset(struct omap_hwmod *oh, | 3067 | static int _am33xx_deassert_hardreset(struct omap_hwmod *oh, |
3050 | struct omap_hwmod_rst_info *ohri) | 3068 | struct omap_hwmod_rst_info *ohri) |
3051 | { | 3069 | { |
3052 | if (ohri->st_shift) | ||
3053 | pr_err("omap_hwmod: %s: %s: hwmod data error: OMAP4 does not support st_shift\n", | ||
3054 | oh->name, ohri->name); | ||
3055 | |||
3056 | return am33xx_prm_deassert_hardreset(ohri->rst_shift, | 3070 | return am33xx_prm_deassert_hardreset(ohri->rst_shift, |
3071 | ohri->st_shift, | ||
3057 | oh->clkdm->pwrdm.ptr->prcm_offs, | 3072 | oh->clkdm->pwrdm.ptr->prcm_offs, |
3058 | oh->prcm.omap4.rstctrl_offs, | 3073 | oh->prcm.omap4.rstctrl_offs, |
3059 | oh->prcm.omap4.rstst_offs); | 3074 | oh->prcm.omap4.rstst_offs); |