[alsa-devel] [PATCH 1/4] pxa2xx-i2s: Proper initialization
Reset FIFO logic and registers, and make sure REC and RPL functions and FIFO service are disabled.
Signed-off-by: Karl Beldan karl.beldan@mobile-devices.fr --- sound/soc/pxa/pxa2xx-i2s.c | 12 ++++++++++++ 1 files changed, 12 insertions(+), 0 deletions(-)
diff --git a/sound/soc/pxa/pxa2xx-i2s.c b/sound/soc/pxa/pxa2xx-i2s.c index 2f4b6e4..52862dc 100644 --- a/sound/soc/pxa/pxa2xx-i2s.c +++ b/sound/soc/pxa/pxa2xx-i2s.c @@ -370,6 +370,18 @@ static struct platform_driver pxa2xx_i2s_driver = { static int __init pxa2xx_i2s_init(void) { clk_i2s = ERR_PTR(-ENOENT); + + /* + * PXA Developer's Manual: + * If SACR0[ENB] is toggled in the middle of a normal operation, + * the SACR0[RST] bit must also be set and cleared to reset all + * I2S controller registers. + */ + SACR0 = SACR0_RST; + SACR0 = 0; + SACR1 = SACR1_DRPL | SACR1_DREC; + SAIMR &= ~(SAIMR_RFS | SAIMR_TFS); + return platform_driver_register(&pxa2xx_i2s_driver); }
On Fri, May 08, 2009 at 01:53:39AM +0200, Karl Beldan wrote:
Reset FIFO logic and registers, and make sure REC and RPL functions and FIFO service are disabled.
static int __init pxa2xx_i2s_init(void) { clk_i2s = ERR_PTR(-ENOENT);
- /*
* PXA Developer's Manual:
* If SACR0[ENB] is toggled in the middle of a normal operation,
* the SACR0[RST] bit must also be set and cleared to reset all
* I2S controller registers.
*/
- SACR0 = SACR0_RST;
- SACR0 = 0;
- SACR1 = SACR1_DRPL | SACR1_DREC;
- SAIMR &= ~(SAIMR_RFS | SAIMR_TFS);
I'd expect this to happen when the driver is probed rather than when the module is initialised. Otherwise we'll end up writing to the hardware if run on systems where it's not present - for example if a kernel has both PXA2xx and PXA3xx support built in.
On Fri, May 8, 2009 at 12:29 PM, Mark Brown broonie@sirena.org.uk wrote:
On Fri, May 08, 2009 at 01:53:39AM +0200, Karl Beldan wrote:
Reset FIFO logic and registers, and make sure REC and RPL functions and FIFO service are disabled.
static int __init pxa2xx_i2s_init(void) { clk_i2s = ERR_PTR(-ENOENT);
- /*
- * PXA Developer's Manual:
- * If SACR0[ENB] is toggled in the middle of a normal operation,
- * the SACR0[RST] bit must also be set and cleared to reset all
- * I2S controller registers.
- */
- SACR0 = SACR0_RST;
- SACR0 = 0;
- SACR1 = SACR1_DRPL | SACR1_DREC;
- SAIMR &= ~(SAIMR_RFS | SAIMR_TFS);
I'd expect this to happen when the driver is probed rather than when the module is initialised. Otherwise we'll end up writing to the hardware
Indeed, will resend.
participants (2)
-
Karl Beldan
-
Mark Brown