Merge branch 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa
[sfrench/cifs-2.6.git] / sound / isa / sb / sb16_main.c
index f183f1845a36e4f1656f303fcbf463925a9945b0..c06754f7ee5df2d880c7d2dfaacf947eba8014c0 100644 (file)
@@ -1,5 +1,5 @@
 /*
- *  Copyright (c) by Jaroslav Kysela <perex@suse.cz>
+ *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
  *  Routines for control of 16-bit SoundBlaster cards and clones
  *  Note: This is very ugly hardware which uses one 8-bit DMA channel and
  *        second 16-bit DMA channel. Unfortunately 8-bit DMA channel can't
@@ -45,7 +45,7 @@
 #include <sound/control.h>
 #include <sound/info.h>
 
-MODULE_AUTHOR("Jaroslav Kysela <perex@suse.cz>");
+MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>");
 MODULE_DESCRIPTION("Routines for control of 16-bit SoundBlaster cards and clones");
 MODULE_LICENSE("GPL");
 
@@ -395,7 +395,7 @@ static int snd_sb16_capture_trigger(struct snd_pcm_substream *substream,
        return result;
 }
 
-irqreturn_t snd_sb16dsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+irqreturn_t snd_sb16dsp_interrupt(int irq, void *dev_id)
 {
        struct snd_sb *chip = dev_id;
        unsigned char status;
@@ -405,7 +405,7 @@ irqreturn_t snd_sb16dsp_interrupt(int irq, void *dev_id, struct pt_regs *regs)
        status = snd_sbmixer_read(chip, SB_DSP4_IRQSTATUS);
        spin_unlock(&chip->mixer_lock);
        if ((status & SB_IRQTYPE_MPUIN) && chip->rmidi_callback)
-               chip->rmidi_callback(irq, chip->rmidi->private_data, regs);
+               chip->rmidi_callback(irq, chip->rmidi->private_data);
        if (status & SB_IRQTYPE_8BIT) {
                ok = 0;
                if (chip->mode & SB_MODE_PLAYBACK_8) {
@@ -563,6 +563,11 @@ static int snd_sb16_playback_open(struct snd_pcm_substream *substream)
       __open_ok:
        if (chip->hardware == SB_HW_ALS100)
                runtime->hw.rate_max = 48000;
+       if (chip->hardware == SB_HW_CS5530) {
+               runtime->hw.buffer_bytes_max = 32 * 1024;
+               runtime->hw.periods_min = 2;
+               runtime->hw.rate_min = 44100;
+       }
        if (chip->mode & SB_RATE_LOCK)
                runtime->hw.rate_min = runtime->hw.rate_max = chip->locked_rate;
        chip->playback_substream = substream;
@@ -633,6 +638,11 @@ static int snd_sb16_capture_open(struct snd_pcm_substream *substream)
       __open_ok:
        if (chip->hardware == SB_HW_ALS100)
                runtime->hw.rate_max = 48000;
+       if (chip->hardware == SB_HW_CS5530) {
+               runtime->hw.buffer_bytes_max = 32 * 1024;
+               runtime->hw.periods_min = 2;
+               runtime->hw.rate_min = 44100;
+       }
        if (chip->mode & SB_RATE_LOCK)
                runtime->hw.rate_min = runtime->hw.rate_max = chip->locked_rate;
        chip->capture_substream = substream;