Found these two bugs while browsing through the code. The first one is a cut-n-paste bug, instead of disabling the clock when request_irq() fails, it enabled it once more. The second one fixes a debug printout, AT91_SSC_IER is write only, AT91_SSC_IMR is readable (the printed string actually says imr).
Frank Mandarino was busy so he asked me to send these to this list.
/Patrik
Signed-off-by: Patrik Sevallius patrik.sevallius@enea.com Signed-off-by: Frank Mandarino fmandarino@endrelia.com
================================================================================ --- sound/soc/at91/at91-ssc.c.orig 2008-05-07 09:33:49.000000000 +0200 +++ sound/soc/at91/at91-ssc.c 2008-05-07 09:34:18.000000000 +0200 @@ -590,7 +590,7 @@ printk(KERN_WARNING "at91-ssc: request_irq failure\n");
DBG("Stopping pid %d clock\n", ssc_p->ssc.pid); - at91_sys_write(AT91_PMC_PCER, 1<<ssc_p->ssc.pid); + at91_sys_write(AT91_PMC_PCDR, 1<<ssc_p->ssc.pid); return ret; }
--- sound/soc/at91/at91-pcm.c.orig 2008-05-07 13:23:12.000000000 +0200 +++ sound/soc/at91/at91-pcm.c 2008-05-07 13:26:40.000000000 +0200 @@ -194,7 +194,7 @@ at91_ssc_write(params->ssc_base + ATMEL_PDC_PTCR, params->mask->pdc_enable);
DBG("sr=%lx imr=%lx\n", at91_ssc_read(params->ssc_base + AT91_SSC_SR), - at91_ssc_read(params->ssc_base + AT91_SSC_IER)); + at91_ssc_read(params->ssc_base + AT91_SSC_IMR)); break;
case SNDRV_PCM_TRIGGER_STOP: