]> pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - sound/pci/emu10k1/irq.c
[POWERPC] EEH: Power4 systems sometimes need multiple resets.
[linux-2.6-omap-h63xx.git] / sound / pci / emu10k1 / irq.c
index 594ea063b1406e29094b29b60802c34c105b307d..1076af4c36696cf2572fe5f1c8b034639c43905f 100644 (file)
 
 irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-       emu10k1_t *emu = dev_id;
+       struct snd_emu10k1 *emu = dev_id;
        unsigned int status, status2, orig_status, orig_status2;
        int handled = 0;
 
        while ((status = inl(emu->port + IPR)) != 0) {
-               //printk("emu10k1 irq - status = 0x%x\n", status);
+               //snd_printk(KERN_INFO "emu10k1 irq - status = 0x%x\n", status);
                orig_status = status;
                handled = 1;
+               if ((status & 0xffffffff) == 0xffffffff) {
+                       snd_printk(KERN_INFO "snd-emu10k1: Suspected sound card removal\n");
+                       break;
+               }
                if (status & IPR_PCIERROR) {
                        snd_printk(KERN_ERR "interrupt: PCI error\n");
                        snd_emu10k1_intr_disable(emu, INTE_PCIERRORENABLE);
@@ -56,7 +60,7 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                        int voice;
                        int voice_max = status & IPR_CHANNELNUMBERMASK;
                        u32 val;
-                       emu10k1_voice_t *pvoice = emu->voices;
+                       struct snd_emu10k1_voice *pvoice = emu->voices;
 
                        val = snd_emu10k1_ptr_read(emu, CLIPL, 0);
                        for (voice = 0; voice <= voice_max; voice++) {
@@ -150,8 +154,8 @@ irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                if (status & IPR_P16V) {
                        while ((status2 = inl(emu->port + IPR2)) != 0) {
                                u32 mask = INTE2_PLAYBACK_CH_0_LOOP;  /* Full Loop */
-                               emu10k1_voice_t *pvoice = &(emu->p16v_voices[0]);
-                               emu10k1_voice_t *cvoice = &(emu->p16v_capture_voice);
+                               struct snd_emu10k1_voice *pvoice = &(emu->p16v_voices[0]);
+                               struct snd_emu10k1_voice *cvoice = &(emu->p16v_capture_voice);
 
                                //printk(KERN_INFO "status2=0x%x\n", status2);
                                orig_status2 = status2;