]> git.hungrycats.org Git - linux/commitdiff
[PATCH] irqs in sound/
authorAndrew Morton <akpm@digeo.com>
Mon, 21 Apr 2003 03:18:53 +0000 (20:18 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Mon, 21 Apr 2003 03:18:53 +0000 (20:18 -0700)
Updates all sound drivers to the new IRQ API.

The patch also fixes

- a return-with-lock-held

- a bunch of warnings and 64-bit bugs (CPU flags must be held in an
  unsigned long)

- jiffies must use unsigned longs

- two functions returning uninitialised values

98 files changed:
include/sound/ad1848.h
include/sound/cs4231.h
include/sound/emu10k1.h
include/sound/es1688.h
include/sound/gus.h
include/sound/initval.h
include/sound/mpu401.h
include/sound/sb.h
sound/drivers/mtpav.c
sound/drivers/serial-u16550.c
sound/isa/ad1816a/ad1816a_lib.c
sound/isa/ad1848/ad1848_lib.c
sound/isa/cs423x/cs4231_lib.c
sound/isa/es1688/es1688_lib.c
sound/isa/es18xx.c
sound/isa/gus/gus_irq.c
sound/isa/gus/gusmax.c
sound/isa/gus/interwave.c
sound/isa/opl3sa2.c
sound/isa/opti9xx/opti92x-ad1848.c
sound/isa/sb/sb16_main.c
sound/isa/sb/sb8.c
sound/isa/sb/sb_common.c
sound/isa/sgalaxy.c
sound/isa/wavefront/wavefront.c
sound/oss/ad1816.c
sound/oss/ad1848.c
sound/oss/ad1848.h
sound/oss/btaudio.c
sound/oss/cmpci.c
sound/oss/cs4281/cs4281m.c
sound/oss/cs46xx.c
sound/oss/dmasound/dmasound_atari.c
sound/oss/dmasound/dmasound_awacs.c
sound/oss/dmasound/dmasound_paula.c
sound/oss/dmasound/dmasound_q40.c
sound/oss/emu10k1/cardwo.c
sound/oss/emu10k1/irqmgr.c
sound/oss/emu10k1/main.c
sound/oss/es1370.c
sound/oss/es1371.c
sound/oss/esssolo1.c
sound/oss/gus.h
sound/oss/gus_card.c
sound/oss/gus_wave.c
sound/oss/i810_audio.c
sound/oss/ite8172.c
sound/oss/maestro.c
sound/oss/maestro3.c
sound/oss/maui.c
sound/oss/mpu401.c
sound/oss/mpu401.h
sound/oss/msnd_pinnacle.c
sound/oss/nec_vrc5477.c
sound/oss/nm256.h
sound/oss/nm256_audio.c
sound/oss/pas2_card.c
sound/oss/pss.c
sound/oss/rme96xx.c
sound/oss/sb_common.c
sound/oss/sonicvibes.c
sound/oss/trident.c
sound/oss/uart401.c
sound/oss/uart6850.c
sound/oss/via82cxxx_audio.c
sound/oss/vidc.h
sound/oss/vidc_fill.S
sound/oss/vwsnd.c
sound/oss/waveartist.c
sound/oss/wavfront.c
sound/oss/wf_midi.c
sound/oss/ymfpci.c
sound/pci/ali5451/ali5451.c
sound/pci/als4000.c
sound/pci/cmipci.c
sound/pci/cs4281.c
sound/pci/cs46xx/cs46xx_lib.c
sound/pci/emu10k1/irq.c
sound/pci/es1938.c
sound/pci/es1968.c
sound/pci/fm801.c
sound/pci/ice1712/ice1712.c
sound/pci/ice1712/ice1724.c
sound/pci/korg1212/korg1212.c
sound/pci/maestro3.c
sound/pci/nm256/nm256.c
sound/pci/rme32.c
sound/pci/rme96.c
sound/pci/rme9652/hdsp.c
sound/pci/rme9652/rme9652.c
sound/pci/sonicvibes.c
sound/pci/trident/trident_main.c
sound/pci/via82xx.c
sound/pci/ymfpci/ymfpci_main.c
sound/ppc/pmac.c
sound/ppc/tumbler.c
sound/sparc/amd7930.c
sound/sparc/cs4231.c

index 155fa2b6ec0f963ca8d189ecda77aadd5f30ba1c..55be82f4599b5c84e0b654faa798e659852157f8 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include "pcm.h"
+#include <linux/interrupt.h>
 
 /* IO ports */
 
@@ -163,7 +164,7 @@ int snd_ad1848_create(snd_card_t * card,
 int snd_ad1848_pcm(ad1848_t * chip, int device, snd_pcm_t **rpcm);
 const snd_pcm_ops_t *snd_ad1848_get_pcm_ops(int direction);
 int snd_ad1848_mixer(ad1848_t * chip);
-void snd_ad1848_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+irqreturn_t snd_ad1848_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
 /* exported mixer stuffs */
 enum { AD1848_MIX_SINGLE, AD1848_MIX_DOUBLE, AD1848_MIX_CAPTURE };
index 75d1b588ee87fd1fdce79779e5e0cdf935a375e5..af643468893fc893154cd468033cb3acc42cddf0 100644 (file)
@@ -316,7 +316,7 @@ unsigned char snd_cs4236_ext_in(cs4231_t *chip, unsigned char reg);
 void snd_cs4231_mce_up(cs4231_t *chip);
 void snd_cs4231_mce_down(cs4231_t *chip);
 
-void snd_cs4231_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+irqreturn_t snd_cs4231_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
 const char *snd_cs4231_chip_id(cs4231_t *chip);
 
index 4161dfd1f2b3a803f6bfa2a2c7b640423f504ad7..73b0b39352752de87615178b1273fd3e5cfe6729 100644 (file)
@@ -30,6 +30,7 @@
 #include <sound/hwdep.h>
 #include <sound/ac97_codec.h>
 #include <sound/util_mem.h>
+#include <linux/interrupt.h>
 #include <asm/io.h>
 
 #ifndef PCI_VENDOR_ID_CREATIVE
@@ -1014,7 +1015,7 @@ int snd_emu10k1_fx8010_pcm(emu10k1_t * emu, int device, snd_pcm_t ** rpcm);
 int snd_emu10k1_mixer(emu10k1_t * emu);
 int snd_emu10k1_fx8010_new(emu10k1_t *emu, int device, snd_hwdep_t ** rhwdep);
 
-void snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
 /* initialization */
 void snd_emu10k1_voice_init(emu10k1_t * emu, int voice);
index 40967507892c2018b91b54789b80ec7fc95bf66e..104bb9b022cc62a674f1653ab56840936e6299c4 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "control.h"
 #include "pcm.h"
+#include <linux/interrupt.h>
 
 #define ES1688_HW_AUTO         0x0000
 #define ES1688_HW_688          0x0001
@@ -109,7 +110,7 @@ typedef struct _snd_es1688 es1688_t;
 void snd_es1688_mixer_write(es1688_t *chip, unsigned char reg, unsigned char data);
 unsigned char snd_es1688_mixer_read(es1688_t *chip, unsigned char reg);
 
-void snd_es1688_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+irqreturn_t snd_es1688_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
 int snd_es1688_create(snd_card_t * card,
                      unsigned long port,
index a896bf9ff62607767b01b985f9f3b3ac73380108..6cd0a22527f4c829263b84b8ab098915ea603d51 100644 (file)
@@ -561,7 +561,7 @@ struct _SND_IW_LFO_PROGRAM {
 };
 
 #if 0
-extern void snd_gf1_lfo_effect_interrupt(snd_gus_card_t * gus, snd_gf1_voice_t * voice);
+extern irqreturn_t snd_gf1_lfo_effect_interrupt(snd_gus_card_t * gus, snd_gf1_voice_t * voice);
 #endif
 extern void snd_gf1_lfo_init(snd_gus_card_t * gus);
 extern void snd_gf1_lfo_done(snd_gus_card_t * gus);
@@ -666,7 +666,7 @@ int snd_gus_initialize(snd_gus_card_t * gus);
 
 /* gus_irq.c */
 
-void snd_gus_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+irqreturn_t snd_gus_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 #ifdef CONFIG_SND_DEBUG
 void snd_gus_irq_profile_init(snd_gus_card_t *gus);
 #endif
index 016151a49a9bc78e927f250236e2ff9bbbcdfe58..31e045d389b7ba6a71195d98bdd226d950f0ee2c 100644 (file)
@@ -100,8 +100,9 @@ static int snd_legacy_auto_probe(unsigned long *ports, int (*probe)(unsigned lon
 #ifdef SNDRV_LEGACY_FIND_FREE_IRQ
 #include <linux/interrupt.h>
 
-static void snd_legacy_empty_irq_handler(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_legacy_empty_irq_handler(int irq, void *dev_id, struct pt_regs *regs)
 {
+       return IRQ_HANDLED;
 }
 
 static int snd_legacy_find_free_irq(int *irq_table)
index 3ae91b26b061615673890ee5982a5fcb81c4edd1..c5faba67aa26734bc0211782aef5961441e9c2f6 100644 (file)
@@ -23,6 +23,7 @@
  */
 
 #include "rawmidi.h"
+#include <linux/interrupt.h>
 
 #define MPU401_HW_MPU401               1       /* native MPU401 */
 #define MPU401_HW_SB                   2       /* SoundBlaster MPU-401 UART */
index 7815b9200d3521e5c5634b31907a00a5be5621cd..aa7d892912aa9096b8ea8cdcf5e5ae581195ac10 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "pcm.h"
 #include "rawmidi.h"
+#include <linux/interrupt.h>
 #include <asm/io.h>
 
 enum sb_hw_type {
@@ -99,7 +100,7 @@ struct _snd_sb {
        snd_rawmidi_t *rmidi;
        snd_rawmidi_substream_t *midi_substream_input;
        snd_rawmidi_substream_t *midi_substream_output;
-       void (*rmidi_callback)(int irq, void *dev_id, struct pt_regs *regs);
+       irqreturn_t (*rmidi_callback)(int irq, void *dev_id, struct pt_regs *regs);
 
        spinlock_t reg_lock;
        spinlock_t open_lock;
@@ -282,7 +283,7 @@ int snd_sbdsp_reset(sb_t *chip);
 int snd_sbdsp_create(snd_card_t *card,
                     unsigned long port,
                     int irq,
-                    void (*irq_handler)(int, void *, struct pt_regs *),
+                    irqreturn_t (*irq_handler)(int, void *, struct pt_regs *),
                     int dma8, int dma16,
                     unsigned short hardware,
                     sb_t **r_chip);
@@ -308,7 +309,7 @@ int snd_sb16dsp_pcm(sb_t *chip, int device, snd_pcm_t ** rpcm);
 const snd_pcm_ops_t *snd_sb16dsp_get_pcm_ops(int direction);
 int snd_sb16dsp_configure(sb_t *chip);
 /* sb16.c */
-void snd_sb16dsp_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+irqreturn_t snd_sb16dsp_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 int snd_sb16_playback_open(snd_pcm_substream_t *substream);
 int snd_sb16_capture_open(snd_pcm_substream_t *substream);
 int snd_sb16_playback_close(snd_pcm_substream_t *substream);
index 4d4bf94ebf67517aa541f1a5e1b761e51776cb5a..7ecd9d48007fea8af65016cbebee161b90182dbf 100644 (file)
@@ -585,7 +585,7 @@ static void snd_mtpav_read_bytes(mtpav_t * mcrd)
        } while (sbyt & SIGS_BYTE);
 }
 
-static void snd_mtpav_irqh(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_mtpav_irqh(int irq, void *dev_id, struct pt_regs *regs)
 {
        mtpav_t *mcard = snd_magic_cast(mtpav_t, dev_id, return);
 
@@ -593,6 +593,7 @@ static void snd_mtpav_irqh(int irq, void *dev_id, struct pt_regs *regs)
        spin_lock(&mcard->spinlock);
        snd_mtpav_read_bytes(mcard);
        spin_unlock(&mcard->spinlock);
+       return IRQ_HANDLED;
 }
 
 /*
index 299a68a68a042564052f863196484b773edbb3c2..2db217f54de02c668caf24c0b594fb2bc2c838d9 100644 (file)
@@ -290,7 +290,7 @@ static void snd_uart16550_io_loop(snd_uart16550_t * uart)
  * Note that some devices need OUT2 to be set before they will generate
  * interrupts at all. (Possibly tied to an internal pull-up on CTS?)
  */
-static void snd_uart16550_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_uart16550_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        snd_uart16550_t *uart;
 
@@ -298,11 +298,12 @@ static void snd_uart16550_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        spin_lock(&uart->open_lock);
        if (uart->filemode == SERIAL_MODE_NOT_OPENED) {
                spin_unlock(&uart->open_lock);
-               return;
+               return IRQ_NONE;
        }
        inb(uart->base + UART_IIR);             /* indicate to the UART that the interrupt has been serviced */
        snd_uart16550_io_loop(uart);
        spin_unlock(&uart->open_lock);
+       return IRQ_HANDLED;
 }
 
 /* When the polling mode, this function calls snd_uart16550_io_loop. */
index c962965545c1788066c640180e8bf2ef2cf54eaa..b46eabb44241038c70ba92bd0cd37b3f37b718af 100644 (file)
@@ -311,7 +311,7 @@ static snd_pcm_uframes_t snd_ad1816a_capture_pointer(snd_pcm_substream_t *substr
 }
 
 
-static void snd_ad1816a_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_ad1816a_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        ad1816a_t *chip = snd_magic_cast(ad1816a_t, dev_id, return);
        unsigned char status;
@@ -332,6 +332,7 @@ static void snd_ad1816a_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        spin_lock(&chip->lock);
        snd_ad1816a_out(chip, AD1816A_INTERRUPT_STATUS, 0x00);
        spin_unlock(&chip->lock);
+       return IRQ_HANDLED;
 }
 
 
index 840c448079f98aa8b4e52239bf1a5eacb81aac9c..ed6a66d4e08263c89ec7c580cbb38ddaf18b7d35 100644 (file)
@@ -585,7 +585,7 @@ static int snd_ad1848_capture_prepare(snd_pcm_substream_t * substream)
        return 0;
 }
 
-void snd_ad1848_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t snd_ad1848_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        ad1848_t *chip = snd_magic_cast(ad1848_t, dev_id, return);
 
@@ -596,6 +596,7 @@ void snd_ad1848_interrupt(int irq, void *dev_id, struct pt_regs *regs)
            (chip->mode & AD1848_MODE_RUNNING))
                snd_pcm_period_elapsed(chip->capture_substream);
        outb(0, AD1848P(chip, STATUS)); /* clear global interrupt bit */
+       return IRQ_HANDLED;
 }
 
 static snd_pcm_uframes_t snd_ad1848_playback_pointer(snd_pcm_substream_t * substream)
index cadcaa1a95a448bd585ff227280f05103be3a60d..70feb9cfa48236bd31133e52dd470b41a42b6600 100644 (file)
@@ -967,7 +967,7 @@ static void snd_cs4231_overrange(cs4231_t *chip)
                chip->capture_substream->runtime->overrange++;
 }
 
-void snd_cs4231_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t snd_cs4231_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        cs4231_t *chip = snd_magic_cast(cs4231_t, dev_id, return);
        unsigned char status;
@@ -998,6 +998,7 @@ void snd_cs4231_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        spin_lock(&chip->reg_lock);
        snd_cs4231_outm(chip, CS4231_IRQ_STATUS, ~CS4231_ALL_IRQS | ~status, 0);
        spin_unlock(&chip->reg_lock);
+       return IRQ_HANDLED;
 }
 
 #ifdef LEGACY_SUPPORT
index 5d8ceba7a2e98bfb422ff0bc7f8d79c014978e3e..14dd8cf2296fcc5af14340940ed89ffddbdfd751 100644 (file)
@@ -482,7 +482,7 @@ static int snd_es1688_capture_trigger(snd_pcm_substream_t * substream,
        return snd_es1688_trigger(chip, cmd, 0x0f);
 }
 
-void snd_es1688_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t snd_es1688_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        es1688_t *chip = snd_magic_cast(es1688_t, dev_id, return);
 
@@ -492,6 +492,7 @@ void snd_es1688_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                snd_pcm_period_elapsed(chip->capture_substream);
 
        inb(ES1688P(chip, DATA_AVAIL)); /* ack interrupt */
+       return IRQ_HANDLED;
 }
 
 static snd_pcm_uframes_t snd_es1688_playback_pointer(snd_pcm_substream_t * substream)
index 04f2c1834bfcc85955b3a2b37ce9124dd89e0da9..d82cea50a0838230453255e5c5228d60601f2f70 100644 (file)
@@ -727,12 +727,11 @@ static int snd_es18xx_playback_trigger(snd_pcm_substream_t *substream,
                return snd_es18xx_playback2_trigger(chip, substream, cmd);
 }
 
-static void snd_es18xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_es18xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        es18xx_t *chip = snd_magic_cast(es18xx_t, dev_id, return);
        unsigned char status;
 
-
        if (chip->caps & ES18XX_CONTROL) {
                /* Read Interrupt status */
                status = inb(chip->ctrl_port + 6);
@@ -787,7 +786,7 @@ static void snd_es18xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                /* ack interrupt */
                snd_es18xx_mixer_write(chip, 0x66, 0x00);
        }
-
+       return IRQ_HANDLED;
 }
 
 static snd_pcm_uframes_t snd_es18xx_playback_pointer(snd_pcm_substream_t * substream)
index 3ea4d76ca1012b6f58fa0a30a102883911b17ae9..83c919967e96ed1fd37c69d5a54f54e0e28052f0 100644 (file)
 #define STAT_ADD(x)    while (0) { ; }
 #endif
 
-void snd_gus_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t snd_gus_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        snd_gus_card_t * gus = snd_magic_cast(snd_gus_card_t, dev_id, return);
        unsigned char status;
        int loop = 100;
-       
-      __again:
+       int handled = 0;
+
+__again:
        status = inb(gus->gf1.reg_irqstat);
        if (status == 0)
-               return;
+               return IRQ_RETVAL(handled);
+       handled = 1;
        // snd_printk("IRQ: status = 0x%x\n", status);
        if (status & 0x02) {
                STAT_ADD(gus->gf1.interrupt_stat_midi_in);
@@ -101,6 +103,7 @@ void snd_gus_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        }
        if (--loop > 0)
                goto __again;
+       return IRQ_NONE;
 }
 
 #ifdef CONFIG_SND_DEBUG
index 22cb9ac15cb9faf4ba19c0ea8f3b2aee25d5946f..11a85a6154e8f446f53cd19c765c9e59a433cd0e 100644 (file)
@@ -129,22 +129,26 @@ static int __init snd_gusmax_detect(snd_gus_card_t * gus)
        return 0;
 }
 
-static void snd_gusmax_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_gusmax_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct snd_gusmax *maxcard = (struct snd_gusmax *) dev_id;
        int loop, max = 5;
+       int handled = 0;
 
        do {
                loop = 0;
                if (inb(maxcard->gus_status_reg)) {
+                       handled = 1;
                        snd_gus_interrupt(irq, maxcard->gus, regs);
                        loop++;
                }
                if (inb(maxcard->pcm_status_reg) & 0x01) { /* IRQ bit is set? */
+                       handled = 1;
                        snd_cs4231_interrupt(irq, maxcard->cs4231, regs);
                        loop++;
                }
        } while (loop && --max > 0);
+       return IRQ_RETVAL(handled);
 }
 
 static void __init snd_gusmax_init(int dev, snd_card_t * card, snd_gus_card_t * gus)
index d5e6c7fdc70b380e644805533a165d9a7217c5a4..cbc5143e4e444f67c245975b990341c00873495a 100644 (file)
@@ -312,22 +312,26 @@ static int __devinit snd_interwave_detect(struct snd_interwave *iwcard,
        return -ENODEV;
 }
 
-static void snd_interwave_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_interwave_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct snd_interwave *iwcard = (struct snd_interwave *) dev_id;
        int loop, max = 5;
+       int handled = 0;
 
        do {
                loop = 0;
                if (inb(iwcard->gus_status_reg)) {
+                       handled = 1;
                        snd_gus_interrupt(irq, iwcard->gus, regs);
                        loop++;
                }
                if (inb(iwcard->pcm_status_reg) & 0x01) {       /* IRQ bit is set? */
+                       handled = 1;
                        snd_cs4231_interrupt(irq, iwcard->cs4231, regs);
                        loop++;
                }
        } while (loop && --max > 0);
+       return IRQ_RETVAL(handled);
 }
 
 static void __devinit snd_interwave_reset(snd_gus_card_t * gus)
index feb12392be8eb9e9c52e09943cc37a22ea99ec51..80530a3eacc9efafd9b6ed71bd93a24e3b8128d0 100644 (file)
@@ -297,26 +297,34 @@ static int __init snd_opl3sa2_detect(opl3sa2_t *chip)
        return 0;
 }
 
-static void snd_opl3sa2_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_opl3sa2_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        unsigned short status;
        opl3sa2_t *chip = snd_magic_cast(opl3sa2_t, dev_id, return);
+       int handled = 0;
 
        if (chip == NULL || chip->card == NULL)
-               return;
+               return IRQ_NONE;
 
        status = snd_opl3sa2_read(chip, OPL3SA2_IRQ_STATUS);
 
-       if (status & 0x20)
+       if (status & 0x20) {
+               handled = 1;
                snd_opl3_interrupt(chip->synth);
+       }
 
-       if ((status & 0x10) && chip->rmidi != NULL)
+       if ((status & 0x10) && chip->rmidi != NULL) {
+               handled = 1;
                snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs);
+       }
 
-       if (status & 0x07)      /* TI,CI,PI */
+       if (status & 0x07) {    /* TI,CI,PI */
+               handled = 1;
                snd_cs4231_interrupt(irq, chip->cs4231, regs);
+       }
 
        if (status & 0x40) { /* hardware volume change */
+               handled = 1;
                /* reading from Master Lch register at 0x07 clears this bit */
                snd_opl3sa2_read(chip, OPL3SA2_MASTER_RIGHT);
                snd_opl3sa2_read(chip, OPL3SA2_MASTER_LEFT);
@@ -325,6 +333,7 @@ static void snd_opl3sa2_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                        snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->master_volume->id);
                }
        }
+       return IRQ_RETVAL(handled);
 }
 
 #define OPL3SA2_SINGLE(xname, xindex, reg, shift, mask, invert) \
index f768fdfcaeb6ee04bf0d4d317ddbc4780f385288..be0e40a9ec44c44230687da25b567a7624b3a2fe 100644 (file)
@@ -1125,7 +1125,7 @@ static void snd_opti93x_overrange(opti93x_t *chip)
        spin_unlock_irqrestore(&chip->lock, flags);
 }
 
-void snd_opti93x_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t snd_opti93x_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        opti93x_t *codec = snd_magic_cast(opti93x_t, dev_id, return);
        unsigned char status;
@@ -1138,6 +1138,7 @@ void snd_opti93x_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                snd_pcm_period_elapsed(codec->capture_substream);
        }
        outb(0x00, OPTi93X_PORT(codec, STATUS));
+       return IRQ_HANDLED;
 }
 
 
index 76b50b58618d4bacdd88f8c046b6fe3af5865c1a..1f991b49c46ff944534c90cba30ebacda1b753b1 100644 (file)
@@ -393,7 +393,7 @@ static int snd_sb16_capture_trigger(snd_pcm_substream_t * substream,
        return result;
 }
 
-void snd_sb16dsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t snd_sb16dsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        sb_t *chip = snd_magic_cast(sb_t, dev_id, return);
        unsigned char status;
@@ -438,6 +438,7 @@ void snd_sb16dsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                snd_sb_ack_16bit(chip);
                spin_unlock(&chip->reg_lock);
        }
+       return IRQ_HANDLED;
 }
 
 /*
index b9510381eb254254fc773cc64e1ce2aac9c983c9..bc43e1da04f944f1b857cef49f39dbad07219dbd 100644 (file)
@@ -70,7 +70,7 @@ struct snd_sb8 {
 
 static snd_card_t *snd_sb8_cards[SNDRV_CARDS] = SNDRV_DEFAULT_PTR;
 
-static void snd_sb8_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_sb8_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        sb_t *chip = snd_magic_cast(sb_t, dev_id, return);
 
@@ -79,6 +79,7 @@ static void snd_sb8_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        } else {
                snd_sb8dsp_midi_interrupt(chip);
        }
+       return IRQ_HANDLED;
 }
 
 static void snd_sb8_free(snd_card_t *card)
index 1b32c915d00814c4a8134f038e7944476fb47eed..d7d56cb8db9cd1338fb2aadf7022f4340226e7bb 100644 (file)
@@ -214,7 +214,7 @@ static int snd_sbdsp_dev_free(snd_device_t *device)
 int snd_sbdsp_create(snd_card_t *card,
                     unsigned long port,
                     int irq,
-                    void (*irq_handler)(int, void *, struct pt_regs *),
+                    irqreturn_t (*irq_handler)(int, void *, struct pt_regs *),
                     int dma8,
                     int dma16,
                     unsigned short hardware,
index a67fc04dccd37d30c2c73f5bb48fd22ef80f1551..a7b00283ec4dc3cd8016993e51121eb74f0fca96 100644 (file)
@@ -112,8 +112,9 @@ static int __init snd_sgalaxy_sbdsp_command(unsigned long port, unsigned char va
        return 0;
 }
 
-static void snd_sgalaxy_dummy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_sgalaxy_dummy_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
+       return IRQ_NONE;
 }
 
 static int __init snd_sgalaxy_setup_wss(unsigned long port, int irq, int dma)
index 30037dad49bb914733a069f8e6d2702a6eed5a39..47a07e98cc9e24cf22bb866cde75df6cbfc2eeea 100644 (file)
@@ -276,7 +276,7 @@ snd_wavefront_pnp (int dev, snd_wavefront_card_t *acard, struct pnp_card_link *c
 
 #endif /* CONFIG_PNP */
 
-static void snd_wavefront_ics2115_interrupt(int irq, 
+static irqreturn_t snd_wavefront_ics2115_interrupt(int irq, 
                                            void *dev_id, 
                                            struct pt_regs *regs)
 {
@@ -285,13 +285,14 @@ static void snd_wavefront_ics2115_interrupt(int irq,
        acard = (snd_wavefront_card_t *) dev_id;
 
        if (acard == NULL) 
-               return;
+               return IRQ_NONE;
 
        if (acard->wavefront.interrupts_are_midi) {
                snd_wavefront_midi_interrupt (acard);
        } else {
                snd_wavefront_internal_interrupt (acard);
        }
+       return IRQ_HANDLED;
 }
 
 snd_hwdep_t * __devinit
index fb48847ec29a69853b2a6afb3a302f1f1b41b6a6..90b687a4e9b15e26bd4f389795207a8f499d904b 100644 (file)
@@ -540,7 +540,7 @@ static struct audio_driver ad1816_audio_driver =
 /* Interrupt handler */
 
 
-static void ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
+static irqreturn_t ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
 {
        unsigned char   status;
        ad1816_info     *devc;
@@ -549,7 +549,7 @@ static void ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
        
        if (irq < 0 || irq > 15) {
                printk(KERN_WARNING "ad1816: Got bogus interrupt %d\n", irq);
-               return;
+               return IRQ_NONE;
        }
 
        dev = irq2dev[irq];
@@ -557,7 +557,7 @@ static void ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
        if (dev < 0 || dev >= num_audiodevs) {
                printk(KERN_WARNING "ad1816: IRQ2AD1816-mapping failed for "
                                    "irq %d device %d\n", irq,dev);
-               return;         
+               return IRQ_NONE;
        }
 
        devc = (ad1816_info *) audio_devs[dev]->devc;
@@ -583,6 +583,7 @@ static void ad1816_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
                DMAbuf_outputintr (dev, 1);
 
        spin_unlock(&devc->lock);
+       return IRQ_HANDLED;
 }
 
 /* ------------------------------------------------------------------- */
index 2e13f47fe22eef48ddc91180ece7771468da81cc..2ff9984287749c2d2c5bc234b015954d886b4be8 100644 (file)
@@ -2212,7 +2212,7 @@ void ad1848_unload(int io_base, int irq, int dma_playback, int dma_capture, int
                printk(KERN_ERR "ad1848: Can't find device to be unloaded. Base=%x\n", io_base);
 }
 
-void adintr(int irq, void *dev_id, struct pt_regs *dummy)
+irqreturn_t adintr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        unsigned char status;
        ad1848_info *devc;
@@ -2287,6 +2287,7 @@ interrupt_again:          /* Jump back here if int status doesn't reset */
        {
                  goto interrupt_again;
        }
+       return IRQ_HANDLED;
 }
 
 /*
index 6791c2745ca12161139e13a35b5a96a936c120ad..76e3c6a1dd0737b5f92281745b56f89f20ee20df 100644 (file)
@@ -1,4 +1,6 @@
 
+#include <linux/interrupt.h>
+
 #define AD_F_CS4231     0x0001  /* Returned if a CS4232 (or compatible) detected */
 #define AD_F_CS4248     0x0001  /* Returned if a CS4248 (or compatible) detected */
 
@@ -16,7 +18,7 @@ void ad1848_unload (int io_base, int irq, int dma_playback, int dma_capture, int
 int ad1848_detect (int io_base, int *flags, int *osp);
 int ad1848_control(int cmd, int arg);
 
-void adintr(int irq, void *dev_id, struct pt_regs * dummy);
+irqreturn_t adintr(int irq, void *dev_id, struct pt_regs * dummy);
 void attach_ms_sound(struct address_info * hw_config, struct module * owner);
 
 int probe_ms_sound(struct address_info *hw_config);
index 6b380ea83d4e86e195af07a5a4e954285373cdce..6f4d73666fa24e033ca231d261d4fde5c8aa4fbd 100644 (file)
@@ -817,18 +817,20 @@ static char *irq_name[] = { "", "", "", "OFLOW", "", "", "", "", "", "", "",
                            "RISCI", "FBUS", "FTRGT", "FDSR", "PPERR",
                            "RIPERR", "PABORT", "OCERR", "SCERR" };
 
-static void btaudio_irq(int irq, void *dev_id, struct pt_regs * regs)
+static irqreturn_t btaudio_irq(int irq, void *dev_id, struct pt_regs * regs)
 {
        int count = 0;
        u32 stat,astat;
        struct btaudio *bta = dev_id;
+       int handled = 0;
 
        for (;;) {
                count++;
                stat  = btread(REG_INT_STAT);
                astat = stat & btread(REG_INT_MASK);
                if (!astat)
-                       return;
+                       return IRQ_RETVAL(handled);
+               handled = 1;
                btwrite(astat,REG_INT_STAT);
 
                if (irq_debug) {
@@ -864,7 +866,7 @@ static void btaudio_irq(int irq, void *dev_id, struct pt_regs * regs)
                        btwrite(0, REG_INT_MASK);
                }
        }
-       return;
+       return IRQ_NONE;
 }
 
 /* -------------------------------------------------------------- */
index fc323c40ee88b0947717fafbabdd575800095cc9..a66c0da27289fc7d9d5dc9b0d30db88bec71e1ac 100644 (file)
@@ -1156,7 +1156,7 @@ static void cm_handle_midi(struct cm_state *s)
 }
 #endif
 
-static void cm_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t cm_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
         struct cm_state *s = (struct cm_state *)dev_id;
        unsigned int intsrc, intstat;
@@ -1165,7 +1165,7 @@ static void cm_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* fastpath out, to ease interrupt sharing */
        intsrc = inl(s->iobase + CODEC_CMI_INT_STATUS);
        if (!(intsrc & 0x80000000))
-               return;
+               return IRQ_NONE;
        spin_lock(&s->lock);
        intstat = inb(s->iobase + CODEC_CMI_INT_HLDCLR + 2);
        /* acknowledge interrupt */
@@ -1180,6 +1180,7 @@ static void cm_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        cm_handle_midi(s);
 #endif
        spin_unlock(&s->lock);
+       return IRQ_HANDLED;
 }
 
 #ifdef CONFIG_SOUND_CMPCI_MIDI
index 19b38dfd98acd1cc09c541650f2060b58e472bbd..7d16e837e24ef1e2afcb375cf349aaaa479b5d64 100644 (file)
@@ -3792,7 +3792,7 @@ static void cs4281_handle_midi(struct cs4281_state *s)
 
 
 
-static void cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct cs4281_state *s = (struct cs4281_state *) dev_id;
        unsigned int temp1;
@@ -3809,7 +3809,7 @@ static void cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                writel(HICR_IEV | HICR_CHGM, s->pBA0 + BA0_HICR);
                CS_DBGOUT(CS_INTERRUPT, 9, printk(KERN_INFO
                        "cs4281: cs4281_interrupt(): returning not cs4281 interrupt.\n"));
-               return;
+               return IRQ_NONE;
        }
 
        if (temp1 & HISR_DMA0)  // If play interrupt,
@@ -3823,6 +3823,7 @@ static void cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        cs4281_update_ptr(s,CS_TRUE);
        cs4281_handle_midi(s);
        spin_unlock(&s->lock);
+       return IRQ_HANDLED;
 }
 
 // **************************************************************************
index 41d61bc6e95b0c04babf25b264122d8eba2fd62c..ee682b97127d6a227146ef5a93139a3dc159a044 100644 (file)
@@ -1670,7 +1670,7 @@ static void cs_handle_midi(struct cs_card *card)
                 wake_up(&card->midi.owait);
 }
 
-static void cs_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t cs_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct cs_card *card = (struct cs_card *)dev_id;
        /* Single channel card */
@@ -1688,7 +1688,7 @@ static void cs_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        {
                cs461x_pokeBA0(card, BA0_HICR, HICR_CHGM|HICR_IEV);
                spin_unlock(&card->lock);
-               return;
+               return IRQ_HANDLED;     /* Might be IRQ_NONE.. */
        }
        
        /*
@@ -1709,6 +1709,7 @@ static void cs_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        cs461x_pokeBA0(card, BA0_HICR, HICR_CHGM|HICR_IEV);
        spin_unlock(&card->lock);
        CS_DBGOUT(CS_INTERRUPT, 9, printk("cs46xx: cs_interrupt()- \n"));
+       return IRQ_HANDLED;
 }
 
 
index ff35be069d2eb182df6ea1a8305d0d84e4e9c2df..4d0994a4451e8e6bd2e44f9c152c2923e4c2455d 100644 (file)
@@ -134,7 +134,7 @@ static int FalconSetFormat(int format);
 static int FalconSetVolume(int volume);
 static void AtaPlayNextFrame(int index);
 static void AtaPlay(void);
-static void AtaInterrupt(int irq, void *dummy, struct pt_regs *fp);
+static irqreturn_t AtaInterrupt(int irq, void *dummy, struct pt_regs *fp);
 
 /*** Mid level stuff *********************************************************/
 
@@ -1250,7 +1250,7 @@ static void AtaPlay(void)
 }
 
 
-static void AtaInterrupt(int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t AtaInterrupt(int irq, void *dummy, struct pt_regs *fp)
 {
 #if 0
        /* ++TeSche: if you should want to test this... */
@@ -1259,7 +1259,7 @@ static void AtaInterrupt(int irq, void *dummy, struct pt_regs *fp)
                if (++cnt == 10) {
                        /* simulate losing an interrupt */
                        cnt = 0;
-                       return;
+                       return IRQ_HANDLED;
                }
 #endif
        spin_lock(&dmasound.lock);
@@ -1269,7 +1269,7 @@ static void AtaInterrupt(int irq, void *dummy, struct pt_regs *fp)
                 * (almost) like on the TT.
                 */
                write_sq_ignore_int = 0;
-               return;
+               return IRQ_HANDLED;
        }
 
        if (!write_sq.active) {
@@ -1277,7 +1277,7 @@ static void AtaInterrupt(int irq, void *dummy, struct pt_regs *fp)
                 * the sq variables, so better don't do anything here.
                 */
                WAKE_UP(write_sq.sync_queue);
-               return;
+               return IRQ_HANDLED;
        }
 
        /* Probably ;) one frame is finished. Well, in fact it may be that a
@@ -1315,6 +1315,7 @@ static void AtaInterrupt(int irq, void *dummy, struct pt_regs *fp)
           is nothing to play any more. Wake up a process
           waiting for audio output to drain. */
        spin_unlock(&dmasound.lock);
+       return IRQ_HANDLED;
 }
 
 
index b7139ecff576f898d00bba3f57c31b3ec171174c..45b57afd9c615e80641e04f60c0e4c65c6870180 100644 (file)
@@ -266,9 +266,9 @@ static int PMacSetFormat(int format);
 static int PMacSetVolume(int volume);
 static void PMacPlay(void);
 static void PMacRecord(void);
-static void pmac_awacs_tx_intr(int irq, void *devid, struct pt_regs *regs);
-static void pmac_awacs_rx_intr(int irq, void *devid, struct pt_regs *regs);
-static void pmac_awacs_intr(int irq, void *devid, struct pt_regs *regs);
+static irqreturn_t pmac_awacs_tx_intr(int irq, void *devid, struct pt_regs *regs);
+static irqreturn_t pmac_awacs_rx_intr(int irq, void *devid, struct pt_regs *regs);
+static irqreturn_t pmac_awacs_intr(int irq, void *devid, struct pt_regs *regs);
 static void awacs_write(int val);
 static int awacs_get_volume(int reg, int lshift);
 static int awacs_volume_setter(int volume, int n, int mute, int lshift);
@@ -395,20 +395,24 @@ read_audio_gpio(int gpio_addr)
        return ((pmac_call_feature(PMAC_FTR_READ_GPIO, NULL, gpio_addr, 0) & 0x02) !=0);
 }
 
-static void
+static irqreturn_t
 headphone_intr(int irq, void *devid, struct pt_regs *regs)
 {
+       int handled = 0;
        spin_lock(&dmasound.lock);
        if (read_audio_gpio(gpio_headphone_detect) == gpio_headphone_detect_pol) {
+               handled = 1;
                printk(KERN_INFO "Audio jack plugged, muting speakers.\n");
                write_audio_gpio(gpio_amp_mute, gpio_amp_mute_pol);
                write_audio_gpio(gpio_headphone_mute, !gpio_headphone_mute_pol);
        } else {
+               handled = 1;
                printk(KERN_INFO "Audio jack unplugged, enabling speakers.\n");
                write_audio_gpio(gpio_amp_mute, !gpio_amp_mute_pol);
                write_audio_gpio(gpio_headphone_mute, gpio_headphone_mute_pol);
        }
        spin_unlock(&dmasound.lock);
+       return IRQ_RETVAL(handled);
 }
 
 
@@ -923,7 +927,7 @@ static void PMacRecord(void)
    'next_cmd' field will already point back to the original loop of blocks.
 */
 
-static void
+static irqreturn_t
 pmac_awacs_tx_intr(int irq, void *devid, struct pt_regs *regs)
 {
        int i = write_sq.front;
@@ -1009,10 +1013,11 @@ printk("dmasound_pmac: tx-irq: xfer died - patching it up...\n") ;
        if (!write_sq.active && (write_sq.syncing & 1))
                WAKE_UP(write_sq.sync_queue); /* any time we're empty */
        spin_unlock(&dmasound.lock);
+       return IRQ_HANDLED;
 }
 
 
-static void
+static irqreturn_t
 pmac_awacs_rx_intr(int irq, void *devid, struct pt_regs *regs)
 {
        int stat ;
@@ -1023,12 +1028,12 @@ pmac_awacs_rx_intr(int irq, void *devid, struct pt_regs *regs)
         * just blow it off.
         */
        if (in_le32(&awacs_rxdma->cmdptr) == 0)
-               return;
+               return IRQ_HANDLED;
 
        /* We also want to blow 'em off when shutting down.
        */
        if (read_sq.active == 0)
-               return;
+               return IRQ_HANDLED;
 
        spin_lock(&dmasound.lock);
        /* Check multiple buffers in case we were held off from
@@ -1063,7 +1068,7 @@ printk("dmasound_pmac: rx-irq: DIED - attempting resurection\n");
                        out_le32(&awacs_rxdma->control,
                                ((RUN|WAKE) << 16) + (RUN|WAKE));
                        spin_unlock(&dmasound.lock);
-                       return; /* try this block again */
+                       return IRQ_HANDLED; /* try this block again */
                }
                /* Clear status and move on to next buffer.
                */
@@ -1091,10 +1096,11 @@ printk("dmasound_pmac: rx-irq: DIED - attempting resurection\n");
 
        WAKE_UP(read_sq.action_queue);
        spin_unlock(&dmasound.lock);
+       return IRQ_HANDLED;
 }
 
 
-static void
+static irqreturn_t
 pmac_awacs_intr(int irq, void *devid, struct pt_regs *regs)
 {
        int ctrl;
@@ -1113,6 +1119,7 @@ pmac_awacs_intr(int irq, void *devid, struct pt_regs *regs)
        /* Writing 1s to the CNTLERR and PORTCHG bits clears them... */
        out_le32(&awacs->control, ctrl);
        spin_unlock(&dmasound.lock);
+       return IRQ_HANDLED;
 }
 
 static void
index 1acc158359dfc398ac345fab4d8b63371ffb482c..18ebbcee853c225cbe7bcb3c50e20569b8682b39 100644 (file)
@@ -83,7 +83,7 @@ static int AmiSetVolume(int volume);
 static int AmiSetTreble(int treble);
 static void AmiPlayNextFrame(int index);
 static void AmiPlay(void);
-static void AmiInterrupt(int irq, void *dummy, struct pt_regs *fp);
+static irqreturn_t AmiInterrupt(int irq, void *dummy, struct pt_regs *fp);
 
 #ifdef CONFIG_HEARTBEAT
 
@@ -567,7 +567,7 @@ static void AmiPlay(void)
 }
 
 
-static void AmiInterrupt(int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t AmiInterrupt(int irq, void *dummy, struct pt_regs *fp)
 {
        int minframes = 1;
 
@@ -578,7 +578,7 @@ static void AmiInterrupt(int irq, void *dummy, struct pt_regs *fp)
                 * the sq variables, so better don't do anything here.
                 */
                WAKE_UP(write_sq.sync_queue);
-               return;
+               return IRQ_HANDLED;
        }
 
        if (write_sq.active & AMI_PLAY_PLAYING) {
@@ -608,6 +608,7 @@ static void AmiInterrupt(int irq, void *dummy, struct pt_regs *fp)
                /* Nothing to play anymore.
                   Wake up a process waiting for audio output to drain. */
                WAKE_UP(write_sq.sync_queue);
+       return IRQ_HANDLED;
 }
 
 /*** Mid level stuff *********************************************************/
index a6fa07a04a08e332c43b4b79d04cbbf854784ef2..1bb949878f2d7be71f651ec4002483597dbc45eb 100644 (file)
@@ -49,8 +49,8 @@ static int Q40SetFormat(int format);
 static int Q40SetVolume(int volume);
 static void Q40PlayNextFrame(int index);
 static void Q40Play(void);
-static void Q40StereoInterrupt(int irq, void *dummy, struct pt_regs *fp);
-static void Q40MonoInterrupt(int irq, void *dummy, struct pt_regs *fp);
+static irqreturn_t Q40StereoInterrupt(int irq, void *dummy, struct pt_regs *fp);
+static irqreturn_t Q40MonoInterrupt(int irq, void *dummy, struct pt_regs *fp);
 static void Q40Interrupt(void);
 
 
@@ -464,7 +464,7 @@ static void Q40Play(void)
        spin_unlock_irqrestore_flags(&dmasound.lock, flags);
 }
 
-static void Q40StereoInterrupt(int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t Q40StereoInterrupt(int irq, void *dummy, struct pt_regs *fp)
 {
        spin_lock(&dmasound.lock);
         if (q40_sc>1){
@@ -474,8 +474,9 @@ static void Q40StereoInterrupt(int irq, void *dummy, struct pt_regs *fp)
            master_outb(1,SAMPLE_CLEAR_REG);
        }else Q40Interrupt();
        spin_unlock(&dmasound.lock);
+       return IRQ_HANDLED;
 }
-static void Q40MonoInterrupt(int irq, void *dummy, struct pt_regs *fp)
+static irqreturn_t Q40MonoInterrupt(int irq, void *dummy, struct pt_regs *fp)
 {
        spin_lock(&dmasound.lock);
         if (q40_sc>0){
@@ -485,6 +486,7 @@ static void Q40MonoInterrupt(int irq, void *dummy, struct pt_regs *fp)
            master_outb(1,SAMPLE_CLEAR_REG);
        }else Q40Interrupt();
        spin_unlock(&dmasound.lock);
+       return IRQ_HANDLED;
 }
 static void Q40Interrupt(void)
 {
index e6d8f42ae3464d870fa58dedef71395c6fc9ac8b..57e151a97e6287ff791f10936870b21fee24eb55 100644 (file)
@@ -444,7 +444,7 @@ static void copy_ilv_block(struct woinst *woinst, u32 str, u8 *src, u32 len)
        while (len) { 
                for (voice_num = 0; voice_num < woinst->num_voices; voice_num++) {
                        if (__copy_from_user((u8 *)(voice[voice_num].mem.addr[pg]) + pgoff, src, woinst->format.bytespervoicesample))
-                               return -EFAULT;
+                               return;
                        src += woinst->format.bytespervoicesample;
                }
 
index 876216a796992ad78b787c508b3f9c696dfc2e7d..d19b464ba01b5f0851b5c2e4f4aecc6c9a731829 100644 (file)
 
 /* Interrupt handler */
 
-void emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct emu10k1_card *card = (struct emu10k1_card *) dev_id;
        u32 irqstatus, irqstatus_tmp;
+       int handled = 0;
 
        DPD(4, "emu10k1_interrupt called, irq =  %u\n", irq);
 
@@ -105,6 +106,8 @@ void emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                }
 
                /* acknowledge interrupt */
-                outl(irqstatus_tmp, card->iobase + IPR);
+               outl(irqstatus_tmp, card->iobase + IPR);
+               handled = 1;
        }
+       return IRQ_RETVAL(handled);
 }
index 57130d74c30f01ac0bd11f3f5b2b42b39408d77d..80c3e69846c2217a6059ce2eabcf7001a25356df 100644 (file)
@@ -157,7 +157,7 @@ extern struct file_operations emu10k1_midi_fops;
 static struct midi_operations emu10k1_midi_operations;
 #endif
 
-extern void emu10k1_interrupt(int, void *, struct pt_regs *s);
+extern irqreturn_t emu10k1_interrupt(int, void *, struct pt_regs *s);
 
 static int __devinit emu10k1_audio_init(struct emu10k1_card *card)
 {
index eaa7c9ccb31952f7aef0a78f93414d6d9af0c25d..ed412fd65b8729c92cd98c5db190a0564db1cae3 100644 (file)
@@ -755,7 +755,7 @@ static void es1370_handle_midi(struct es1370_state *s)
        outb((s->midi.ocnt > 0) ? UCTRL_RXINTEN | UCTRL_ENA_TXINT : UCTRL_RXINTEN, s->io+ES1370_REG_UART_CONTROL);
 }
 
-static void es1370_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t es1370_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
         struct es1370_state *s = (struct es1370_state *)dev_id;
        unsigned int intsrc, sctl;
@@ -763,7 +763,7 @@ static void es1370_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* fastpath out, to ease interrupt sharing */
        intsrc = inl(s->io+ES1370_REG_STATUS);
        if (!(intsrc & 0x80000000))
-               return;
+               return IRQ_NONE;
        spin_lock(&s->lock);
        /* clear audio interrupts first */
        sctl = s->sctrl;
@@ -778,6 +778,7 @@ static void es1370_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        es1370_update_ptr(s);
        es1370_handle_midi(s);
        spin_unlock(&s->lock);
+       return IRQ_HANDLED;
 }
 
 /* --------------------------------------------------------------------- */
index 3d7f57ffce5e3ebcfa467399b2c2da6da5c0b620..443677a7a931335966cb72410b59a30bb5543ef2 100644 (file)
@@ -1091,7 +1091,7 @@ static void es1371_handle_midi(struct es1371_state *s)
        outb((s->midi.ocnt > 0) ? UCTRL_RXINTEN | UCTRL_ENA_TXINT : UCTRL_RXINTEN, s->io+ES1371_REG_UART_CONTROL);
 }
 
-static void es1371_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t es1371_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
         struct es1371_state *s = (struct es1371_state *)dev_id;
        unsigned int intsrc, sctl;
@@ -1099,7 +1099,7 @@ static void es1371_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* fastpath out, to ease interrupt sharing */
        intsrc = inl(s->io+ES1371_REG_STATUS);
        if (!(intsrc & 0x80000000))
-               return;
+               return IRQ_NONE;
        spin_lock(&s->lock);
        /* clear audio interrupts first */
        sctl = s->sctrl;
@@ -1114,6 +1114,7 @@ static void es1371_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        es1371_update_ptr(s);
        es1371_handle_midi(s);
        spin_unlock(&s->lock);
+       return IRQ_HANDLED;
 }
 
 /* --------------------------------------------------------------------- */
index 3fd801a8dac5cce44d81dc298d06ed25a774b6f1..ed6ecdf6cc40c9b0ef067e45d558c57a0facbf16 100644 (file)
@@ -1694,7 +1694,7 @@ static void solo1_handle_midi(struct solo1_state *s)
                wake_up(&s->midi.owait);
 }
 
-static void solo1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t solo1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
         struct solo1_state *s = (struct solo1_state *)dev_id;
        unsigned int intsrc;
@@ -1702,7 +1702,7 @@ static void solo1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* fastpath out, to ease interrupt sharing */
        intsrc = inb(s->iobase+7); /* get interrupt source(s) */
        if (!intsrc)
-               return;
+               return IRQ_NONE;
        (void)inb(s->sbbase+0xe);  /* clear interrupt */
        spin_lock(&s->lock);
        /* clear audio interrupts first */
@@ -1711,6 +1711,7 @@ static void solo1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        solo1_update_ptr(s);
        solo1_handle_midi(s);
        spin_unlock(&s->lock);
+       return IRQ_HANDLED;
 }
 
 static void solo1_midi_timer(unsigned long data)
index 53b70bce01180ac1376daa96a3373252b37d54ba..45b60fac1014b093f8e9bdd610de5a9a7ff3832c 100644 (file)
@@ -3,7 +3,7 @@
 
 /*     From gus_card.c */
 int gus_set_midi_irq(int num);
-void gusintr(int irq, void *dev_id, struct pt_regs * dummy);
+irqreturn_t gusintr(int irq, void *dev_id, struct pt_regs * dummy);
 
 /*     From gus_wave.c */
 int gus_wave_detect(int baseaddr);
index 4d308f21bae98f4042a00aed0e851b6e030a5c64..d7a56331ecaed974e7543a7979da3ea45e9daa76 100644 (file)
@@ -25,7 +25,7 @@
 #include "gus.h"
 #include "gus_hw.h"
 
-void            gusintr(int irq, void *dev_id, struct pt_regs *dummy);
+irqreturn_t gusintr(int irq, void *dev_id, struct pt_regs *dummy);
 
 int             gus_base = 0, gus_irq = 0, gus_dma = 0;
 int             gus_no_wave_dma = 0; 
@@ -119,10 +119,11 @@ static void __exit unload_gus(struct address_info *hw_config)
                sound_free_dma(hw_config->dma2);
 }
 
-void gusintr(int irq, void *dev_id, struct pt_regs *dummy)
+irqreturn_t gusintr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        unsigned char src;
        extern int gus_timer_enabled;
+       int handled = 0;
 
 #ifdef CONFIG_SOUND_GUSMAX
        if (have_gus_max) {
@@ -140,8 +141,8 @@ void gusintr(int irq, void *dev_id, struct pt_regs *dummy)
        while (1)
        {
                if (!(src = inb(u_IrqStatus)))
-                       return;
-
+                       break;
+               handled = 1;
                if (src & DMA_TC_IRQ)
                {
                        guswave_dma_irq();
@@ -160,6 +161,7 @@ void gusintr(int irq, void *dev_id, struct pt_regs *dummy)
                if (src & (WAVETABLE_IRQ | ENVELOPE_IRQ))
                        gus_voice_irq();
        }
+       return IRQ_RETVAL(handled);
 }
 
 /*
index 2428b2fcaf768478be63d387ec78a9636a5b94d1..722e481379674f681c1aa186ebe69cd23b5c763e 100644 (file)
@@ -508,7 +508,7 @@ static void step_envelope(int voice)
 {
        unsigned        vol, prev_vol, phase;
        unsigned char   rate;
-       long int        flags;
+       unsigned long flags;
 
        if (voices[voice].mode & WAVE_SUSTAIN_ON && voices[voice].env_phase == 2)
        {
@@ -593,7 +593,7 @@ static void start_release(int voice)
 static void gus_voice_fade(int voice)
 {
        int instr_no = sample_map[voice], is16bits;
-       long int flags;
+       unsigned long flags;
 
        spin_lock_irqsave(&gus_lock,flags);
        gus_select_voice(voice);
@@ -1511,7 +1511,7 @@ static int guswave_start_note2(int dev, int voice, int note_num, int volume)
 
 static int guswave_start_note(int dev, int voice, int note_num, int volume)
 {
-       long int flags;
+       unsigned long flags;
        int mode;
        int ret_val = 0;
 
index 3e1fc2572167d408d7a938437160190f57fb2580..3f10d2cfbab57e420747939ed593560e6b76311f 100644 (file)
@@ -1389,7 +1389,7 @@ static void i810_channel_interrupt(struct i810_card *card)
 #endif
 }
 
-static void i810_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t i810_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct i810_card *card = (struct i810_card *)dev_id;
        u32 status;
@@ -1401,7 +1401,7 @@ static void i810_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        if(!(status & INT_MASK)) 
        {
                spin_unlock(&card->lock);
-               return;  /* not for us */
+               return IRQ_NONE;  /* not for us */
        }
 
        if(status & (INT_PO|INT_PI|INT_MC))
@@ -1410,6 +1410,7 @@ static void i810_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* clear 'em */
        outl(status & INT_MASK, card->iobase + GLOB_STA);
        spin_unlock(&card->lock);
+       return IRQ_HANDLED;
 }
 
 /* in this loop, dmabuf.count signifies the amount of data that is
index 8a1189ee1a0556c336a9c639b48398dd8afbbd55..c88a3174f5f659e6f288eb989a66a6b5fe64c8b8 100644 (file)
@@ -727,7 +727,7 @@ static inline int prog_dmabuf_dac(struct it8172_state *s)
 
 /* hold spinlock for the following! */
 
-static void it8172_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t it8172_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
     struct it8172_state *s = (struct it8172_state *)dev_id;
     struct dmabuf* dac = &s->dma_dac;
@@ -741,8 +741,10 @@ static void it8172_interrupt(int irq, void *dev_id, struct pt_regs *regs)
     isc = inb(s->io+IT_AC_ISC);
 
     /* fastpath out, to ease interrupt sharing */
-    if (!(isc & (ISC_VCI | ISC_CCI | ISC_PCI)))
-       return;
+    if (!(isc & (ISC_VCI | ISC_CCI | ISC_PCI))) {
+       spin_unlock(&s->lock);
+       return IRQ_NONE;
+    }
 
     /* clear audio interrupts first */
     outb(isc | ISC_VCI | ISC_CCI | ISC_PCI, s->io+IT_AC_ISC);
@@ -819,6 +821,7 @@ static void it8172_interrupt(int irq, void *dev_id, struct pt_regs *regs)
     }
     
     spin_unlock(&s->lock);
+    return IRQ_HANDLED;
 }
 
 /* --------------------------------------------------------------------- */
index f21ea333471b8c44e0fa9ee8af11ab989b987fcb..9938514b06ffdd55d27ccd2386c1c09208f3df6b 100644 (file)
@@ -1631,7 +1631,7 @@ static inline unsigned get_dmac(struct ess_state *s)
  *     Meet Bob, the timer...
  */
 
-static void ess_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t ess_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
 static void stop_bob(struct ess_state *s)
 {
@@ -1900,7 +1900,7 @@ ess_update_ptr(struct ess_state *s)
        }
 }
 
-static void 
+static irqreturn_t
 ess_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
         struct ess_state *s;
@@ -1908,7 +1908,8 @@ ess_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        int i;
        u32 event;
 
-       if ( ! (event = inb(c->iobase+0x1A)) ) return;
+       if ( ! (event = inb(c->iobase+0x1A)) )
+               return IRQ_NONE;
 
        outw(inw(c->iobase+4)&1, c->iobase+4);
 
@@ -1972,6 +1973,7 @@ ess_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                ess_update_ptr(s);
                spin_unlock(&s->lock);
        }
+       return IRQ_HANDLED;
 }
 
 
index a6d8fea036f7b711ba175feea3fd41b559216459..29a31d0daa0482ebcf27f188e805466ec39563f8 100644 (file)
@@ -1232,7 +1232,7 @@ static void m3_update_ptr(struct m3_state *s)
     }
 }
 
-static void m3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t m3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
     struct m3_card *c = (struct m3_card *)dev_id;
     struct m3_state *s = &c->channels[0];
@@ -1240,13 +1240,14 @@ static void m3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
     status = inb(c->iobase+0x1A);
 
-    if(status == 0xff) return;
+    if(status == 0xff)
+       return IRQ_NONE;
    
     /* presumably acking the ints? */
     outw(status, c->iobase+0x1A); 
 
     if(c->in_suspend)
-        return;
+        return IRQ_HANDLED;
 
     /*
      * ack an assp int if its running
@@ -1269,6 +1270,7 @@ static void m3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
     /* XXX is this needed? */
     if(status & 0x40) 
         outb(0x40, c->iobase+0x1A);
+    return IRQ_HANDLED;
 }
 
 
index 789cf6fa04baddecef996ac5a741601cf323408d..9edcdc86fe66a97fcae46dbfdc361512d58d8af8 100644 (file)
@@ -102,9 +102,10 @@ static int maui_write(unsigned char data)
        return 0;
 }
 
-static void mauiintr(int irq, void *dev_id, struct pt_regs *dummy)
+static irqreturn_t mauiintr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        irq_ok = 1;
+       return IRQ_HANDLED;
 }
 
 static int __init download_code(void)
index b37bd204caa2ed4068aefb5f27aa8264fd61624b..c9b7043dae0ba3779301c4737c362474d424c910 100644 (file)
@@ -444,15 +444,17 @@ int intchk_mpu401(void *dev_id)
        return input_avail(devc);
 }
 
-void mpuintr(int irq, void *dev_id, struct pt_regs *dummy)
+irqreturn_t mpuintr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        struct mpu_config *devc;
        int dev = (int) dev_id;
+       int handled = 0;
 
        devc = &dev_conf[dev];
 
        if (input_avail(devc))
        {
+               handled = 1;
                if (devc->base != 0 && (devc->opened & OPEN_READ || devc->mode == MODE_SYNTH))
                        mpu401_input_loop(devc);
                else
@@ -461,6 +463,7 @@ void mpuintr(int irq, void *dev_id, struct pt_regs *dummy)
                        read_data(devc);
                }
        }
+       return IRQ_RETVAL(handled);
 }
 
 static int mpu401_open(int dev, int mode,
@@ -500,7 +503,7 @@ static int mpu401_open(int dev, int mode,
        {
                if (!try_module_get(coprocessor->owner)) {
                        mpu401_close(dev);
-                       return err;
+                       return -ENODEV;
                }
 
                if ((err = coprocessor->open(coprocessor->devc, COPR_MIDI)) < 0)
@@ -839,7 +842,7 @@ static int mpu_synth_open(int dev, int mode)
        coprocessor = midi_devs[midi_dev]->coproc;
        if (coprocessor) {
                if (!try_module_get(coprocessor->owner))
-                       return err;
+                       return -ENODEV;
 
                if ((err = coprocessor->open(coprocessor->devc, COPR_MIDI)) < 0)
                {
index 89683909b0d43228ba2743ef7b39d8238e5f2f5f..43ff5430cd4507f162f6347b835e6fbf0e0830e6 100644 (file)
@@ -3,7 +3,7 @@
 int probe_uart401 (struct address_info *hw_config, struct module *owner);
 void unload_uart401 (struct address_info *hw_config);
 
-void uart401intr (int irq, void *dev_id, struct pt_regs * dummy);
+irqreturn_t uart401intr (int irq, void *dev_id, struct pt_regs * dummy);
 
 /*     From mpu401.c */
 int probe_mpu401(struct address_info *hw_config);
@@ -11,4 +11,4 @@ int attach_mpu401(struct address_info * hw_config, struct module *owner);
 void unload_mpu401(struct address_info *hw_info);
 
 int intchk_mpu401(void *dev_id);
-void mpuintr(int irq, void *dev_id, struct pt_regs * dummy);
+irqreturn_t mpuintr(int irq, void *dev_id, struct pt_regs * dummy);
index 4cca7db8f4ee737f6d9280f2e3cc859cc06ada7d..760a617ec17ab544a6e78420e72bd50041e33406 100644 (file)
@@ -45,6 +45,7 @@
 #include <linux/types.h>
 #include <linux/delay.h>
 #include <linux/init.h>
+#include <linux/interrupt.h>
 #include <linux/smp_lock.h>
 #include <asm/irq.h>
 #include <asm/io.h>
@@ -1061,7 +1062,7 @@ static __inline__ void eval_dsp_msg(register WORD wMessage)
        }
 }
 
-static void intr(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t intr(int irq, void *dev_id, struct pt_regs *regs)
 {
        /* Send ack to DSP */
        inb(dev.io + HP_RXL);
@@ -1077,6 +1078,7 @@ static void intr(int irq, void *dev_id, struct pt_regs *regs)
                else
                        isa_writew(wTmp, dev.DSPQ + JQS_wHead);
        }
+       return IRQ_HANDLED;
 }
 
 static struct file_operations dev_fileops = {
index 7ebf6781163147b2c4a6f6b317394a5e8d41e8f3..d11cde9b8860de36eb7360385006cff00f1bf824 100644 (file)
@@ -813,7 +813,7 @@ static inline void vrc5477_ac97_dac_interrupt(struct vrc5477_ac97_state *s)
                wake_up_interruptible(&dac->wait);
 }
 
-static void vrc5477_ac97_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t vrc5477_ac97_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct vrc5477_ac97_state *s = (struct vrc5477_ac97_state *)dev_id;
        u32 irqStatus;
@@ -851,6 +851,7 @@ static void vrc5477_ac97_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        }
 
        spin_unlock(&s->lock);
+       return IRQ_HANDLED;
 }
 
 /* --------------------------------------------------------------------- */
index a8af512bcb3cef3291c61bc57e4078f90a197e6a..583004ef0aa1737f70946a9acbd60c199ba6c435 100644 (file)
@@ -2,6 +2,8 @@
 #define _NM256_H_
 
 #include <linux/spinlock.h>
+#include <linux/interrupt.h>
+
 #include "ac97.h"
 
 /* The revisions that we currently handle.  */
@@ -113,7 +115,7 @@ struct nm256_info
     int has_irq;
 
     /* The card interrupt service routine. */
-    void (*introutine) (int, void *, struct pt_regs *);
+    irqreturn_t (*introutine) (int, void *, struct pt_regs *);
 
     /* Current audio config, cached. */
     struct sinfo {
index 4fe4fda275fcc394fab9b5f62ab94373e92cfc0f..1d8ec153ed10f6efabd896ea03ccd126f51e9809 100644 (file)
@@ -44,8 +44,8 @@ static struct audio_driver nm256_audio_driver;
 
 static int nm256_grabInterrupt (struct nm256_info *card);
 static int nm256_releaseInterrupt (struct nm256_info *card);
-static void nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy);
-static void nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy);
+static irqreturn_t nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy);
+static irqreturn_t nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy);
 static int handle_pm_event (struct pm_dev *dev, pm_request_t rqst, void *data);
 
 /* These belong in linux/pci.h. */
@@ -528,16 +528,17 @@ nm256_initHw (struct nm256_info *card)
  * I suppose...yucky bleah.)
  */
 
-static void
+static irqreturn_t
 nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
 {
     struct nm256_info *card = (struct nm256_info *)dev_id;
     u16 status;
     static int badintrcount = 0;
+    int handled = 0;
 
     if ((card == NULL) || (card->magsig != NM_MAGIC_SIG)) {
        printk (KERN_ERR "NM256: Bad card pointer\n");
-       return;
+       return IRQ_NONE;
     }
 
     status = nm256_readPort16 (card, 2, NM_INT_REG);
@@ -558,13 +559,14 @@ nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
             * inserted a PCMCIA card and someone's spamming us with IRQ 9s.
             */
 
+           handled = 1;
            if (card->playing)
                stopPlay (card);
            if (card->recording)
                stopRecord (card);
            badintrcount = 0;
        }
-       return;
+       return IRQ_RETVAL(handled);
     }
 
     badintrcount = 0;
@@ -572,6 +574,7 @@ nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
     /* Rather boring; check for individual interrupts and process them. */
 
     if (status & NM_PLAYBACK_INT) {
+       handled = 1;
        status &= ~NM_PLAYBACK_INT;
        NM_ACK_INT (card, NM_PLAYBACK_INT);
 
@@ -580,6 +583,7 @@ nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
     }
 
     if (status & NM_RECORD_INT) {
+       handled = 1;
        status &= ~NM_RECORD_INT;
        NM_ACK_INT (card, NM_RECORD_INT);
 
@@ -590,6 +594,7 @@ nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
     if (status & NM_MISC_INT_1) {
        u8 cbyte;
 
+       handled = 1;
        status &= ~NM_MISC_INT_1;
        printk (KERN_ERR "NM256: Got misc interrupt #1\n");
        NM_ACK_INT (card, NM_MISC_INT_1);
@@ -601,6 +606,7 @@ nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
     if (status & NM_MISC_INT_2) {
        u8 cbyte;
 
+       handled = 1;
        status &= ~NM_MISC_INT_2;
        printk (KERN_ERR "NM256: Got misc interrupt #2\n");
        NM_ACK_INT (card, NM_MISC_INT_2);
@@ -610,11 +616,13 @@ nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
 
     /* Unknown interrupt. */
     if (status) {
+       handled = 1;
        printk (KERN_ERR "NM256: Fire in the hole! Unknown status 0x%x\n",
                status);
        /* Pray. */
        NM_ACK_INT (card, status);
     }
+    return IRQ_RETVAL(handled);
 }
 
 /*
@@ -623,16 +631,17 @@ nm256_interrupt (int irq, void *dev_id, struct pt_regs *dummy)
  * routine.
  */
 
-static void
+static irqreturn_t
 nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy)
 {
     struct nm256_info *card = (struct nm256_info *)dev_id;
     u32 status;
     static int badintrcount = 0;
+    int handled = 0;
 
     if ((card == NULL) || (card->magsig != NM_MAGIC_SIG)) {
        printk (KERN_ERR "NM256: Bad card pointer\n");
-       return;
+       return IRQ_NONE;
     }
 
     status = nm256_readPort32 (card, 2, NM_INT_REG);
@@ -655,13 +664,14 @@ nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy)
             * IRQ 9s.
             */
 
+           handled = 1;
            if (card->playing)
                stopPlay (card);
            if (card->recording)
                stopRecord (card);
            badintrcount = 0;
        }
-       return;
+       return IRQ_RETVAL(handled);
     }
 
     badintrcount = 0;
@@ -669,6 +679,7 @@ nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy)
     /* Rather boring; check for individual interrupts and process them. */
 
     if (status & NM2_PLAYBACK_INT) {
+       handled = 1;
        status &= ~NM2_PLAYBACK_INT;
        NM2_ACK_INT (card, NM2_PLAYBACK_INT);
 
@@ -677,6 +688,7 @@ nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy)
     }
 
     if (status & NM2_RECORD_INT) {
+       handled = 1;
        status &= ~NM2_RECORD_INT;
        NM2_ACK_INT (card, NM2_RECORD_INT);
 
@@ -687,6 +699,7 @@ nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy)
     if (status & NM2_MISC_INT_1) {
        u8 cbyte;
 
+       handled = 1;
        status &= ~NM2_MISC_INT_1;
        printk (KERN_ERR "NM256: Got misc interrupt #1\n");
        NM2_ACK_INT (card, NM2_MISC_INT_1);
@@ -697,6 +710,7 @@ nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy)
     if (status & NM2_MISC_INT_2) {
        u8 cbyte;
 
+       handled = 1;
        status &= ~NM2_MISC_INT_2;
        printk (KERN_ERR "NM256: Got misc interrupt #2\n");
        NM2_ACK_INT (card, NM2_MISC_INT_2);
@@ -706,11 +720,13 @@ nm256_interrupt_zx (int irq, void *dev_id, struct pt_regs *dummy)
 
     /* Unknown interrupt. */
     if (status) {
+       handled = 1;
        printk (KERN_ERR "NM256: Fire in the hole! Unknown status 0x%x\n",
                status);
        /* Pray. */
        NM2_ACK_INT (card, status);
     }
+    return IRQ_RETVAL(handled);
 }
 
 /* 
index 27bb3ae9088ab2013bcafcdd26a93700b45baa7d..96334e418bf14c3c04fb64883bde3cf7353215c2 100644 (file)
@@ -89,7 +89,7 @@ void pas_write(unsigned char data, int ioaddr)
 
 /******************* Begin of the Interrupt Handler ********************/
 
-void pasintr(int irq, void *dev_id, struct pt_regs *dummy)
+static irqreturn_t pasintr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        int             status;
 
@@ -106,6 +106,7 @@ void pasintr(int irq, void *dev_id, struct pt_regs *dummy)
                  pas_midi_interrupt();
                  status &= ~0x10;
        }
+       return IRQ_HANDLED;
 }
 
 int pas_set_intr(int mask)
index 1be0232413e3d42ecc726985d46b37cbac4a9bf5..f88c3d4a0043fb45f91282268288c7ca2e8862fe 100644 (file)
@@ -152,7 +152,7 @@ static int  pss_enable_joystick = 0;/* Parameter for enabling the joystick */
 
 static void pss_write(pss_confdata *devc, int data)
 {
-       int i, limit;
+       unsigned long i, limit;
 
        limit = jiffies + HZ/10;        /* The timeout is 0.1 seconds */
        /*
@@ -305,7 +305,8 @@ static int pss_get_dspword(pss_confdata * devc, unsigned short *word)
 
 static int pss_download_boot(pss_confdata * devc, unsigned char *block, int size, int flags)
 {
-       int i, limit, val, count;
+       int i, val, count;
+       unsigned long limit;
 
        if (flags & CPF_FIRST)
        {
index e8d99ad90efe6f3465ee7ccf3d8d975e62df8a80..f8cd52e234c2a4b1bd1dd77ad3d14e0f0d4148bb 100644 (file)
@@ -542,7 +542,7 @@ static inline int rme96xx_spdif_sample_rate (rme96xx_info *s, int *spdifrate)
 
 inline int rme96xx_gethwptr(rme96xx_info* s,int exact)
 {
-       long flags;
+       unsigned long flags;
        if (exact) {
                unsigned int hwp;
 /* the hwptr seems to be rather unreliable :(, so we don't use it */
@@ -587,7 +587,7 @@ static void rme96xx_clearbufs(struct dmabuf* dma)
 static int rme96xx_startcard(rme96xx_info *s,int stop)
 {
        int i;
-       long flags;
+       unsigned long flags;
 
        COMM       ("startcard");
        if(s->control_register & RME96xx_IE){
@@ -760,7 +760,7 @@ inline int rme96xx_copytouser(struct dmabuf* dma,const char* buffer,int count,in
 }
 
 
-static void rme96xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t rme96xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        int i;
        rme96xx_info *s = (rme96xx_info *)dev_id;
@@ -770,7 +770,7 @@ static void rme96xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
        status = readl(s->iobase + RME96xx_status_register);
        if (!(status & RME96xx_IRQ)) {
-               return;
+               return IRQ_NONE;
        }
 
        spin_lock_irqsave(&s->lock,flags);
@@ -785,6 +785,7 @@ static void rme96xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                        wake_up(&(db->wait));           
        }  
        spin_unlock_irqrestore(&s->lock,flags);
+       return IRQ_HANDLED;
 }
 
 
index fe8f782fa4e9744d701510c7cbb230809cdf7102..3639a53c748f409c7bf89dc97507fdd452a664b0 100644 (file)
@@ -201,7 +201,7 @@ static void pci_intr(sb_devc *devc)
                sb_intr(devc);
 }
 
-static void sbintr(int irq, void *dev_id, struct pt_regs *dummy)
+static irqreturn_t sbintr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        sb_devc *devc = dev_id;
 
@@ -219,6 +219,7 @@ static void sbintr(int irq, void *dev_id, struct pt_regs *dummy)
                sb_intr (devc);
                break;
        }
+       return IRQ_HANDLED;
 }
 
 int sb_dsp_reset(sb_devc * devc)
index 065398b842ca6499ca33390f6c875e766b600cb6..0ba7aee5028c78ea51d27e0d716dc918cd53f5df 100644 (file)
@@ -899,7 +899,7 @@ static void sv_handle_midi(struct sv_state *s)
                wake_up(&s->midi.owait);
 }
 
-static void sv_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t sv_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
         struct sv_state *s = (struct sv_state *)dev_id;
        unsigned int intsrc;
@@ -907,11 +907,12 @@ static void sv_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* fastpath out, to ease interrupt sharing */
        intsrc = inb(s->ioenh + SV_CODEC_STATUS);
        if (!(intsrc & (SV_CSTAT_DMAA | SV_CSTAT_DMAC | SV_CSTAT_MIDI)))
-               return;
+               return IRQ_NONE;
        spin_lock(&s->lock);
        sv_update_ptr(s);
        sv_handle_midi(s);
        spin_unlock(&s->lock);
+       return IRQ_HANDLED;
 }
 
 static void sv_midi_timer(unsigned long data)
index fa31e3352ee8427d9533ac86cdb6a906920dc84e..d608cab2e3bc69ed67388456b8d4ca77b1703c57 100644 (file)
@@ -1728,7 +1728,7 @@ static void cyber_address_interrupt(struct trident_card *card)
        }
 }
 
-static void trident_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t trident_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct trident_card *card = (struct trident_card *)dev_id;
        u32 event;
@@ -1755,13 +1755,14 @@ static void trident_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                event = inl(TRID_REG(card, T4D_MISCINT));
                outl(event | (ST_TARGET_REACHED | MIXER_OVERFLOW | MIXER_UNDERFLOW), TRID_REG(card, T4D_MISCINT));
                spin_unlock(&card->lock);
-               return;
+               return IRQ_HANDLED;
        }
 
        /* manually clear interrupt status, bad hardware design, blame T^2 */
        outl((ST_TARGET_REACHED | MIXER_OVERFLOW | MIXER_UNDERFLOW),
             TRID_REG(card, T4D_MISCINT));
        spin_unlock(&card->lock);
+       return IRQ_HANDLED;
 }
 
 /* in this loop, dmabuf.count signifies the amount of data that is waiting to be copied to
index 8b354ec0e74187c2b9d8e44bf272319377bd633d..aaed8616834ff81fdde5f441b47bd30b5af02da8 100644 (file)
@@ -96,18 +96,19 @@ static void uart401_input_loop(uart401_devc * devc)
                printk(KERN_WARNING "Too much work in interrupt on uart401 (0x%X). UART jabbering ??\n", devc->base);
 }
 
-void uart401intr(int irq, void *dev_id, struct pt_regs *dummy)
+irqreturn_t uart401intr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        uart401_devc *devc = dev_id;
 
        if (devc == NULL)
        {
                printk(KERN_ERR "uart401: bad devc\n");
-               return;
+               return IRQ_NONE;
        }
 
        if (input_avail(devc))
                uart401_input_loop(devc);
+       return IRQ_HANDLED;
 }
 
 static int
index f7fb117eb61447844683cec1d6ee3f2d0bdeae85..3c004ab762c47d2092df2240bb775ca012cfc24d 100644 (file)
@@ -105,10 +105,11 @@ static void uart6850_input_loop(void)
        }
 }
 
-void m6850intr(int irq, void *dev_id, struct pt_regs *dummy)
+static irqreturn_t m6850intr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        if (input_avail())
                uart6850_input_loop();
+       return IRQ_HANDLED;
 }
 
 /*
index 24199a78cf25032e14a782587de2d21b001b501b..aea7c23e46c96d545df704861b4c851b0088204c 100644 (file)
@@ -1694,10 +1694,11 @@ static void via_intr_channel (struct via_channel *chan)
 }
 
 
-static void via_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t via_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        struct via_info *card = dev_id;
        u32 status32;
+       int handled = 0;
 
        /* to minimize interrupt sharing costs, we use the SGD status
         * shadow register to check the status of all inputs and
@@ -1708,10 +1709,12 @@ static void via_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        if (!(status32 & VIA_INTR_MASK))
         {
 #ifdef CONFIG_MIDI_VIA82CXXX
-                if (card->midi_devc)
+                if (card->midi_devc) {
                        uart401intr(irq, card->midi_devc, regs);
+                       handled = 1;
+               }
 #endif
-               return;
+               goto out;
        }
        DPRINTK ("intr, status32 == 0x%08X\n", status32);
 
@@ -1720,14 +1723,21 @@ static void via_interrupt(int irq, void *dev_id, struct pt_regs *regs)
         */
        spin_lock (&card->lock);
 
-       if (status32 & VIA_INTR_OUT)
+       if (status32 & VIA_INTR_OUT) {
+               handled = 1;
                via_intr_channel (&card->ch_out);
-       if (status32 & VIA_INTR_IN)
+       }
+       if (status32 & VIA_INTR_IN) {
+               handled = 1;
                via_intr_channel (&card->ch_in);
-       if (status32 & VIA_INTR_FM)
+       }
+       if (status32 & VIA_INTR_FM) {
+               handled = 1;
                via_intr_channel (&card->ch_fm);
-
+       }
        spin_unlock (&card->lock);
+out:
+       return IRQ_RETVAL(handled);
 }
 
 
index b3e70ad1c4cdd81ad5ea4d3feebb1e0e3dd4f835..4fbcebf1458ee59597960f9c49ded35fd630e9c8 100644 (file)
@@ -37,7 +37,7 @@ extern unsigned long vidc_fill_2x16_s(unsigned long ibuf, unsigned long iend,
  * DMA Interrupt handler
  */
 
-extern void vidc_sound_dma_irq(int irqnr, void *ref, struct pt_regs *regs);
+extern irqreturn_t vidc_sound_dma_irq(int irqnr, void *ref, struct pt_regs *regs);
 
 /*
  * Filler routine pointer
index 28e57737330e985e85bf9987ab73830d7afa981b..e8030cf0e3c8d05c62b7cca2148994b68fb90bc2 100644 (file)
@@ -133,6 +133,10 @@ ENTRY(vidc_clear)
  *  ip = corrupted
  */
 
+%%%%%%%%%%%%%%%%%%%
+fixme!  This funtion needs to return IRQ_HANDLED
+%%%%%%%%%%%%%%%%%%%
+
 ENTRY(vidc_sound_dma_irq)
                stmfd   sp!, {r4 - r8, lr}
                ldr     r8, =dma_start
index f66c96c8746133658a58252e7e0227d3210d3dd3..0d4429f1c1db8cb374c2ab025f55e1a596f61670 100644 (file)
@@ -2236,7 +2236,7 @@ static void vwsnd_audio_write_intr(vwsnd_dev_t *devc, unsigned int status)
                pcm_output(devc, underflown, 0);
 }
 
-static void vwsnd_audio_intr(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t vwsnd_audio_intr(int irq, void *dev_id, struct pt_regs *regs)
 {
        vwsnd_dev_t *devc = (vwsnd_dev_t *) dev_id;
        unsigned int status;
@@ -2246,6 +2246,7 @@ static void vwsnd_audio_intr(int irq, void *dev_id, struct pt_regs *regs)
        status = li_get_clear_intr_status(&devc->lith);
        vwsnd_audio_read_intr(devc, status);
        vwsnd_audio_write_intr(devc, status);
+       return IRQ_HANDLED;
 }
 
 static ssize_t vwsnd_audio_do_read(struct file *file,
index c38833215effbda091dcda2c927d98fbc64e0211..aa2f1d9607e01972fea83c6c257d16caa6c7e51b 100644 (file)
@@ -833,7 +833,7 @@ static struct audio_driver waveartist_audio_driver = {
 };
 
 
-static void
+static irqreturn_t
 waveartist_intr(int irq, void *dev_id, struct pt_regs *regs)
 {
        wavnc_info *devc = (wavnc_info *)dev_id;
@@ -872,6 +872,7 @@ waveartist_intr(int irq, void *dev_id, struct pt_regs *regs)
                // We do not use SB mode natively...
                printk(KERN_WARNING "waveartist: Unexpected SB interrupt...\n");
        spin_unlock(&waveartist_lock);
+       return IRQ_HANDLED;
 }
 
 /* -------------------------------------------------------------------------
index b79a57cfd48f3016bf394e0bf8c3355d44b6c7c0..a79d87cac85d30e4b68411967772530b829cfbba 100644 (file)
@@ -2123,8 +2123,8 @@ static void __exit unload_wavefront (struct address_info *hw_config)
 /* WaveFront: Linux modular sound kernel installation interface        */
 /***********************************************************************/
 
-void
-wavefrontintr (int irq, void *dev_id, struct pt_regs *dummy)
+static irqreturn_t
+wavefrontintr(int irq, void *dev_id, struct pt_regs *dummy)
 {
        struct wf_config *hw = dev_id;
 
@@ -2149,12 +2149,13 @@ wavefrontintr (int irq, void *dev_id, struct pt_regs *dummy)
        */
 
        if ((wavefront_status() & (STAT_INTR_READ|STAT_INTR_WRITE)) == 0) {
-               return;
+               return IRQ_NONE;
        }
 
        hw->irq_ok = 1;
        hw->irq_cnt++;
        wake_up_interruptible (&hw->interrupt_sleeper);
+       return IRQ_HANDLED;
 }
 
 /* STATUS REGISTER 
index 2a005d3bb3603fdc6784e314e15bb82f8c54ad94..e7daf0215c4466db62f5a5579438b3e38e41dfaf 100644 (file)
@@ -354,8 +354,8 @@ wf_mpu_input_scanner (int devno, int synthdev, unsigned char midic)
        return 1;
 }
 
-void
-wf_mpuintr (int irq, void *dev_id, struct pt_regs *dummy)
+static irqreturn_t
+wf_mpuintr(int irq, void *dev_id, struct pt_regs *dummy)
 
 {
        struct wf_mpu_config *physical_dev = dev_id;
@@ -364,10 +364,11 @@ wf_mpuintr (int irq, void *dev_id, struct pt_regs *dummy)
        int n;
 
        if (!input_avail()) { /* not for us */
-               return;
+               return IRQ_NONE;
        }
 
-       if (mi->m_busy) return;
+       if (mi->m_busy)
+               return IRQ_HANDLED;
        spin_lock(&lock);
        mi->m_busy = 1;
 
@@ -410,6 +411,7 @@ wf_mpuintr (int irq, void *dev_id, struct pt_regs *dummy)
 
        mi->m_busy = 0;
        spin_unlock(&lock);
+       return IRQ_HANDLED;
 }
 
 static int
index c3716ea2181c376cb874debea83797445fc642b4..66eedb95681e80d2043d6a01aca1594d4be0890d 100644 (file)
@@ -1016,7 +1016,7 @@ static int ymf_capture_prepare(struct ymf_state *state)
        return 0;
 }
 
-void ymf_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t ymf_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        ymfpci_t *codec = dev_id;
        u32 status, nvoice, mode;
@@ -1050,6 +1050,7 @@ void ymf_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                /* timer handler */
                ymfpci_writel(codec, YDSXGR_INTFLAG, ~0);
        }
+       return IRQ_HANDLED;
 }
 
 static void ymf_pcm_free_substream(struct ymf_pcm *ypcm)
index b9c340b45c29ab152ff6ed23e57e7b1d48b4e0c0..691a0711f01da60ef31c19800f4600d605aea82e 100644 (file)
@@ -1032,15 +1032,16 @@ static void snd_ali_interrupt(ali_t * codec)
 }
 
 
-static void snd_ali_card_interrupt(int irq,
+static irqreturn_t snd_ali_card_interrupt(int irq,
                                   void *dev_id,
                                   struct pt_regs *regs)
 {
        ali_t   *codec = snd_magic_cast(ali_t, dev_id, return);
 
        if (codec == NULL)
-               return;
+               return IRQ_NONE;
        snd_ali_interrupt(codec);
+       return IRQ_HANDLED;
 }
 
 
index ca0a7593f0eeaaf70ba09b0c0b6babc919d35459..4621df9e171e676a3926a10304bf2378182bf314 100644 (file)
@@ -356,7 +356,7 @@ static snd_pcm_uframes_t snd_als4000_playback_pointer(snd_pcm_substream_t * subs
        return bytes_to_frames( substream->runtime, result );
 }
 
-static void snd_als4000_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_als4000_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        sb_t *chip = snd_magic_cast(sb_t, dev_id, return);
        unsigned long flags;
@@ -387,6 +387,7 @@ static void snd_als4000_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                inb(chip->mpu_port);
        if (sb_status & 0x20)
                inb(SBP(chip, RESET));
+       return IRQ_HANDLED;
 }
 
 /*****************************************************************/
index bbf17e0a3f7111128dca66b1d3cfcd15e21579f3..ab02dae115eab04163e102d981a95dc6fa511c2e 100644 (file)
@@ -1640,7 +1640,7 @@ static int snd_cmipci_capture_spdif_hw_free(snd_pcm_substream_t *subs)
 /*
  * interrupt handler
  */
-static void snd_cmipci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_cmipci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        cmipci_t *cm = snd_magic_cast(cmipci_t, dev_id, return);
        unsigned int status, mask = 0;
@@ -1648,7 +1648,7 @@ static void snd_cmipci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* fastpath out, to ease interrupt sharing */
        status = snd_cmipci_read(cm, CM_REG_INT_STATUS);
        if (!(status & CM_INTR))
-               return;
+               return IRQ_NONE;
 
        /* acknowledge interrupt */
        spin_lock(&cm->reg_lock);
@@ -1669,6 +1669,7 @@ static void snd_cmipci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                if ((status & CM_CHINT1) && cm->channel[1].running)
                        snd_pcm_period_elapsed(cm->channel[1].substream);
        }
+       return IRQ_HANDLED;
 }
 
 /*
index 6b3be4891d57308b3278533b2d6dcd01a20d66cf..edda17920ab11f1d1c4ba447ab35aeaa857e1eb0 100644 (file)
@@ -511,7 +511,7 @@ struct snd_cs4281 {
 
 };
 
-static void snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
 static struct pci_device_id snd_cs4281_ids[] __devinitdata = {
        { 0x1013, 0x6005, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* CS4281 */
@@ -1883,18 +1883,18 @@ static int __devinit snd_cs4281_midi(cs4281_t * chip, int device, snd_rawmidi_t
  *  Interrupt handler
  */
 
-static void snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        cs4281_t *chip = snd_magic_cast(cs4281_t, dev_id, return);
        unsigned int status, dma, val;
        cs4281_dma_t *cdma;
 
        if (chip == NULL)
-               return;
+               return IRQ_NONE;
        status = snd_cs4281_peekBA0(chip, BA0_HISR);
        if ((status & 0x7fffffff) == 0) {
                snd_cs4281_pokeBA0(chip, BA0_HICR, BA0_HICR_EOI);
-               return;
+               return IRQ_HANDLED;
        }
 
        if (status & (BA0_HISR_DMA(0)|BA0_HISR_DMA(1)|BA0_HISR_DMA(2)|BA0_HISR_DMA(3))) {
@@ -1949,6 +1949,7 @@ static void snd_cs4281_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
        /* EOI to the PCI part... reenables interrupts */
        snd_cs4281_pokeBA0(chip, BA0_HICR, BA0_HICR_EOI);
+       return IRQ_HANDLED;
 }
 
 
index 6f1a5618bc9bccc37caaf718fc89fee6f81b4410..19fc0171bf28d9819ed8e1489a250f754ac77f16 100644 (file)
@@ -1217,7 +1217,7 @@ static int snd_cs46xx_capture_prepare(snd_pcm_substream_t * substream)
        return 0;
 }
 
-static void snd_cs46xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_cs46xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        cs46xx_t *chip = snd_magic_cast(cs46xx_t, dev_id, return);
        u32 status1;
@@ -1234,7 +1234,7 @@ static void snd_cs46xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        status1 = snd_cs46xx_peekBA0(chip, BA0_HISR);
        if ((status1 & 0x7fffffff) == 0) {
                snd_cs46xx_pokeBA0(chip, BA0_HICR, HICR_CHGM | HICR_IEV);
-               return;
+               return IRQ_HANDLED;
        }
 
 #ifdef CONFIG_SND_CS46XX_NEW_DSP
@@ -1305,6 +1305,7 @@ static void snd_cs46xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
         *  EOI to the PCI part....reenables interrupts
         */
        snd_cs46xx_pokeBA0(chip, BA0_HICR, HICR_CHGM | HICR_IEV);
+       return IRQ_HANDLED;
 }
 
 static snd_pcm_hardware_t snd_cs46xx_playback =
index 00c5b0798041df1eb535432bed417dfd2cb1beaa..7250c1374b02ca6cf22dc3dc290daa14fa0a950b 100644 (file)
 #include <sound/core.h>
 #include <sound/emu10k1.h>
 
-void snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        emu10k1_t *emu = snd_magic_cast(emu10k1_t, dev_id, return);
        unsigned int status;
+       int handled = 0;
 
        while ((status = inl(emu->port + IPR)) != 0) {
                // printk("irq - status = 0x%x\n", status);
+               handled = 1;
                if (status & IPR_PCIERROR) {
                        snd_printk("interrupt: PCI error\n");
                        snd_emu10k1_intr_disable(emu, INTE_PCIERRORENABLE);
@@ -145,4 +147,5 @@ void snd_emu10k1_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                        outl(IPR_FXDSP, emu->port + IPR);
                }
        }
+       return IRQ_RETVAL(handled);
 }
index 5cf49ce8db431606a54c87a7c9a57ec8406311a6..dcbc81e189d2d50833877e0743f176ac5e60e72e 100644 (file)
@@ -249,7 +249,7 @@ struct _snd_es1938 {
 #endif
 };
 
-static void snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
 static struct pci_device_id snd_es1938_ids[] __devinitdata = {
         { 0x125d, 0x1969, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, },   /* Solo-1 */
@@ -1490,10 +1490,11 @@ static int __devinit snd_es1938_create(snd_card_t * card,
 /* --------------------------------------------------------------------
  * Interrupt handler
  * -------------------------------------------------------------------- */
-static void snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        es1938_t *chip = snd_magic_cast(es1938_t, dev_id, return);
        unsigned char status, audiostatus;
+       int handled = 0;
 
        status = inb(SLIO_REG(chip, IRQCONTROL));
 #if 0
@@ -1509,6 +1510,7 @@ static void snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                printk("Es1938debug - AUDIO channel 1 DMAC DMA status: 0x%x\n", inl(SLDM_REG(chip, DMASTATUS)));
 #endif
                /* clear irq */
+               handled = 1;
                audiostatus = inb(SLSB_REG(chip, STATUS));
                if (chip->active & ADC1)
                        snd_pcm_period_elapsed(chip->capture_substream);
@@ -1525,6 +1527,7 @@ static void snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
 #endif
                /* clear irq */
+               handled = 1;
                snd_es1938_mixer_bits(chip, ESSSB_IREG_AUDIO2CONTROL2, 0x80, 0);
                if (chip->active & DAC2)
                        snd_pcm_period_elapsed(chip->playback1_substream);
@@ -1533,6 +1536,7 @@ static void snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* Hardware volume */
        if (status & 0x40) {
                int split = snd_es1938_mixer_read(chip, 0x64) & 0x80;
+               handled = 1;
                snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->hw_switch->id);
                snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &chip->hw_volume->id);
                if (!split) {
@@ -1546,9 +1550,12 @@ static void snd_es1938_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* MPU401 */
        if (status & 0x80) {
                // snd_es1938_mixer_bits(chip, ESSSB_IREG_MPU401CONTROL, 0x40, 0); /* ack? */
-               if (chip->rmidi)
+               if (chip->rmidi) {
+                       handled = 1;
                        snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs);
+               }
        }
+       return IRQ_RETVAL(handled);
 }
 
 #define ES1938_DMA_SIZE 64
index 885e1cc21d5ab5dd8f75ff8155925c4539abe2a6..9ae5c1953293a3f2ce8977b8984635b279678956 100644 (file)
@@ -600,7 +600,7 @@ struct snd_es1968 {
 #endif
 };
 
-static void snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 
 static struct pci_device_id snd_es1968_ids[] __devinitdata = {
        /* Maestro 1 */
@@ -2009,13 +2009,13 @@ static void es1968_update_hw_volume(unsigned long private_data)
 /*
  * interrupt handler
  */
-static void snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        es1968_t *chip = snd_magic_cast(es1968_t, dev_id, return);
        u32 event;
 
        if (!(event = inb(chip->io_port + 0x1A)))
-               return;
+               return IRQ_NONE;
 
        outw(inw(chip->io_port + 4) & 1, chip->io_port + 4);
 
@@ -2041,6 +2041,7 @@ static void snd_es1968_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                }
                spin_unlock(&chip->substream_lock);
        }
+       return IRQ_HANDLED;
 }
 
 /*
index 948aa8793be81b90fc589e5d959c929da1abb2ca..c0b0287a63abcd79c713a41a07a1419aae70a438 100644 (file)
@@ -481,7 +481,7 @@ static snd_pcm_uframes_t snd_fm801_capture_pointer(snd_pcm_substream_t * substre
        return bytes_to_frames(substream->runtime, ptr);
 }
 
-static void snd_fm801_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_fm801_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        fm801_t *chip = snd_magic_cast(fm801_t, dev_id, return);
        unsigned short status;
@@ -490,7 +490,7 @@ static void snd_fm801_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        status = inw(FM801_REG(chip, IRQ_STATUS));
        status &= FM801_IRQ_PLAYBACK|FM801_IRQ_CAPTURE|FM801_IRQ_MPU|FM801_IRQ_VOLUME;
        if (! status)
-               return;
+               return IRQ_NONE;
        /* ack first */
        outw(status, FM801_REG(chip, IRQ_STATUS));
        if (chip->pcm && (status & FM801_IRQ_PLAYBACK) && chip->playback_substream) {
@@ -525,6 +525,7 @@ static void snd_fm801_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs);
        if (status & FM801_IRQ_VOLUME)
                ;/* TODO */
+       return IRQ_HANDLED;
 }
 
 static snd_pcm_hardware_t snd_fm801_playback =
index 2f1a5951eb1530b6c6ef34bc939ce2e408a06a06..1e085b142770a445e91fa6b785d06e7ff2a4a31e 100644 (file)
@@ -398,15 +398,17 @@ int __devinit snd_ice1712_init_cs8427(ice1712_t *ice, int addr)
  *  Interrupt handler
  */
 
-static void snd_ice1712_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_ice1712_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        ice1712_t *ice = snd_magic_cast(ice1712_t, dev_id, return);
        unsigned char status;
+       int handled = 0;
 
        while (1) {
                status = inb(ICEREG(ice, IRQSTAT));
                if (status == 0)
                        break;
+               handled = 1;
                if (status & ICE1712_IRQ_MPU1) {
                        if (ice->rmidi[0])
                                snd_mpu401_uart_interrupt(irq, ice->rmidi[0]->private_data, regs);
@@ -462,6 +464,7 @@ static void snd_ice1712_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                        outb(ICE1712_IRQ_CONPBK, ICEREG(ice, IRQSTAT));
                }
        }
+       return IRQ_RETVAL(handled);
 }
 
 
index 4e8e6f501033fcdd0416d587c8b625e3cbda1121..dc73d2f7bc46e6b6da733cf11918d87fa65e5309 100644 (file)
@@ -194,16 +194,18 @@ static unsigned int snd_vt1724_get_gpio_data(ice1712_t *ice)
  *  Interrupt handler
  */
 
-static void snd_vt1724_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_vt1724_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        ice1712_t *ice = snd_magic_cast(ice1712_t, dev_id, return);
        unsigned char status;
+       int handled = 0;
 
        while (1) {
                status = inb(ICEREG1724(ice, IRQSTAT));
                if (status == 0)
                        break;
-               
+
+               handled = 1;            
                /*  these should probably be separated at some point, 
                        but as we don't currently have MPU support on the board I will leave it */
                if ((status & VT1724_IRQ_MPU_RX)||(status & VT1724_IRQ_MPU_TX)) {
@@ -242,6 +244,7 @@ static void snd_vt1724_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
                }
        }
+       return IRQ_RETVAL(handled);
 }
 
 /*
index c00f21644969136bea66a4f77e81008aedf42c5a..664c89794afd83fd6a2de35248079c698768333b 100644 (file)
@@ -1133,18 +1133,18 @@ static void snd_korg1212_OnDSPDownloadComplete(korg1212_t *korg1212)
        snd_korg1212_setCardState(korg1212, K1212_STATE_DSP_COMPLETE);
 }
 
-static void snd_korg1212_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_korg1212_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
         u32 doorbellValue;
         korg1212_t *korg1212 = snd_magic_cast(korg1212_t, dev_id, return);
 
        if(irq != korg1212->irq)
-               return;
+               return IRQ_NONE;
 
         doorbellValue = readl(korg1212->inDoorbellPtr);
 
         if (!doorbellValue)
-               return;
+               return IRQ_HANDLED;
 
        spin_lock(&korg1212->lock);
 
@@ -1218,6 +1218,7 @@ static void snd_korg1212_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        korg1212->inIRQ--;
 
        spin_unlock(&korg1212->lock);
+       return IRQ_HANDLED;
 }
 
 static int snd_korg1212_downloadDSPCode(korg1212_t *korg1212)
index 670151d213f2c18280640e16e4e6ceae1c328c50..daac7252b537da1557a47439412366ccd0643428 100644 (file)
@@ -1549,7 +1549,7 @@ static void snd_m3_update_ptr(m3_t *chip, m3_dma_t *s)
        }
 }
 
-static void 
+static irqreturn_t
 snd_m3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        m3_t *chip = snd_magic_cast(m3_t, dev_id, );
@@ -1559,7 +1559,7 @@ snd_m3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        status = inb(chip->iobase + 0x1A);
 
        if (status == 0xff)
-               return;
+               return IRQ_NONE;
    
        /* presumably acking the ints? */
        outw(status, chip->iobase + 0x1A);
@@ -1592,6 +1592,7 @@ snd_m3_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        /* XXX is this needed? */
        if (status & 0x40) 
                outb(0x40, chip->iobase+0x1A);
+       return IRQ_HANDLED;
 }
 
 
index 34ce592feda4b6aa0e3b6dcbb59d1f441396a37a..8a3aefc87fc0a8e4fba37394cf01b332682b7298 100644 (file)
@@ -238,7 +238,7 @@ struct snd_nm256 {
        int mixer_status_mask;          /* bit mask to test the mixer status */
 
        int irq;
-       void (*interrupt)(int, void *, struct pt_regs *);
+       irqreturn_t (*interrupt)(int, void *, struct pt_regs *);
        int badintrcount;               /* counter to check bogus interrupts */
 
        nm256_stream_t streams[2];
@@ -972,7 +972,7 @@ snd_nm256_intr_check(nm256_t *chip)
  * I suppose...yucky bleah.)
  */
 
-static void
+static irqreturn_t
 snd_nm256_interrupt(int irq, void *dev_id, struct pt_regs *dummy)
 {
        nm256_t *chip = snd_magic_cast(nm256_t, dev_id, return);
@@ -984,7 +984,7 @@ snd_nm256_interrupt(int irq, void *dev_id, struct pt_regs *dummy)
        /* Not ours. */
        if (status == 0) {
                snd_nm256_intr_check(chip);
-               return;
+               return IRQ_NONE;
        }
 
        chip->badintrcount = 0;
@@ -1030,6 +1030,7 @@ snd_nm256_interrupt(int irq, void *dev_id, struct pt_regs *dummy)
        }
 
        spin_unlock(&chip->reg_lock);
+       return IRQ_HANDLED;
 }
 
 /*
@@ -1038,7 +1039,7 @@ snd_nm256_interrupt(int irq, void *dev_id, struct pt_regs *dummy)
  * routine.
  */
 
-static void
+static irqreturn_t
 snd_nm256_interrupt_zx(int irq, void *dev_id, struct pt_regs *dummy)
 {
        nm256_t *chip = snd_magic_cast(nm256_t, dev_id, return);
@@ -1050,7 +1051,7 @@ snd_nm256_interrupt_zx(int irq, void *dev_id, struct pt_regs *dummy)
        /* Not ours. */
        if (status == 0) {
                snd_nm256_intr_check(chip);
-               return;
+               return IRQ_NONE;
        }
 
        chip->badintrcount = 0;
@@ -1095,6 +1096,7 @@ snd_nm256_interrupt_zx(int irq, void *dev_id, struct pt_regs *dummy)
        }
 
        spin_unlock(&chip->reg_lock);
+       return IRQ_HANDLED;
 }
 
 /*
index b4074034acee202974b1a6725948a8650283098e..175cb05524af57207435b774f158042352e29c9f 100644 (file)
@@ -833,14 +833,14 @@ static void snd_rme32_capture_stop(rme32_t * rme32)
        writel(rme32->wcreg, rme32->iobase + RME32_IO_CONTROL_REGISTER);
 }
 
-static void
+static irqreturn_t
 snd_rme32_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        rme32_t *rme32 = (rme32_t *) dev_id;
 
        rme32->rcreg = readl(rme32->iobase + RME32_IO_CONTROL_REGISTER);
        if (!(rme32->rcreg & RME32_RCR_IRQ)) {
-               return;
+               return IRQ_NONE;
        } else {
                if (rme32->capture_substream) {
                        snd_pcm_period_elapsed(rme32->capture_substream);
@@ -850,6 +850,7 @@ snd_rme32_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                }
                writel(0, rme32->iobase + RME32_IO_CONFIRM_ACTION_IRQ);
        }
+       return IRQ_HANDLED;
 }
 
 static unsigned int period_bytes[] = { RME32_BLOCK_SIZE };
index dcac1270adf2d7e4554c04c6bda3c5cc47a6d52a..dac0df2f2f619525ea5b9f2b5b11d779fe74741f 100644 (file)
@@ -1153,7 +1153,7 @@ snd_rme96_capture_stop(rme96_t *rme96)
        writel(rme96->wcreg, rme96->iobase + RME96_IO_CONTROL_REGISTER);
 }
 
-static void
+static irqreturn_t
 snd_rme96_interrupt(int irq,
                    void *dev_id,
                    struct pt_regs *regs)
@@ -1165,7 +1165,7 @@ snd_rme96_interrupt(int irq,
        if (!((rme96->rcreg & RME96_RCR_IRQ) ||
              (rme96->rcreg & RME96_RCR_IRQ_2)))
        {
-               return;
+               return IRQ_NONE;
        }
        
        if (rme96->rcreg & RME96_RCR_IRQ) {
@@ -1178,6 +1178,7 @@ snd_rme96_interrupt(int irq,
                snd_pcm_period_elapsed(rme96->capture_substream);               
                writel(0, rme96->iobase + RME96_IO_CONFIRM_REC_IRQ);
        }
+       return IRQ_HANDLED;
 }
 
 static unsigned int period_bytes[] = { RME96_SMALL_BLOCK_SIZE, RME96_LARGE_BLOCK_SIZE };
index 2847b415506d80ce1bafd59631ceb8e9f284016e..455385b31513214b192660ec70a9d301e2650a87 100644 (file)
@@ -3076,7 +3076,7 @@ void hdsp_midi_tasklet(unsigned long arg)
        }
 } 
 
-void snd_hdsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_hdsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        hdsp_t *hdsp = (hdsp_t *) dev_id;
        unsigned int status;
@@ -3094,7 +3094,7 @@ void snd_hdsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        midi1 = status & HDSP_midi1IRQPending;
 
        if (!audio && !midi0 && !midi1) {
-               return;
+               return IRQ_NONE;
        }
 
        hdsp_write(hdsp, HDSP_interruptConfirmation, 0);
@@ -3128,6 +3128,7 @@ void snd_hdsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        }
        if (schedule)
            tasklet_hi_schedule(&hdsp->midi_tasklet);
+       return IRQ_HANDLED;
 }
 
 static snd_pcm_uframes_t snd_hdsp_hw_pointer(snd_pcm_substream_t *substream)
index 0d4099ff6a7d8d71dfbd34b6b09417040e289dc2..c413f5b0b843e1ca001309db6d4545bcd0e09c7f 100644 (file)
@@ -1947,12 +1947,12 @@ static void snd_rme9652_set_defaults(rme9652_t *rme9652)
        rme9652_set_rate(rme9652, 48000);
 }
 
-void snd_rme9652_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_rme9652_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        rme9652_t *rme9652 = (rme9652_t *) dev_id;
 
        if (!(rme9652_read(rme9652, RME9652_status_register) & RME9652_IRQ)) {
-               return;
+               return IRQ_NONE;
        }
 
        rme9652_write(rme9652, RME9652_irq_clear, 0);
@@ -1964,6 +1964,7 @@ void snd_rme9652_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        if (rme9652->playback_substream) {
                snd_pcm_period_elapsed(rme9652->pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream);
        }
+       return IRQ_HANDLED;
 }
 
 static snd_pcm_uframes_t snd_rme9652_hw_pointer(snd_pcm_substream_t *substream)
index 2dfff68d791ef3eccb66ff1cf1575b1dfdcfab53..03248c60c874bc1d050832be1810dfdced1a2f6c 100644 (file)
@@ -596,18 +596,18 @@ static int snd_sonicvibes_trigger(sonicvibes_t * sonic, int what, int cmd)
        return result;
 }
 
-static void snd_sonicvibes_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_sonicvibes_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        sonicvibes_t *sonic = snd_magic_cast(sonicvibes_t, dev_id, return);
        unsigned char status;
 
        status = inb(SV_REG(sonic, STATUS));
        if (!(status & (SV_DMAA_IRQ | SV_DMAC_IRQ | SV_MIDI_IRQ)))
-               return;
+               return IRQ_NONE;
        if (status == 0xff) {   /* failure */
                outb(sonic->irqmask = ~0, SV_REG(sonic, IRQMASK));
                snd_printk("IRQ failure - interrupts disabled!!\n");
-               return;
+               return IRQ_HANDLED;
        }
        if (sonic->pcm) {
                if (status & SV_DMAA_IRQ)
@@ -654,6 +654,7 @@ static void snd_sonicvibes_interrupt(int irq, void *dev_id, struct pt_regs *regs
                snd_ctl_notify(sonic->card, SNDRV_CTL_EVENT_MASK_VALUE, &sonic->master_mute->id);
                snd_ctl_notify(sonic->card, SNDRV_CTL_EVENT_MASK_VALUE, &sonic->master_volume->id);
        }
+       return IRQ_HANDLED;
 }
 
 /*
index e2aff9e722a7aa66ba6110fe39e9dbac7749820e..658a9c80be2b167e492908a4d90f2a83514caaf3 100644 (file)
@@ -48,7 +48,7 @@
 
 static int snd_trident_pcm_mixer_build(trident_t *trident, snd_trident_voice_t * voice, snd_pcm_substream_t *substream);
 static int snd_trident_pcm_mixer_free(trident_t *trident, snd_trident_voice_t * voice, snd_pcm_substream_t *substream);
-static void snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static irqreturn_t snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs);
 #ifdef CONFIG_PM
 static int snd_trident_set_power_state(snd_card_t *card, unsigned int power_state);
 #endif
@@ -3687,7 +3687,7 @@ int snd_trident_free(trident_t *trident)
   
   ---------------------------------------------------------------------------*/
 
-static void snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        trident_t *trident = snd_magic_cast(trident_t, dev_id, return);
        unsigned int audio_int, chn_int, stimer, channel, mask, tmp;
@@ -3696,7 +3696,7 @@ static void snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
        audio_int = inl(TRID_REG(trident, T4D_MISCINT));
        if ((audio_int & (ADDRESS_IRQ|MPU401_IRQ)) == 0)
-               return;
+               return IRQ_NONE;
        if (audio_int & ADDRESS_IRQ) {
                // get interrupt status for all channels
                spin_lock(&trident->reg_lock);
@@ -3781,6 +3781,7 @@ static void snd_trident_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                }
        }
        // outl((ST_TARGET_REACHED | MIXER_OVERFLOW | MIXER_UNDERFLOW), TRID_REG(trident, T4D_MISCINT));
+       return IRQ_HANDLED;
 }
 
 /*---------------------------------------------------------------------------
index f0ec3188f401a4dbd6442f7011907ec9f109cd0b..fde64b90da188ed5404f61a3484660cbd832034a 100644 (file)
@@ -574,7 +574,7 @@ static void snd_via82xx_channel_reset(via82xx_t *chip, viadev_t *viadev)
  *  Interrupt handler
  */
 
-static void snd_via82xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_via82xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        via82xx_t *chip = snd_magic_cast(via82xx_t, dev_id, return);
        unsigned int status;
@@ -591,8 +591,8 @@ static void snd_via82xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                spin_unlock(&chip->reg_lock);
                if (chip->rmidi)
                        /* check mpu401 interrupt */
-                       snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs);
-               return;
+                       return snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data, regs);
+               return IRQ_NONE;
        }
 // _skip_sgd:
 
@@ -611,6 +611,7 @@ static void snd_via82xx_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                outb(c_status, VIADEV_REG(viadev, OFFSET_STATUS)); /* ack */
        }
        spin_unlock(&chip->reg_lock);
+       return IRQ_HANDLED;
 }
 
 /*
index 42dd52b2f08146dc226f356af2f20b972adf1f18..4fdbb29519460b706b3618183d1dabb77decd678 100644 (file)
@@ -741,7 +741,7 @@ static void snd_ymfpci_irq_wait(ymfpci_t *chip)
        }
 }
 
-static void snd_ymfpci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_ymfpci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        ymfpci_t *chip = snd_magic_cast(ymfpci_t, dev_id, return);
        u32 status, nvoice, mode;
@@ -787,6 +787,7 @@ static void snd_ymfpci_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 
        if (chip->rawmidi)
                snd_mpu401_uart_interrupt(irq, chip->rawmidi->private_data, regs);
+       return IRQ_HANDLED;
 }
 
 static snd_pcm_hardware_t snd_ymfpci_playback =
index 74931580c8a73c4d422fe38a978c4f0fd6207aee..d6b4bac01bf1149e298cc775ffdd192e3365ba5c 100644 (file)
@@ -693,23 +693,25 @@ static void snd_pmac_dbdma_reset(pmac_t *chip)
 /*
  * interrupt handlers
  */
-static void
+static irqreturn_t
 snd_pmac_tx_intr(int irq, void *devid, struct pt_regs *regs)
 {
        pmac_t *chip = snd_magic_cast(pmac_t, devid, return);
        snd_pmac_pcm_update(chip, &chip->playback);
+       return IRQ_HANDLED;
 }
 
 
-static void
+static irqreturn_t
 snd_pmac_rx_intr(int irq, void *devid, struct pt_regs *regs)
 {
        pmac_t *chip = snd_magic_cast(pmac_t, devid, return);
        snd_pmac_pcm_update(chip, &chip->capture);
+       return IRQ_HANDLED;
 }
 
 
-static void
+static irqreturn_t
 snd_pmac_ctrl_intr(int irq, void *devid, struct pt_regs *regs)
 {
        pmac_t *chip = snd_magic_cast(pmac_t, devid, return);
@@ -728,6 +730,7 @@ snd_pmac_ctrl_intr(int irq, void *devid, struct pt_regs *regs)
        }
        /* Writing 1s to the CNTLERR and PORTCHG bits clears them... */
        out_le32(&chip->awacs->control, ctrl);
+       return IRQ_HANDLED;
 }
 
 
index 775d4e02b342a91666197c15fd11ed20dd98097c..7834b1651f271de9bc78ecb9aea3892316801d34 100644 (file)
@@ -785,11 +785,14 @@ static void tumbler_update_automute(pmac_t *chip, int do_notify)
 
 
 /* interrupt - headphone plug changed */
-static void headphone_intr(int irq, void *devid, struct pt_regs *regs)
+static irqreturn_t headphone_intr(int irq, void *devid, struct pt_regs *regs)
 {
        pmac_t *chip = snd_magic_cast(pmac_t, devid, return);
-       if (chip->update_automute && chip->initialized)
+       if (chip->update_automute && chip->initialized) {
                chip->update_automute(chip, 1);
+               return IRQ_HANDLED;
+       }
+       return IRQ_NONE;
 }
 
 /* look for audio-gpio device */
index 38cd35321dfe8a8c1850a4eb05c7367f4db45356..83b0c5351c42ecb04f91df65708463abcdf11eca 100644 (file)
@@ -497,7 +497,7 @@ static void __amd7930_update_map(amd7930_t *amd)
        __amd7930_write_map(amd);
 }
 
-static void snd_amd7930_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_amd7930_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        amd7930_t *amd = dev_id;
        unsigned int elapsed;
@@ -536,6 +536,7 @@ static void snd_amd7930_interrupt(int irq, void *dev_id, struct pt_regs *regs)
                snd_pcm_period_elapsed(amd->playback_substream);
        else
                snd_pcm_period_elapsed(amd->capture_substream);
+       return IRQ_HANDLED;
 }
 
 static int snd_amd7930_trigger(amd7930_t *amd, unsigned int flag, int cmd)
index ee9b28117ac23c96ae334094918db4bd1e0e1596..667e326d34cbf26cfa5e47de3ae32d886f9ecace 100644 (file)
@@ -1228,7 +1228,7 @@ static void snd_cs4231_generic_interrupt(cs4231_t *chip)
 }
 
 #ifdef SBUS_SUPPORT
-static void snd_cs4231_sbus_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+static irqreturn_t snd_cs4231_sbus_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
        cs4231_t *chip = snd_magic_cast(cs4231_t, dev_id, return);
        u32 csr;
@@ -1240,12 +1240,13 @@ static void snd_cs4231_sbus_interrupt(int irq, void *dev_id, struct pt_regs *reg
                     APC_GENL_INT |
                     APC_XINT_PEMP |
                     APC_XINT_CEMP)))
-               return;
+               return IRQ_NONE;
 
        /* ACK the APC interrupt. */
        sbus_writel(csr, chip->port + APCCSR);
 
        snd_cs4231_generic_interrupt(chip);
+       return IRQ_HANDLED;
 }
 #endif