diff mbox

[1/2] OMAP: McBSP: Always maintain McBSP fclk while active

Message ID 12365823142066-git-send-email-ext-eero.nurkkala@nokia.com (mailing list archive)
State Superseded, archived
Delegated to: Tony Lindgren
Headers show

Commit Message

ext-eero.nurkkala@nokia.com March 9, 2009, 7:05 a.m. UTC
From: Eero Nurkkala <ext-eero.nurkkala@nokia.com>

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
playback being hang. Fix this phenomenom by 
enabling the McBSP fclk clockactivity bit for
the entire active duration of McBSP usage

Signed-off-by: Eero Nurkkala <ext-eero.nurkkala@nokia.com>
---
 arch/arm/plat-omap/include/mach/mcbsp.h |    1 +
 arch/arm/plat-omap/mcbsp.c              |    6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)

Comments

Jarkko Nikula March 10, 2009, 2:29 p.m. UTC | #1
On Mon, 9 Mar 2009 08:05:11 +0100
"Nurkkala Eero.An (EXT-Offcode/Oulu)" <ext-Eero.Nurkkala@nokia.com>
wrote:

> From: Eero Nurkkala <ext-eero.nurkkala@nokia.com>
> 
> 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
> playback being hang. Fix this phenomenom by 
> enabling the McBSP fclk clockactivity bit for
> the entire active duration of McBSP usage
> 
...
>  		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
> (0x01)); OMAP_MCBSP_WRITE(mcbsp->io_base, SYSCON, w);
>  
Looks like a valid change eventhough haven't tested the actual problem.
Would it be possible with the PM branch and Beagle now?


Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
ext-eero.nurkkala@nokia.com March 11, 2009, 5:48 a.m. UTC | #2
On Tue, 2009-03-10 at 15:29 +0100, Nikula Jarkko (Nokia-D/Helsinki) wrote:
> Looks like a valid change eventhough haven't tested the actual problem.
> Would it be possible with the PM branch and Beagle now?
> 
> 
> Jarkko


Now this appears to be inherently wrong =)

Read this:

http://marc.info/?l=linux-omap&m=123674373120880&w=2

(Of course I went in to mention "I am 100% certain the McBSP FCLK is the
 bit 8" =)

- Eero

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jarkko Nikula March 11, 2009, 11:12 a.m. UTC | #3
On Wed, 11 Mar 2009 06:48:10 +0100
"Nurkkala Eero.An (EXT-Offcode/Oulu)" <ext-Eero.Nurkkala@nokia.com>
wrote:

> On Tue, 2009-03-10 at 15:29 +0100, Nikula Jarkko (Nokia-D/Helsinki)
> wrote:
> > Looks like a valid change eventhough haven't tested the actual
> > problem. Would it be possible with the PM branch and Beagle now?
> > 
> > 
> > Jarkko
> 
> 
> Now this appears to be inherently wrong =)
> 
> Read this:
> 
> http://marc.info/?l=linux-omap&m=123674373120880&w=2
> 
> (Of course I went in to mention "I am 100% certain the McBSP FCLK is
> the bit 8" =)
> 
Ah, ok. I was also reviewing your patch with even some older TRM (but
this was going to be updated anyway only into next TRM) :-)


Jarkko
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/arch/arm/plat-omap/include/mach/mcbsp.h b/arch/arm/plat-omap/include/mach/mcbsp.h
index 26bde05..ec61b89 100644
--- a/arch/arm/plat-omap/include/mach/mcbsp.h
+++ b/arch/arm/plat-omap/include/mach/mcbsp.h
@@ -252,6 +252,7 @@ 
 #define RDISABLE		0x0001
 
 /********************** McBSP SYSCONFIG bit definitions ********************/
+#define CLOCKACTIVITY(value)	((value)<<8)
 #define SIDLEMODE(value)	((value)<<3)
 #define ENAWAKEUP		0x0004
 #define SOFTRST			0x0002
diff --git a/arch/arm/plat-omap/mcbsp.c b/arch/arm/plat-omap/mcbsp.c
index a94d03e..59850c2 100644
--- a/arch/arm/plat-omap/mcbsp.c
+++ b/arch/arm/plat-omap/mcbsp.c
@@ -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(0x01));
 		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);