From: <pal...@us...> - 2005-01-13 01:55:46
|
Update of /cvsroot/gc-linux/linux/sound/ppc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv31027/sound/ppc Modified Files: gcn-ai.c Log Message: Fixed Fatal ARAM bug when audio+aram might reset each others interrupt handling. Various other fixes Index: gcn-ai.c =================================================================== RCS file: /cvsroot/gc-linux/linux/sound/ppc/gcn-ai.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gcn-ai.c 8 Jan 2005 22:46:48 -0000 1.3 +++ gcn-ai.c 13 Jan 2005 01:55:33 -0000 1.4 @@ -253,6 +253,7 @@ { snd_gcn_t *chip = (snd_gcn_t *) dev; unsigned long flags; + u16 tmp; if (readw(AI_DSP_CSR) & AI_CSR_AIDINT) { u_int32_t addr; @@ -283,9 +284,12 @@ snd_pcm_period_elapsed(chip->playback_substream); } - /* ack AI DMA interrupt */ + /* ack AI DMA interrupt, go through lengths to only ack + the audio part */ local_irq_save(flags); - writew(readw(AI_DSP_CSR) | AI_CSR_AIDINT,AI_DSP_CSR); + tmp = readw(AI_DSP_CSR); + tmp &= ~(AI_CSR_PIINT | AI_CSR_ARINT | AI_CSR_DSPINT); + writew(tmp,AI_DSP_CSR); local_irq_restore(flags); return IRQ_HANDLED; @@ -358,9 +362,8 @@ strcpy(card->shortname, card->driver); sprintf(card->longname, "Nintendo GameCube Audio Interface"); - if (request_irq - (DSP_IRQ, snd_gcn_interrupt, SA_SHIRQ, card->shortname, - gcn_audio)) { + if (request_irq(DSP_IRQ, snd_gcn_interrupt, SA_INTERRUPT | SA_SHIRQ, + card->shortname,gcn_audio)) { snd_printk(KERN_ERR "%s: unable to grab IRQ %d\n", card->shortname, DSP_IRQ); return -EBUSY; |