]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
OMAP: McBSP: Always maintain McBSP fclk while active
authorEero Nurkkala <ext-eero.nurkkala@nokia.com>
Wed, 18 Mar 2009 11:31:02 +0000 (11:31 +0000)
committerTony Lindgren <tony@atomide.com>
Thu, 26 Mar 2009 22:47:05 +0000 (15:47 -0700)
McBSP fclk must be maintained for the duration of
audio playback or recording. Otherwise the fclk
may get autogated when the PER96M clk is no longer
required by other modules. This results in audio
activity being hang. Also, if the McBSP is run
as a slave, it is possible that words are
randomly missed from the playback. Fix all this
phenomenom by enabling the McBSP fclk
clockactivity bit for the entire active duration
of the McBSP usage.

Signed-off-by: Eero Nurkkala <ext-eero.nurkkala@nokia.com>
Acked-by: Jarkko Nikula <jarkko.nikula@nokia.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
arch/arm/plat-omap/include/mach/mcbsp.h
arch/arm/plat-omap/mcbsp.c

index 26bde0519c55bf149f3bec556788b2d3f360fbde..ec61b89cf1fdea24909916443ea8de3e334de3e3 100644 (file)
 #define RDISABLE               0x0001
 
 /********************** McBSP SYSCONFIG bit definitions ********************/
+#define CLOCKACTIVITY(value)   ((value)<<8)
 #define SIDLEMODE(value)       ((value)<<3)
 #define ENAWAKEUP              0x0004
 #define SOFTRST                        0x0002
index a94d03edea0255e8509a1c2cc8f52a8364168b4b..02b3f2de00e5ac08cbcf0409986dfc86ece3f4dc 100644 (file)
@@ -248,8 +248,8 @@ int omap_mcbsp_request(unsigned int id)
                u16 w;
 
                w = OMAP_MCBSP_READ(mcbsp->io_base, SYSCON);
-               w &= ~(ENAWAKEUP | SIDLEMODE(0x03));
-               w |= (ENAWAKEUP | SIDLEMODE(0x02));
+               w &= ~(ENAWAKEUP | SIDLEMODE(0x03) | CLOCKACTIVITY(0x03));
+               w |= (ENAWAKEUP | SIDLEMODE(0x02) | CLOCKACTIVITY(0x02));
                OMAP_MCBSP_WRITE(mcbsp->io_base, SYSCON, w);
 
                OMAP_MCBSP_WRITE(mcbsp->io_base, WAKEUPEN, WAKEUPEN_ALL);
@@ -308,7 +308,7 @@ void omap_mcbsp_free(unsigned int id)
                u16 w;
 
                w = OMAP_MCBSP_READ(mcbsp->io_base, SYSCON);
-               w &= ~(ENAWAKEUP | SIDLEMODE(0x03));
+               w &= ~(ENAWAKEUP | SIDLEMODE(0x03) | CLOCKACTIVITY(0x03));
                OMAP_MCBSP_WRITE(mcbsp->io_base, SYSCON, w);
 
                w = OMAP_MCBSP_READ(mcbsp->io_base, WAKEUPEN);