diff options
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/plat-omap/mcbsp.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c index 56a56887dedc..b63a7209b41c 100644 --- a/arch/arm/plat-omap/mcbsp.c +++ b/arch/arm/plat-omap/mcbsp.c | |||
@@ -343,6 +343,15 @@ static inline void omap34xx_mcbsp_free(struct omap_mcbsp *mcbsp) | |||
343 | 343 | ||
344 | syscon = OMAP_MCBSP_READ(mcbsp->io_base, SYSCON); | 344 | syscon = OMAP_MCBSP_READ(mcbsp->io_base, SYSCON); |
345 | syscon &= ~(ENAWAKEUP | SIDLEMODE(0x03) | CLOCKACTIVITY(0x03)); | 345 | syscon &= ~(ENAWAKEUP | SIDLEMODE(0x03) | CLOCKACTIVITY(0x03)); |
346 | /* | ||
347 | * HW bug workaround - If no_idle mode is taken, we need to | ||
348 | * go to smart_idle before going to always_idle, or the | ||
349 | * device will not hit retention anymore. | ||
350 | */ | ||
351 | syscon |= SIDLEMODE(0x02); | ||
352 | OMAP_MCBSP_WRITE(mcbsp->io_base, SYSCON, syscon); | ||
353 | |||
354 | syscon &= ~(SIDLEMODE(0x03)); | ||
346 | OMAP_MCBSP_WRITE(mcbsp->io_base, SYSCON, syscon); | 355 | OMAP_MCBSP_WRITE(mcbsp->io_base, SYSCON, syscon); |
347 | 356 | ||
348 | OMAP_MCBSP_WRITE(mcbsp->io_base, WAKEUPEN, 0); | 357 | OMAP_MCBSP_WRITE(mcbsp->io_base, WAKEUPEN, 0); |