Merge branch 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa

* 'linus' of master.kernel.org:/pub/scm/linux/kernel/git/perex/alsa: (30 commits)
  [ALSA] version 1.0.14rc1
  [ALSA] ac97: Identify CMI9761 chips.
  [ALSA] ac97_codec - trivial fix for bit update functions
  [ALSA] snd-ca0106: Fix typos.
  [ALSA] snd-ca0106: Add new card variant.
  [ALSA] sound: fix PCM substream list
  [ALSA] sound: initialize rawmidi substream list
  [ALSA] snd_hda_intel 3stack mode for ASUS P5P-L2
  [ALSA] Remove IRQF_DISABLED for shared PCI irqs
  [ALSA] Fix invalid assignment of PCI revision
  [ALSA] Fix races in PCM OSS emulation
  [ALSA] hda-codec - fix typo in PCI IDs
  [ALSA] ac97 - Fix potential negative array index
  [ALSA] hda-codec - Verbose proc output for PCM parameters
  [ALSA] hda-codec - Fix detection of supported sample rates
  [ALSA] hda-codec - Fix model for ASUS V1j laptop
  [ALSA] sound/core/control.c: remove dead code
  [ALSA] hda-codec - Add model for HP q965
  [ALSA] pcm core: fix silence_start calculations
  [ALSA] hda-codec - Fix a typo
  ...
This commit is contained in:
Linus Torvalds 2006-12-20 23:56:06 -08:00
commit e4ddc9cc62
68 changed files with 270 additions and 166 deletions

View File

@ -927,7 +927,7 @@
<informalexample> <informalexample>
<programlisting> <programlisting>
<![CDATA[ <![CDATA[
struct mychip *chip = (struct mychip *)card->private_data; struct mychip *chip = card->private_data;
]]> ]]>
</programlisting> </programlisting>
</informalexample> </informalexample>
@ -1095,7 +1095,7 @@
/* release the irq */ /* release the irq */
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void *)chip); free_irq(chip->irq, chip);
/* release the i/o ports & memory */ /* release the i/o ports & memory */
pci_release_regions(chip->pci); pci_release_regions(chip->pci);
/* disable the PCI entry */ /* disable the PCI entry */
@ -1148,7 +1148,7 @@
} }
chip->port = pci_resource_start(pci, 0); chip->port = pci_resource_start(pci, 0);
if (request_irq(pci->irq, snd_mychip_interrupt, if (request_irq(pci->irq, snd_mychip_interrupt,
IRQF_DISABLED|IRQF_SHARED, "My Chip", chip)) { IRQF_SHARED, "My Chip", chip)) {
printk(KERN_ERR "cannot grab irq %d\n", pci->irq); printk(KERN_ERR "cannot grab irq %d\n", pci->irq);
snd_mychip_free(chip); snd_mychip_free(chip);
return -EBUSY; return -EBUSY;
@ -1387,7 +1387,7 @@
<programlisting> <programlisting>
<![CDATA[ <![CDATA[
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void *)chip); free_irq(chip->irq, chip);
]]> ]]>
</programlisting> </programlisting>
</informalexample> </informalexample>

View File

@ -56,6 +56,7 @@ struct snd_pcm_oss_runtime {
size_t mmap_bytes; size_t mmap_bytes;
char *buffer; /* vmallocated period */ char *buffer; /* vmallocated period */
size_t buffer_used; /* used length from period buffer */ size_t buffer_used; /* used length from period buffer */
struct mutex params_lock;
#ifdef CONFIG_SND_PCM_OSS_PLUGINS #ifdef CONFIG_SND_PCM_OSS_PLUGINS
struct snd_pcm_plugin *plugin_first; struct snd_pcm_plugin *plugin_first;
struct snd_pcm_plugin *plugin_last; struct snd_pcm_plugin *plugin_last;

View File

@ -1,3 +1,3 @@
/* include/version.h. Generated by alsa/ksync script. */ /* include/version.h. Generated by alsa/ksync script. */
#define CONFIG_SND_VERSION "1.0.13" #define CONFIG_SND_VERSION "1.0.14rc1"
#define CONFIG_SND_DATE " (Tue Nov 28 14:07:24 2006 UTC)" #define CONFIG_SND_DATE " (Wed Dec 20 08:11:48 2006 UTC)"

View File

@ -286,7 +286,7 @@ struct snd_ymfpci {
int irq; int irq;
unsigned int device_id; /* PCI device ID */ unsigned int device_id; /* PCI device ID */
unsigned int rev; /* PCI revision */ unsigned char rev; /* PCI revision */
unsigned long reg_area_phys; unsigned long reg_area_phys;
void __iomem *reg_area_virt; void __iomem *reg_area_virt;
struct resource *res_reg_area; struct resource *res_reg_area;
@ -345,7 +345,6 @@ struct snd_ymfpci {
struct snd_kcontrol *spdif_pcm_ctl; struct snd_kcontrol *spdif_pcm_ctl;
int mode_dup4ch; int mode_dup4ch;
int rear_opened; int rear_opened;
int rear_swap;
int spdif_opened; int spdif_opened;
struct { struct {
u16 left; u16 left;
@ -378,7 +377,7 @@ int snd_ymfpci_pcm(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm);
int snd_ymfpci_pcm2(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm); int snd_ymfpci_pcm2(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm);
int snd_ymfpci_pcm_spdif(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm); int snd_ymfpci_pcm_spdif(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm);
int snd_ymfpci_pcm_4ch(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm); int snd_ymfpci_pcm_4ch(struct snd_ymfpci *chip, int device, struct snd_pcm **rpcm);
int snd_ymfpci_mixer(struct snd_ymfpci *chip, int rear_switch, int rear_swap); int snd_ymfpci_mixer(struct snd_ymfpci *chip, int rear_switch);
int snd_ymfpci_timer(struct snd_ymfpci *chip, int device); int snd_ymfpci_timer(struct snd_ymfpci *chip, int device);
#endif /* __SOUND_YMFPCI_H */ #endif /* __SOUND_YMFPCI_H */

View File

@ -9,7 +9,6 @@
#define __SND_AOA_CODEC_ONYX_H #define __SND_AOA_CODEC_ONYX_H
#include <stddef.h> #include <stddef.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <asm/pmac_low_i2c.h> #include <asm/pmac_low_i2c.h>
#include <asm/prom.h> #include <asm/prom.h>

View File

@ -61,7 +61,6 @@
*/ */
#include <stddef.h> #include <stddef.h>
#include <linux/i2c.h> #include <linux/i2c.h>
#include <linux/i2c-dev.h>
#include <asm/pmac_low_i2c.h> #include <asm/pmac_low_i2c.h>
#include <asm/prom.h> #include <asm/prom.h>
#include <linux/delay.h> #include <linux/delay.h>

View File

@ -1275,7 +1275,7 @@ static ssize_t snd_ctl_read(struct file *file, char __user *buffer,
schedule(); schedule();
remove_wait_queue(&ctl->change_sleep, &wait); remove_wait_queue(&ctl->change_sleep, &wait);
if (signal_pending(current)) if (signal_pending(current))
return result > 0 ? result : -ERESTARTSYS; return -ERESTARTSYS;
spin_lock_irq(&ctl->read_lock); spin_lock_irq(&ctl->read_lock);
} }
kev = snd_kctl_event(ctl->events.next); kev = snd_kctl_event(ctl->events.next);

View File

@ -810,6 +810,8 @@ static int snd_pcm_oss_change_params(struct snd_pcm_substream *substream)
struct snd_mask sformat_mask; struct snd_mask sformat_mask;
struct snd_mask mask; struct snd_mask mask;
if (mutex_lock_interruptible(&runtime->oss.params_lock))
return -EINTR;
sw_params = kmalloc(sizeof(*sw_params), GFP_KERNEL); sw_params = kmalloc(sizeof(*sw_params), GFP_KERNEL);
params = kmalloc(sizeof(*params), GFP_KERNEL); params = kmalloc(sizeof(*params), GFP_KERNEL);
sparams = kmalloc(sizeof(*sparams), GFP_KERNEL); sparams = kmalloc(sizeof(*sparams), GFP_KERNEL);
@ -1020,6 +1022,7 @@ static int snd_pcm_oss_change_params(struct snd_pcm_substream *substream)
kfree(sw_params); kfree(sw_params);
kfree(params); kfree(params);
kfree(sparams); kfree(sparams);
mutex_unlock(&runtime->oss.params_lock);
return err; return err;
} }
@ -1307,14 +1310,17 @@ static ssize_t snd_pcm_oss_write1(struct snd_pcm_substream *substream, const cha
if ((tmp = snd_pcm_oss_make_ready(substream)) < 0) if ((tmp = snd_pcm_oss_make_ready(substream)) < 0)
return tmp; return tmp;
mutex_lock(&runtime->oss.params_lock);
while (bytes > 0) { while (bytes > 0) {
if (bytes < runtime->oss.period_bytes || runtime->oss.buffer_used > 0) { if (bytes < runtime->oss.period_bytes || runtime->oss.buffer_used > 0) {
tmp = bytes; tmp = bytes;
if (tmp + runtime->oss.buffer_used > runtime->oss.period_bytes) if (tmp + runtime->oss.buffer_used > runtime->oss.period_bytes)
tmp = runtime->oss.period_bytes - runtime->oss.buffer_used; tmp = runtime->oss.period_bytes - runtime->oss.buffer_used;
if (tmp > 0) { if (tmp > 0) {
if (copy_from_user(runtime->oss.buffer + runtime->oss.buffer_used, buf, tmp)) if (copy_from_user(runtime->oss.buffer + runtime->oss.buffer_used, buf, tmp)) {
return xfer > 0 ? (snd_pcm_sframes_t)xfer : -EFAULT; tmp = -EFAULT;
goto err;
}
} }
runtime->oss.buffer_used += tmp; runtime->oss.buffer_used += tmp;
buf += tmp; buf += tmp;
@ -1325,22 +1331,24 @@ static ssize_t snd_pcm_oss_write1(struct snd_pcm_substream *substream, const cha
tmp = snd_pcm_oss_write2(substream, runtime->oss.buffer + runtime->oss.period_ptr, tmp = snd_pcm_oss_write2(substream, runtime->oss.buffer + runtime->oss.period_ptr,
runtime->oss.buffer_used - runtime->oss.period_ptr, 1); runtime->oss.buffer_used - runtime->oss.period_ptr, 1);
if (tmp <= 0) if (tmp <= 0)
return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp; goto err;
runtime->oss.bytes += tmp; runtime->oss.bytes += tmp;
runtime->oss.period_ptr += tmp; runtime->oss.period_ptr += tmp;
runtime->oss.period_ptr %= runtime->oss.period_bytes; runtime->oss.period_ptr %= runtime->oss.period_bytes;
if (runtime->oss.period_ptr == 0 || if (runtime->oss.period_ptr == 0 ||
runtime->oss.period_ptr == runtime->oss.buffer_used) runtime->oss.period_ptr == runtime->oss.buffer_used)
runtime->oss.buffer_used = 0; runtime->oss.buffer_used = 0;
else if ((substream->f_flags & O_NONBLOCK) != 0) else if ((substream->f_flags & O_NONBLOCK) != 0) {
return xfer > 0 ? xfer : -EAGAIN; tmp = -EAGAIN;
goto err;
}
} }
} else { } else {
tmp = snd_pcm_oss_write2(substream, tmp = snd_pcm_oss_write2(substream,
(const char __force *)buf, (const char __force *)buf,
runtime->oss.period_bytes, 0); runtime->oss.period_bytes, 0);
if (tmp <= 0) if (tmp <= 0)
return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp; goto err;
runtime->oss.bytes += tmp; runtime->oss.bytes += tmp;
buf += tmp; buf += tmp;
bytes -= tmp; bytes -= tmp;
@ -1350,7 +1358,12 @@ static ssize_t snd_pcm_oss_write1(struct snd_pcm_substream *substream, const cha
break; break;
} }
} }
mutex_unlock(&runtime->oss.params_lock);
return xfer; return xfer;
err:
mutex_unlock(&runtime->oss.params_lock);
return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp;
} }
static ssize_t snd_pcm_oss_read2(struct snd_pcm_substream *substream, char *buf, size_t bytes, int in_kernel) static ssize_t snd_pcm_oss_read2(struct snd_pcm_substream *substream, char *buf, size_t bytes, int in_kernel)
@ -1397,12 +1410,13 @@ static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __use
if ((tmp = snd_pcm_oss_make_ready(substream)) < 0) if ((tmp = snd_pcm_oss_make_ready(substream)) < 0)
return tmp; return tmp;
mutex_lock(&runtime->oss.params_lock);
while (bytes > 0) { while (bytes > 0) {
if (bytes < runtime->oss.period_bytes || runtime->oss.buffer_used > 0) { if (bytes < runtime->oss.period_bytes || runtime->oss.buffer_used > 0) {
if (runtime->oss.buffer_used == 0) { if (runtime->oss.buffer_used == 0) {
tmp = snd_pcm_oss_read2(substream, runtime->oss.buffer, runtime->oss.period_bytes, 1); tmp = snd_pcm_oss_read2(substream, runtime->oss.buffer, runtime->oss.period_bytes, 1);
if (tmp <= 0) if (tmp <= 0)
return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp; goto err;
runtime->oss.bytes += tmp; runtime->oss.bytes += tmp;
runtime->oss.period_ptr = tmp; runtime->oss.period_ptr = tmp;
runtime->oss.buffer_used = tmp; runtime->oss.buffer_used = tmp;
@ -1410,8 +1424,10 @@ static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __use
tmp = bytes; tmp = bytes;
if ((size_t) tmp > runtime->oss.buffer_used) if ((size_t) tmp > runtime->oss.buffer_used)
tmp = runtime->oss.buffer_used; tmp = runtime->oss.buffer_used;
if (copy_to_user(buf, runtime->oss.buffer + (runtime->oss.period_ptr - runtime->oss.buffer_used), tmp)) if (copy_to_user(buf, runtime->oss.buffer + (runtime->oss.period_ptr - runtime->oss.buffer_used), tmp)) {
return xfer > 0 ? (snd_pcm_sframes_t)xfer : -EFAULT; tmp = -EFAULT;
goto err;
}
buf += tmp; buf += tmp;
bytes -= tmp; bytes -= tmp;
xfer += tmp; xfer += tmp;
@ -1420,14 +1436,19 @@ static ssize_t snd_pcm_oss_read1(struct snd_pcm_substream *substream, char __use
tmp = snd_pcm_oss_read2(substream, (char __force *)buf, tmp = snd_pcm_oss_read2(substream, (char __force *)buf,
runtime->oss.period_bytes, 0); runtime->oss.period_bytes, 0);
if (tmp <= 0) if (tmp <= 0)
return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp; goto err;
runtime->oss.bytes += tmp; runtime->oss.bytes += tmp;
buf += tmp; buf += tmp;
bytes -= tmp; bytes -= tmp;
xfer += tmp; xfer += tmp;
} }
} }
mutex_unlock(&runtime->oss.params_lock);
return xfer; return xfer;
err:
mutex_unlock(&runtime->oss.params_lock);
return xfer > 0 ? (snd_pcm_sframes_t)xfer : tmp;
} }
static int snd_pcm_oss_reset(struct snd_pcm_oss_file *pcm_oss_file) static int snd_pcm_oss_reset(struct snd_pcm_oss_file *pcm_oss_file)
@ -1528,6 +1549,7 @@ static int snd_pcm_oss_sync(struct snd_pcm_oss_file *pcm_oss_file)
return err; return err;
format = snd_pcm_oss_format_from(runtime->oss.format); format = snd_pcm_oss_format_from(runtime->oss.format);
width = snd_pcm_format_physical_width(format); width = snd_pcm_format_physical_width(format);
mutex_lock(&runtime->oss.params_lock);
if (runtime->oss.buffer_used > 0) { if (runtime->oss.buffer_used > 0) {
#ifdef OSS_DEBUG #ifdef OSS_DEBUG
printk("sync: buffer_used\n"); printk("sync: buffer_used\n");
@ -1537,8 +1559,10 @@ static int snd_pcm_oss_sync(struct snd_pcm_oss_file *pcm_oss_file)
runtime->oss.buffer + runtime->oss.buffer_used, runtime->oss.buffer + runtime->oss.buffer_used,
size); size);
err = snd_pcm_oss_sync1(substream, runtime->oss.period_bytes); err = snd_pcm_oss_sync1(substream, runtime->oss.period_bytes);
if (err < 0) if (err < 0) {
mutex_unlock(&runtime->oss.params_lock);
return err; return err;
}
} else if (runtime->oss.period_ptr > 0) { } else if (runtime->oss.period_ptr > 0) {
#ifdef OSS_DEBUG #ifdef OSS_DEBUG
printk("sync: period_ptr\n"); printk("sync: period_ptr\n");
@ -1548,8 +1572,10 @@ static int snd_pcm_oss_sync(struct snd_pcm_oss_file *pcm_oss_file)
runtime->oss.buffer, runtime->oss.buffer,
size * 8 / width); size * 8 / width);
err = snd_pcm_oss_sync1(substream, size); err = snd_pcm_oss_sync1(substream, size);
if (err < 0) if (err < 0) {
mutex_unlock(&runtime->oss.params_lock);
return err; return err;
}
} }
/* /*
* The ALSA's period might be a bit large than OSS one. * The ALSA's period might be a bit large than OSS one.
@ -1579,6 +1605,7 @@ static int snd_pcm_oss_sync(struct snd_pcm_oss_file *pcm_oss_file)
snd_pcm_lib_writev(substream, buffers, size); snd_pcm_lib_writev(substream, buffers, size);
} }
} }
mutex_unlock(&runtime->oss.params_lock);
/* /*
* finish sync: drain the buffer * finish sync: drain the buffer
*/ */
@ -2172,6 +2199,7 @@ static void snd_pcm_oss_init_substream(struct snd_pcm_substream *substream,
runtime->oss.params = 1; runtime->oss.params = 1;
runtime->oss.trigger = 1; runtime->oss.trigger = 1;
runtime->oss.rate = 8000; runtime->oss.rate = 8000;
mutex_init(&runtime->oss.params_lock);
switch (SNDRV_MINOR_OSS_DEVICE(minor)) { switch (SNDRV_MINOR_OSS_DEVICE(minor)) {
case SNDRV_MINOR_OSS_PCM_8: case SNDRV_MINOR_OSS_PCM_8:
runtime->oss.format = AFMT_U8; runtime->oss.format = AFMT_U8;

View File

@ -640,6 +640,10 @@ int snd_pcm_new_stream(struct snd_pcm *pcm, int stream, int substream_count)
err = snd_pcm_substream_proc_init(substream); err = snd_pcm_substream_proc_init(substream);
if (err < 0) { if (err < 0) {
snd_printk(KERN_ERR "Error in snd_pcm_stream_proc_init\n"); snd_printk(KERN_ERR "Error in snd_pcm_stream_proc_init\n");
if (prev == NULL)
pstr->substream = NULL;
else
prev->next = NULL;
kfree(substream); kfree(substream);
return err; return err;
} }

View File

@ -79,19 +79,17 @@ void snd_pcm_playback_silence(struct snd_pcm_substream *substream, snd_pcm_ufram
runtime->silence_filled -= frames; runtime->silence_filled -= frames;
if ((snd_pcm_sframes_t)runtime->silence_filled < 0) { if ((snd_pcm_sframes_t)runtime->silence_filled < 0) {
runtime->silence_filled = 0; runtime->silence_filled = 0;
runtime->silence_start = (ofs + frames) - runtime->buffer_size; runtime->silence_start = new_hw_ptr;
} else { } else {
runtime->silence_start = ofs - runtime->silence_filled; runtime->silence_start = ofs;
} }
if ((snd_pcm_sframes_t)runtime->silence_start < 0)
runtime->silence_start += runtime->boundary;
} }
frames = runtime->buffer_size - runtime->silence_filled; frames = runtime->buffer_size - runtime->silence_filled;
} }
snd_assert(frames <= runtime->buffer_size, return); snd_assert(frames <= runtime->buffer_size, return);
if (frames == 0) if (frames == 0)
return; return;
ofs = (runtime->silence_start + runtime->silence_filled) % runtime->buffer_size; ofs = runtime->silence_start % runtime->buffer_size;
while (frames > 0) { while (frames > 0) {
transfer = ofs + frames > runtime->buffer_size ? runtime->buffer_size - ofs : frames; transfer = ofs + frames > runtime->buffer_size ? runtime->buffer_size - ofs : frames;
if (runtime->access == SNDRV_PCM_ACCESS_RW_INTERLEAVED || if (runtime->access == SNDRV_PCM_ACCESS_RW_INTERLEAVED ||

View File

@ -1385,7 +1385,6 @@ static int snd_rawmidi_alloc_substreams(struct snd_rawmidi *rmidi,
struct snd_rawmidi_substream *substream; struct snd_rawmidi_substream *substream;
int idx; int idx;
INIT_LIST_HEAD(&stream->substreams);
for (idx = 0; idx < count; idx++) { for (idx = 0; idx < count; idx++) {
substream = kzalloc(sizeof(*substream), GFP_KERNEL); substream = kzalloc(sizeof(*substream), GFP_KERNEL);
if (substream == NULL) { if (substream == NULL) {
@ -1440,6 +1439,9 @@ int snd_rawmidi_new(struct snd_card *card, char *id, int device,
rmidi->device = device; rmidi->device = device;
mutex_init(&rmidi->open_mutex); mutex_init(&rmidi->open_mutex);
init_waitqueue_head(&rmidi->open_wait); init_waitqueue_head(&rmidi->open_wait);
INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_INPUT].substreams);
INIT_LIST_HEAD(&rmidi->streams[SNDRV_RAWMIDI_STREAM_OUTPUT].substreams);
if (id != NULL) if (id != NULL)
strlcpy(rmidi->id, id, sizeof(rmidi->id)); strlcpy(rmidi->id, id, sizeof(rmidi->id));
if ((err = snd_rawmidi_alloc_substreams(rmidi, if ((err = snd_rawmidi_alloc_substreams(rmidi,

View File

@ -151,7 +151,7 @@ int snd_seq_expand_var_event(const struct snd_seq_event *event, int count, char
return len; return len;
newlen = len; newlen = len;
if (size_aligned > 0) if (size_aligned > 0)
newlen = ((len + size_aligned - 1) / size_aligned) * size_aligned; newlen = roundup(len, size_aligned);
if (count < newlen) if (count < newlen)
return -EAGAIN; return -EAGAIN;

View File

@ -27,7 +27,7 @@
/* table entries are align to 32 */ /* table entries are align to 32 */
#define SGBUF_TBL_ALIGN 32 #define SGBUF_TBL_ALIGN 32
#define sgbuf_align_table(tbl) ((((tbl) + SGBUF_TBL_ALIGN - 1) / SGBUF_TBL_ALIGN) * SGBUF_TBL_ALIGN) #define sgbuf_align_table(tbl) ALIGN((tbl), SGBUF_TBL_ALIGN)
int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab) int snd_free_sgbuf_pages(struct snd_dma_buffer *dmab)
{ {

View File

@ -143,9 +143,8 @@ static int snd_gf1_mem_find(struct snd_gf1_mem * alloc,
struct snd_gf1_mem_block *pblock; struct snd_gf1_mem_block *pblock;
unsigned int ptr1, ptr2; unsigned int ptr1, ptr2;
align--; if (w_16 && align < 2)
if (w_16 && align < 1) align = 2;
align = 1;
block->flags = w_16 ? SNDRV_GF1_MEM_BLOCK_16BIT : 0; block->flags = w_16 ? SNDRV_GF1_MEM_BLOCK_16BIT : 0;
block->owner = SNDRV_GF1_MEM_OWNER_DRIVER; block->owner = SNDRV_GF1_MEM_OWNER_DRIVER;
block->share = 0; block->share = 0;
@ -165,7 +164,7 @@ static int snd_gf1_mem_find(struct snd_gf1_mem * alloc,
if (pblock->next->ptr < boundary) if (pblock->next->ptr < boundary)
ptr2 = pblock->next->ptr; ptr2 = pblock->next->ptr;
} }
ptr1 = (pblock->ptr + pblock->size + align) & ~align; ptr1 = ALIGN(pblock->ptr + pblock->size, align);
if (ptr1 >= ptr2) if (ptr1 >= ptr2)
continue; continue;
size1 = ptr2 - ptr1; size1 = ptr2 - ptr1;

View File

@ -232,7 +232,7 @@ int snd_sbdsp_create(struct snd_card *card,
chip->port = port; chip->port = port;
if (request_irq(irq, irq_handler, hardware == SB_HW_ALS4000 ? if (request_irq(irq, irq_handler, hardware == SB_HW_ALS4000 ?
IRQF_DISABLED | IRQF_SHARED : IRQF_DISABLED, IRQF_SHARED : IRQF_DISABLED,
"SoundBlaster", (void *) chip)) { "SoundBlaster", (void *) chip)) {
snd_printk(KERN_ERR "sb: can't grab irq %d\n", irq); snd_printk(KERN_ERR "sb: can't grab irq %d\n", irq);
snd_sbdsp_free(chip); snd_sbdsp_free(chip);

View File

@ -1068,7 +1068,7 @@ wavefront_send_sample (snd_wavefront_t *dev,
blocksize = max_blksize; blocksize = max_blksize;
} else { } else {
/* round to nearest 16-byte value */ /* round to nearest 16-byte value */
blocksize = ((length-written+7)&~0x7); blocksize = ALIGN(length - written, 8);
} }
if (snd_wavefront_cmd (dev, WFC_DOWNLOAD_BLOCK, NULL, NULL)) { if (snd_wavefront_cmd (dev, WFC_DOWNLOAD_BLOCK, NULL, NULL)) {

View File

@ -129,9 +129,9 @@ static const struct ac97_codec_id snd_ac97_codec_ids[] = {
{ 0x434d4941, 0xffffffff, "CMI9738", patch_cm9738, NULL }, { 0x434d4941, 0xffffffff, "CMI9738", patch_cm9738, NULL },
{ 0x434d4961, 0xffffffff, "CMI9739", patch_cm9739, NULL }, { 0x434d4961, 0xffffffff, "CMI9739", patch_cm9739, NULL },
{ 0x434d4969, 0xffffffff, "CMI9780", patch_cm9780, NULL }, { 0x434d4969, 0xffffffff, "CMI9780", patch_cm9780, NULL },
{ 0x434d4978, 0xffffffff, "CMI9761", patch_cm9761, NULL }, { 0x434d4978, 0xffffffff, "CMI9761A", patch_cm9761, NULL },
{ 0x434d4982, 0xffffffff, "CMI9761", patch_cm9761, NULL }, { 0x434d4982, 0xffffffff, "CMI9761B", patch_cm9761, NULL },
{ 0x434d4983, 0xffffffff, "CMI9761", patch_cm9761, NULL }, { 0x434d4983, 0xffffffff, "CMI9761A+", patch_cm9761, NULL },
{ 0x43525900, 0xfffffff8, "CS4297", NULL, NULL }, { 0x43525900, 0xfffffff8, "CS4297", NULL, NULL },
{ 0x43525910, 0xfffffff8, "CS4297A", patch_cirrus_spdif, NULL }, { 0x43525910, 0xfffffff8, "CS4297A", patch_cirrus_spdif, NULL },
{ 0x43525920, 0xfffffff8, "CS4298", patch_cirrus_spdif, NULL }, { 0x43525920, 0xfffffff8, "CS4298", patch_cirrus_spdif, NULL },
@ -382,7 +382,7 @@ int snd_ac97_update_bits_nolock(struct snd_ac97 *ac97, unsigned short reg,
unsigned short old, new; unsigned short old, new;
old = snd_ac97_read_cache(ac97, reg); old = snd_ac97_read_cache(ac97, reg);
new = (old & ~mask) | value; new = (old & ~mask) | (value & mask);
change = old != new; change = old != new;
if (change) { if (change) {
ac97->regs[reg] = new; ac97->regs[reg] = new;
@ -399,7 +399,7 @@ static int snd_ac97_ad18xx_update_pcm_bits(struct snd_ac97 *ac97, int codec, uns
mutex_lock(&ac97->page_mutex); mutex_lock(&ac97->page_mutex);
old = ac97->spec.ad18xx.pcmreg[codec]; old = ac97->spec.ad18xx.pcmreg[codec];
new = (old & ~mask) | value; new = (old & ~mask) | (value & mask);
change = old != new; change = old != new;
if (change) { if (change) {
mutex_lock(&ac97->reg_mutex); mutex_lock(&ac97->reg_mutex);

View File

@ -1467,7 +1467,9 @@ static void patch_ad1881_chained(struct snd_ac97 * ac97, int unchained_idx, int
snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0002); // ID1C snd_ac97_write_cache(ac97, AC97_AD_CODEC_CFG, 0x0002); // ID1C
ac97->spec.ad18xx.codec_cfg[unchained_idx] = 0x0002; ac97->spec.ad18xx.codec_cfg[unchained_idx] = 0x0002;
if (cidx1 >= 0) { if (cidx1 >= 0) {
if (patch_ad1881_chained1(ac97, cidx1, 0x0006)) // SDIE | ID1C if (cidx2 < 0)
patch_ad1881_chained1(ac97, cidx1, 0);
else if (patch_ad1881_chained1(ac97, cidx1, 0x0006)) // SDIE | ID1C
patch_ad1881_chained1(ac97, cidx2, 0); patch_ad1881_chained1(ac97, cidx2, 0);
else if (patch_ad1881_chained1(ac97, cidx2, 0x0006)) // SDIE | ID1C else if (patch_ad1881_chained1(ac97, cidx2, 0x0006)) // SDIE | ID1C
patch_ad1881_chained1(ac97, cidx1, 0); patch_ad1881_chained1(ac97, cidx1, 0);
@ -2261,7 +2263,8 @@ int patch_alc655(struct snd_ac97 * ac97)
else { /* ALC655 */ else { /* ALC655 */
if (ac97->subsystem_vendor == 0x1462 && if (ac97->subsystem_vendor == 0x1462 &&
(ac97->subsystem_device == 0x0131 || /* MSI S270 laptop */ (ac97->subsystem_device == 0x0131 || /* MSI S270 laptop */
ac97->subsystem_device == 0x0161)) /* LG K1 Express */ ac97->subsystem_device == 0x0161 || /* LG K1 Express */
ac97->subsystem_device == 0x0351)) /* MSI L725 laptop */
val &= ~(1 << 1); /* Pin 47 is EAPD (for internal speaker) */ val &= ~(1 << 1); /* Pin 47 is EAPD (for internal speaker) */
else else
val |= (1 << 1); /* Pin 47 is spdif input pin */ val |= (1 << 1); /* Pin 47 is spdif input pin */

View File

@ -858,7 +858,7 @@ snd_ad1889_free(struct snd_ad1889 *chip)
synchronize_irq(chip->irq); synchronize_irq(chip->irq);
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void*)chip); free_irq(chip->irq, chip);
skip_hw: skip_hw:
if (chip->iobase) if (chip->iobase)
@ -945,7 +945,7 @@ snd_ad1889_create(struct snd_card *card,
spin_lock_init(&chip->lock); /* only now can we call ad1889_free */ spin_lock_init(&chip->lock); /* only now can we call ad1889_free */
if (request_irq(pci->irq, snd_ad1889_interrupt, if (request_irq(pci->irq, snd_ad1889_interrupt,
IRQF_DISABLED|IRQF_SHARED, card->driver, (void*)chip)) { IRQF_SHARED, card->driver, chip)) {
printk(KERN_ERR PFX "cannot obtain IRQ %d\n", pci->irq); printk(KERN_ERR PFX "cannot obtain IRQ %d\n", pci->irq);
snd_ad1889_free(chip); snd_ad1889_free(chip);
return -EBUSY; return -EBUSY;

View File

@ -2095,7 +2095,7 @@ static int snd_ali_free(struct snd_ali * codec)
snd_ali_disable_address_interrupt(codec); snd_ali_disable_address_interrupt(codec);
if (codec->irq >= 0) { if (codec->irq >= 0) {
synchronize_irq(codec->irq); synchronize_irq(codec->irq);
free_irq(codec->irq, (void *)codec); free_irq(codec->irq, codec);
} }
if (codec->port) if (codec->port)
pci_release_regions(codec->pci); pci_release_regions(codec->pci);
@ -2192,7 +2192,8 @@ static int __devinit snd_ali_resources(struct snd_ali *codec)
return err; return err;
codec->port = pci_resource_start(codec->pci, 0); codec->port = pci_resource_start(codec->pci, 0);
if (request_irq(codec->pci->irq, snd_ali_card_interrupt, IRQF_DISABLED|IRQF_SHARED, "ALI 5451", (void *)codec)) { if (request_irq(codec->pci->irq, snd_ali_card_interrupt,
IRQF_SHARED, "ALI 5451", codec)) {
snd_printk(KERN_ERR "Unable to request irq.\n"); snd_printk(KERN_ERR "Unable to request irq.\n");
return -EBUSY; return -EBUSY;
} }

View File

@ -190,7 +190,7 @@ static int snd_als300_free(struct snd_als300 *chip)
snd_als300_dbgcallenter(); snd_als300_dbgcallenter();
snd_als300_set_irq_flag(chip, IRQ_DISABLE); snd_als300_set_irq_flag(chip, IRQ_DISABLE);
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void *)chip); free_irq(chip->irq, chip);
pci_release_regions(chip->pci); pci_release_regions(chip->pci);
pci_disable_device(chip->pci); pci_disable_device(chip->pci);
kfree(chip); kfree(chip);
@ -722,8 +722,8 @@ static int __devinit snd_als300_create(snd_card_t *card,
else else
irq_handler = snd_als300_interrupt; irq_handler = snd_als300_interrupt;
if (request_irq(pci->irq, irq_handler, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, irq_handler, IRQF_SHARED,
card->shortname, (void *)chip)) { card->shortname, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_als300_free(chip); snd_als300_free(chip);
return -EBUSY; return -EBUSY;

View File

@ -1583,7 +1583,7 @@ static int __devinit snd_atiixp_create(struct snd_card *card,
return -EIO; return -EIO;
} }
if (request_irq(pci->irq, snd_atiixp_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_atiixp_interrupt, IRQF_SHARED,
card->shortname, chip)) { card->shortname, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_atiixp_free(chip); snd_atiixp_free(chip);

View File

@ -1256,7 +1256,7 @@ static int __devinit snd_atiixp_create(struct snd_card *card,
return -EIO; return -EIO;
} }
if (request_irq(pci->irq, snd_atiixp_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_atiixp_interrupt, IRQF_SHARED,
card->shortname, chip)) { card->shortname, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_atiixp_free(chip); snd_atiixp_free(chip);

View File

@ -198,7 +198,7 @@ snd_vortex_create(struct snd_card *card, struct pci_dev *pci, vortex_t ** rchip)
} }
if ((err = request_irq(pci->irq, vortex_interrupt, if ((err = request_irq(pci->irq, vortex_interrupt,
IRQF_DISABLED | IRQF_SHARED, CARD_NAME_SHORT, IRQF_SHARED, CARD_NAME_SHORT,
chip)) != 0) { chip)) != 0) {
printk(KERN_ERR "cannot grab irq\n"); printk(KERN_ERR "cannot grab irq\n");
goto irq_out; goto irq_out;

View File

@ -1513,7 +1513,7 @@ snd_azf3328_free(struct snd_azf3328 *chip)
__end_hw: __end_hw:
snd_azf3328_free_joystick(chip); snd_azf3328_free_joystick(chip);
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void *)chip); free_irq(chip->irq, chip);
pci_release_regions(chip->pci); pci_release_regions(chip->pci);
pci_disable_device(chip->pci); pci_disable_device(chip->pci);
@ -1724,7 +1724,8 @@ snd_azf3328_create(struct snd_card *card,
chip->synth_port = pci_resource_start(pci, 3); chip->synth_port = pci_resource_start(pci, 3);
chip->mixer_port = pci_resource_start(pci, 4); chip->mixer_port = pci_resource_start(pci, 4);
if (request_irq(pci->irq, snd_azf3328_interrupt, IRQF_DISABLED|IRQF_SHARED, card->shortname, (void *)chip)) { if (request_irq(pci->irq, snd_azf3328_interrupt,
IRQF_SHARED, card->shortname, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
err = -EBUSY; err = -EBUSY;
goto out_err; goto out_err;

View File

@ -699,7 +699,7 @@ static int __devinit snd_bt87x_pcm(struct snd_bt87x *chip, int device, char *nam
SNDRV_DMA_TYPE_DEV_SG, SNDRV_DMA_TYPE_DEV_SG,
snd_dma_pci_data(chip->pci), snd_dma_pci_data(chip->pci),
128 * 1024, 128 * 1024,
(255 * 4092 + 1023) & ~1023); ALIGN(255 * 4092, 1024));
} }
static int __devinit snd_bt87x_create(struct snd_card *card, static int __devinit snd_bt87x_create(struct snd_card *card,
@ -747,7 +747,7 @@ static int __devinit snd_bt87x_create(struct snd_card *card,
snd_bt87x_writel(chip, REG_INT_MASK, 0); snd_bt87x_writel(chip, REG_INT_MASK, 0);
snd_bt87x_writel(chip, REG_INT_STAT, MY_INTERRUPTS); snd_bt87x_writel(chip, REG_INT_STAT, MY_INTERRUPTS);
if (request_irq(pci->irq, snd_bt87x_interrupt, IRQF_DISABLED | IRQF_SHARED, if (request_irq(pci->irq, snd_bt87x_interrupt, IRQF_SHARED,
"Bt87x audio", chip)) { "Bt87x audio", chip)) {
snd_bt87x_free(chip); snd_bt87x_free(chip);
snd_printk(KERN_ERR "cannot grab irq\n"); snd_printk(KERN_ERR "cannot grab irq\n");

View File

@ -590,7 +590,7 @@ struct snd_ca0106 {
struct resource *res_port; struct resource *res_port;
int irq; int irq;
unsigned int revision; /* chip revision */ unsigned char revision; /* chip revision */
unsigned int serial; /* serial number */ unsigned int serial; /* serial number */
unsigned short model; /* subsystem id */ unsigned short model; /* subsystem id */

View File

@ -154,6 +154,7 @@ MODULE_SUPPORTED_DEVICE("{{Creative,SB CA0106 chip}}");
static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX; static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
static uint subsystem[SNDRV_CARDS]; /* Force card subsystem model */
module_param_array(index, int, NULL, 0444); module_param_array(index, int, NULL, 0444);
MODULE_PARM_DESC(index, "Index value for the CA0106 soundcard."); MODULE_PARM_DESC(index, "Index value for the CA0106 soundcard.");
@ -161,6 +162,8 @@ module_param_array(id, charp, NULL, 0444);
MODULE_PARM_DESC(id, "ID string for the CA0106 soundcard."); MODULE_PARM_DESC(id, "ID string for the CA0106 soundcard.");
module_param_array(enable, bool, NULL, 0444); module_param_array(enable, bool, NULL, 0444);
MODULE_PARM_DESC(enable, "Enable the CA0106 soundcard."); MODULE_PARM_DESC(enable, "Enable the CA0106 soundcard.");
module_param_array(subsystem, uint, NULL, 0444);
MODULE_PARM_DESC(subsystem, "Force card subsystem model.");
#include "ca0106.h" #include "ca0106.h"
@ -194,6 +197,17 @@ static struct snd_ca0106_details ca0106_chip_details[] = {
.gpio_type = 1, .gpio_type = 1,
.i2c_adc = 1, .i2c_adc = 1,
.spi_dac = 1 } , .spi_dac = 1 } ,
/* New Audigy LS. Has a different DAC. */
/* SB0570:
* CTRL:CA0106-DAT
* ADC: WM8775EDS
* DAC: WM8768GEDS
*/
{ .serial = 0x10111102,
.name = "Audigy SE OEM [SB0570a]",
.gpio_type = 1,
.i2c_adc = 1,
.spi_dac = 1 } ,
/* MSI K8N Diamond Motherboard with onboard SB Live 24bit without AC97 */ /* MSI K8N Diamond Motherboard with onboard SB Live 24bit without AC97 */
/* SB0438 /* SB0438
* CTRL:CA0106-DAT * CTRL:CA0106-DAT
@ -1046,7 +1060,7 @@ static int snd_ca0106_free(struct snd_ca0106 *chip)
// release the irq // release the irq
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void *)chip); free_irq(chip->irq, chip);
pci_disable_device(chip->pci); pci_disable_device(chip->pci);
kfree(chip); kfree(chip);
return 0; return 0;
@ -1223,7 +1237,7 @@ static unsigned int i2c_adc_init[][2] = {
{ 0x15, ADC_MUX_LINEIN }, /* ADC Mixer control */ { 0x15, ADC_MUX_LINEIN }, /* ADC Mixer control */
}; };
static int __devinit snd_ca0106_create(struct snd_card *card, static int __devinit snd_ca0106_create(int dev, struct snd_card *card,
struct pci_dev *pci, struct pci_dev *pci,
struct snd_ca0106 **rchip) struct snd_ca0106 **rchip)
{ {
@ -1267,8 +1281,7 @@ static int __devinit snd_ca0106_create(struct snd_card *card,
} }
if (request_irq(pci->irq, snd_ca0106_interrupt, if (request_irq(pci->irq, snd_ca0106_interrupt,
IRQF_DISABLED|IRQF_SHARED, "snd_ca0106", IRQF_SHARED, "snd_ca0106", chip)) {
(void *)chip)) {
snd_ca0106_free(chip); snd_ca0106_free(chip);
printk(KERN_ERR "cannot grab irq\n"); printk(KERN_ERR "cannot grab irq\n");
return -EBUSY; return -EBUSY;
@ -1283,21 +1296,29 @@ static int __devinit snd_ca0106_create(struct snd_card *card,
pci_set_master(pci); pci_set_master(pci);
/* read revision & serial */ /* read revision & serial */
pci_read_config_byte(pci, PCI_REVISION_ID, (char *)&chip->revision); pci_read_config_byte(pci, PCI_REVISION_ID, &chip->revision);
pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &chip->serial); pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &chip->serial);
pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &chip->model); pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &chip->model);
#if 1 #if 1
printk(KERN_INFO "Model %04x Rev %08x Serial %08x\n", chip->model, printk(KERN_INFO "snd-ca0106: Model %04x Rev %08x Serial %08x\n", chip->model,
chip->revision, chip->serial); chip->revision, chip->serial);
#endif #endif
strcpy(card->driver, "CA0106"); strcpy(card->driver, "CA0106");
strcpy(card->shortname, "CA0106"); strcpy(card->shortname, "CA0106");
for (c = ca0106_chip_details; c->serial; c++) { for (c = ca0106_chip_details; c->serial; c++) {
if (c->serial == chip->serial) if (subsystem[dev]) {
if (c->serial == subsystem[dev])
break;
} else if (c->serial == chip->serial)
break; break;
} }
chip->details = c; chip->details = c;
if (subsystem[dev]) {
printk(KERN_INFO "snd-ca0106: Sound card name=%s, subsystem=0x%x. Forced to subsystem=0x%x\n",
c->name, chip->serial, subsystem[dev]);
}
sprintf(card->longname, "%s at 0x%lx irq %i", sprintf(card->longname, "%s at 0x%lx irq %i",
c->name, chip->port, chip->irq); c->name, chip->port, chip->irq);
@ -1540,7 +1561,7 @@ static int __devinit snd_ca0106_probe(struct pci_dev *pci,
if (card == NULL) if (card == NULL)
return -ENOMEM; return -ENOMEM;
if ((err = snd_ca0106_create(card, pci, &chip)) < 0) { if ((err = snd_ca0106_create(dev, card, pci, &chip)) < 0) {
snd_card_free(card); snd_card_free(card);
return err; return err;
} }

View File

@ -2862,7 +2862,7 @@ static int __devinit snd_cmipci_create(struct snd_card *card, struct pci_dev *pc
cm->iobase = pci_resource_start(pci, 0); cm->iobase = pci_resource_start(pci, 0);
if (request_irq(pci->irq, snd_cmipci_interrupt, if (request_irq(pci->irq, snd_cmipci_interrupt,
IRQF_DISABLED|IRQF_SHARED, card->driver, cm)) { IRQF_SHARED, card->driver, cm)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_cmipci_free(cm); snd_cmipci_free(cm);
return -EBUSY; return -EBUSY;

View File

@ -1391,7 +1391,7 @@ static int __devinit snd_cs4281_create(struct snd_card *card,
return -ENOMEM; return -ENOMEM;
} }
if (request_irq(pci->irq, snd_cs4281_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_cs4281_interrupt, IRQF_SHARED,
"CS4281", chip)) { "CS4281", chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_cs4281_free(chip); snd_cs4281_free(chip);

View File

@ -3867,7 +3867,7 @@ int __devinit snd_cs46xx_create(struct snd_card *card,
} }
} }
if (request_irq(pci->irq, snd_cs46xx_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_cs46xx_interrupt, IRQF_SHARED,
"CS46XX", chip)) { "CS46XX", chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_cs46xx_free(chip); snd_cs46xx_free(chip);

View File

@ -320,7 +320,7 @@ static int __devinit snd_cs5535audio_create(struct snd_card *card,
cs5535au->port = pci_resource_start(pci, 0); cs5535au->port = pci_resource_start(pci, 0);
if (request_irq(pci->irq, snd_cs5535audio_interrupt, if (request_irq(pci->irq, snd_cs5535audio_interrupt,
IRQF_DISABLED|IRQF_SHARED, "CS5535 Audio", cs5535au)) { IRQF_SHARED, "CS5535 Audio", cs5535au)) {
snd_printk("unable to grab IRQ %d\n", pci->irq); snd_printk("unable to grab IRQ %d\n", pci->irq);
err = -EBUSY; err = -EBUSY;
goto sndfail; goto sndfail;

View File

@ -1872,7 +1872,7 @@ static int snd_echo_free(struct echoaudio *chip)
DE_INIT(("Stopped.\n")); DE_INIT(("Stopped.\n"));
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void *)chip); free_irq(chip->irq, chip);
if (chip->dsp_registers) if (chip->dsp_registers)
iounmap(chip->dsp_registers); iounmap(chip->dsp_registers);
@ -1950,8 +1950,8 @@ static __devinit int snd_echo_create(struct snd_card *card,
chip->dsp_registers = (volatile u32 __iomem *) chip->dsp_registers = (volatile u32 __iomem *)
ioremap_nocache(chip->dsp_registers_phys, sz); ioremap_nocache(chip->dsp_registers_phys, sz);
if (request_irq(pci->irq, snd_echo_interrupt, IRQF_DISABLED | IRQF_SHARED, if (request_irq(pci->irq, snd_echo_interrupt, IRQF_SHARED,
ECHOCARD_NAME, (void *)chip)) { ECHOCARD_NAME, chip)) {
snd_echo_free(chip); snd_echo_free(chip);
snd_printk(KERN_ERR "cannot grab irq\n"); snd_printk(KERN_ERR "cannot grab irq\n");
return -EBUSY; return -EBUSY;

View File

@ -759,7 +759,7 @@ static int snd_emu10k1_free(struct snd_emu10k1 *emu)
free_pm_buffer(emu); free_pm_buffer(emu);
#endif #endif
if (emu->irq >= 0) if (emu->irq >= 0)
free_irq(emu->irq, (void *)emu); free_irq(emu->irq, emu);
if (emu->port) if (emu->port)
pci_release_regions(emu->pci); pci_release_regions(emu->pci);
if (emu->card_capabilities->ca0151_chip) /* P16V */ if (emu->card_capabilities->ca0151_chip) /* P16V */
@ -1246,7 +1246,8 @@ int __devinit snd_emu10k1_create(struct snd_card *card,
} }
emu->port = pci_resource_start(pci, 0); emu->port = pci_resource_start(pci, 0);
if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_DISABLED|IRQF_SHARED, "EMU10K1", (void *)emu)) { if (request_irq(pci->irq, snd_emu10k1_interrupt, IRQF_SHARED,
"EMU10K1", emu)) {
err = -EBUSY; err = -EBUSY;
goto error; goto error;
} }

View File

@ -235,7 +235,7 @@ struct emu10k1x {
struct resource *res_port; struct resource *res_port;
int irq; int irq;
unsigned int revision; /* chip revision */ unsigned char revision; /* chip revision */
unsigned int serial; /* serial number */ unsigned int serial; /* serial number */
unsigned short model; /* subsystem id */ unsigned short model; /* subsystem id */
@ -760,7 +760,7 @@ static int snd_emu10k1x_free(struct emu10k1x *chip)
// release the irq // release the irq
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void *)chip); free_irq(chip->irq, chip);
// release the DMA // release the DMA
if (chip->dma_buffer.area) { if (chip->dma_buffer.area) {
@ -927,8 +927,7 @@ static int __devinit snd_emu10k1x_create(struct snd_card *card,
} }
if (request_irq(pci->irq, snd_emu10k1x_interrupt, if (request_irq(pci->irq, snd_emu10k1x_interrupt,
IRQF_DISABLED|IRQF_SHARED, "EMU10K1X", IRQF_SHARED, "EMU10K1X", chip)) {
(void *)chip)) {
snd_printk(KERN_ERR "emu10k1x: cannot grab irq %d\n", pci->irq); snd_printk(KERN_ERR "emu10k1x: cannot grab irq %d\n", pci->irq);
snd_emu10k1x_free(chip); snd_emu10k1x_free(chip);
return -EBUSY; return -EBUSY;
@ -943,7 +942,7 @@ static int __devinit snd_emu10k1x_create(struct snd_card *card,
pci_set_master(pci); pci_set_master(pci);
/* read revision & serial */ /* read revision & serial */
pci_read_config_byte(pci, PCI_REVISION_ID, (char *)&chip->revision); pci_read_config_byte(pci, PCI_REVISION_ID, &chip->revision);
pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &chip->serial); pci_read_config_dword(pci, PCI_SUBSYSTEM_VENDOR_ID, &chip->serial);
pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &chip->model); pci_read_config_word(pci, PCI_SUBSYSTEM_ID, &chip->model);
snd_printk(KERN_INFO "Model %04x Rev %08x Serial %08x\n", chip->model, snd_printk(KERN_INFO "Model %04x Rev %08x Serial %08x\n", chip->model,

View File

@ -2141,7 +2141,7 @@ static int __devinit snd_ensoniq_create(struct snd_card *card,
return err; return err;
} }
ensoniq->port = pci_resource_start(pci, 0); ensoniq->port = pci_resource_start(pci, 0);
if (request_irq(pci->irq, snd_audiopci_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_audiopci_interrupt, IRQF_SHARED,
"Ensoniq AudioPCI", ensoniq)) { "Ensoniq AudioPCI", ensoniq)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_ensoniq_free(ensoniq); snd_ensoniq_free(ensoniq);

View File

@ -1508,7 +1508,7 @@ static int es1938_resume(struct pci_dev *pci)
} }
if (request_irq(pci->irq, snd_es1938_interrupt, if (request_irq(pci->irq, snd_es1938_interrupt,
IRQF_DISABLED|IRQF_SHARED, "ES1938", chip)) { IRQF_SHARED, "ES1938", chip)) {
printk(KERN_ERR "es1938: unable to grab IRQ %d, " printk(KERN_ERR "es1938: unable to grab IRQ %d, "
"disabling device\n", pci->irq); "disabling device\n", pci->irq);
snd_card_disconnect(card); snd_card_disconnect(card);
@ -1631,7 +1631,7 @@ static int __devinit snd_es1938_create(struct snd_card *card,
chip->vc_port = pci_resource_start(pci, 2); chip->vc_port = pci_resource_start(pci, 2);
chip->mpu_port = pci_resource_start(pci, 3); chip->mpu_port = pci_resource_start(pci, 3);
chip->game_port = pci_resource_start(pci, 4); chip->game_port = pci_resource_start(pci, 4);
if (request_irq(pci->irq, snd_es1938_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_es1938_interrupt, IRQF_SHARED,
"ES1938", chip)) { "ES1938", chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_es1938_free(chip); snd_es1938_free(chip);

View File

@ -1337,7 +1337,7 @@ static struct esm_memory *snd_es1968_new_memory(struct es1968 *chip, int size)
struct esm_memory *buf; struct esm_memory *buf;
struct list_head *p; struct list_head *p;
size = ((size + ESM_MEM_ALIGN - 1) / ESM_MEM_ALIGN) * ESM_MEM_ALIGN; size = ALIGN(size, ESM_MEM_ALIGN);
mutex_lock(&chip->memory_mutex); mutex_lock(&chip->memory_mutex);
list_for_each(p, &chip->buf_list) { list_for_each(p, &chip->buf_list) {
buf = list_entry(p, struct esm_memory, list); buf = list_entry(p, struct esm_memory, list);
@ -2462,7 +2462,7 @@ static int snd_es1968_free(struct es1968 *chip)
} }
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void *)chip); free_irq(chip->irq, chip);
snd_es1968_free_gameport(chip); snd_es1968_free_gameport(chip);
chip->master_switch = NULL; chip->master_switch = NULL;
chip->master_volume = NULL; chip->master_volume = NULL;
@ -2552,8 +2552,8 @@ static int __devinit snd_es1968_create(struct snd_card *card,
return err; return err;
} }
chip->io_port = pci_resource_start(pci, 0); chip->io_port = pci_resource_start(pci, 0);
if (request_irq(pci->irq, snd_es1968_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_es1968_interrupt, IRQF_SHARED,
"ESS Maestro", (void*)chip)) { "ESS Maestro", chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_es1968_free(chip); snd_es1968_free(chip);
return -EBUSY; return -EBUSY;

View File

@ -1395,7 +1395,7 @@ static int __devinit snd_fm801_create(struct snd_card *card,
} }
chip->port = pci_resource_start(pci, 0); chip->port = pci_resource_start(pci, 0);
if ((tea575x_tuner & 0x0010) == 0) { if ((tea575x_tuner & 0x0010) == 0) {
if (request_irq(pci->irq, snd_fm801_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_fm801_interrupt, IRQF_SHARED,
"FM801", chip)) { "FM801", chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", chip->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", chip->irq);
snd_fm801_free(chip); snd_fm801_free(chip);

View File

@ -1367,9 +1367,6 @@ static struct hda_rate_tbl rate_bits[] = {
{ 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */ { 176400, SNDRV_PCM_RATE_176400, 0x5800 },/* 4 x 44 */
{ 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */ { 192000, SNDRV_PCM_RATE_192000, 0x1800 }, /* 4 x 48 */
/* not autodetected value */
{ 9600, SNDRV_PCM_RATE_KNOT, 0x0400 }, /* 1/5 x 48 */
{ 0 } /* terminator */ { 0 } /* terminator */
}; };

View File

@ -1380,7 +1380,8 @@ static int __devinit azx_init_stream(struct azx *chip)
static int azx_acquire_irq(struct azx *chip, int do_disconnect) static int azx_acquire_irq(struct azx *chip, int do_disconnect)
{ {
if (request_irq(chip->pci->irq, azx_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(chip->pci->irq, azx_interrupt,
chip->msi ? 0 : IRQF_SHARED,
"HDA Intel", chip)) { "HDA Intel", chip)) {
printk(KERN_ERR "hda-intel: unable to grab IRQ %d, " printk(KERN_ERR "hda-intel: unable to grab IRQ %d, "
"disabling device\n", chip->pci->irq); "disabling device\n", chip->pci->irq);

View File

@ -45,7 +45,7 @@ static const char *get_wid_type_name(unsigned int wid_value)
if (names[wid_value]) if (names[wid_value])
return names[wid_value]; return names[wid_value];
else else
return "UNKOWN Widget"; return "UNKNOWN Widget";
} }
static void print_amp_caps(struct snd_info_buffer *buffer, static void print_amp_caps(struct snd_info_buffer *buffer,
@ -88,6 +88,48 @@ static void print_amp_vals(struct snd_info_buffer *buffer,
snd_iprintf(buffer, "\n"); snd_iprintf(buffer, "\n");
} }
static void print_pcm_rates(struct snd_info_buffer *buffer, unsigned int pcm)
{
static unsigned int rates[] = {
8000, 11025, 16000, 22050, 32000, 44100, 48000, 88200,
96000, 176400, 192000, 384000
};
int i;
pcm &= AC_SUPPCM_RATES;
snd_iprintf(buffer, " rates [0x%x]:", pcm);
for (i = 0; i < ARRAY_SIZE(rates); i++)
if (pcm & (1 << i))
snd_iprintf(buffer, " %d", rates[i]);
snd_iprintf(buffer, "\n");
}
static void print_pcm_bits(struct snd_info_buffer *buffer, unsigned int pcm)
{
static unsigned int bits[] = { 8, 16, 20, 24, 32 };
int i;
pcm = (pcm >> 16) & 0xff;
snd_iprintf(buffer, " bits [0x%x]:", pcm);
for (i = 0; i < ARRAY_SIZE(bits); i++)
if (pcm & (1 << i))
snd_iprintf(buffer, " %d", bits[i]);
snd_iprintf(buffer, "\n");
}
static void print_pcm_formats(struct snd_info_buffer *buffer,
unsigned int streams)
{
snd_iprintf(buffer, " formats [0x%x]:", streams & 0xf);
if (streams & AC_SUPFMT_PCM)
snd_iprintf(buffer, " PCM");
if (streams & AC_SUPFMT_FLOAT32)
snd_iprintf(buffer, " FLOAT");
if (streams & AC_SUPFMT_AC3)
snd_iprintf(buffer, " AC3");
snd_iprintf(buffer, "\n");
}
static void print_pcm_caps(struct snd_info_buffer *buffer, static void print_pcm_caps(struct snd_info_buffer *buffer,
struct hda_codec *codec, hda_nid_t nid) struct hda_codec *codec, hda_nid_t nid)
{ {
@ -97,8 +139,9 @@ static void print_pcm_caps(struct snd_info_buffer *buffer,
snd_iprintf(buffer, "N/A\n"); snd_iprintf(buffer, "N/A\n");
return; return;
} }
snd_iprintf(buffer, "rates 0x%03x, bits 0x%02x, types 0x%x\n", print_pcm_rates(buffer, pcm);
pcm & AC_SUPPCM_RATES, (pcm >> 16) & 0xff, stream & 0xf); print_pcm_bits(buffer, pcm);
print_pcm_formats(buffer, stream);
} }
static const char *get_jack_location(u32 cfg) static const char *get_jack_location(u32 cfg)
@ -210,7 +253,7 @@ static void print_codec_info(struct snd_info_entry *entry, struct snd_info_buffe
snd_iprintf(buffer, "Revision Id: 0x%x\n", codec->revision_id); snd_iprintf(buffer, "Revision Id: 0x%x\n", codec->revision_id);
if (! codec->afg) if (! codec->afg)
return; return;
snd_iprintf(buffer, "Default PCM: "); snd_iprintf(buffer, "Default PCM:\n");
print_pcm_caps(buffer, codec, codec->afg); print_pcm_caps(buffer, codec, codec->afg);
snd_iprintf(buffer, "Default Amp-In caps: "); snd_iprintf(buffer, "Default Amp-In caps: ");
print_amp_caps(buffer, codec, codec->afg, HDA_INPUT); print_amp_caps(buffer, codec, codec->afg, HDA_INPUT);
@ -278,7 +321,7 @@ static void print_codec_info(struct snd_info_entry *entry, struct snd_info_buffe
if ((wid_type == AC_WID_AUD_OUT || wid_type == AC_WID_AUD_IN) && if ((wid_type == AC_WID_AUD_OUT || wid_type == AC_WID_AUD_IN) &&
(wid_caps & AC_WCAP_FORMAT_OVRD)) { (wid_caps & AC_WCAP_FORMAT_OVRD)) {
snd_iprintf(buffer, " PCM: "); snd_iprintf(buffer, " PCM:\n");
print_pcm_caps(buffer, codec, nid); print_pcm_caps(buffer, codec, nid);
} }

View File

@ -794,6 +794,8 @@ static struct hda_board_config ad1986a_cfg_tbl[] = {
{ .modelname = "3stack", .config = AD1986A_3STACK }, { .modelname = "3stack", .config = AD1986A_3STACK },
{ .pci_subvendor = 0x10de, .pci_subdevice = 0xcb84, { .pci_subvendor = 0x10de, .pci_subdevice = 0xcb84,
.config = AD1986A_3STACK }, /* ASUS A8N-VM CSM */ .config = AD1986A_3STACK }, /* ASUS A8N-VM CSM */
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x817f,
.config = AD1986A_3STACK }, /* ASUS P5P-L2 */
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x81b3, { .pci_subvendor = 0x1043, .pci_subdevice = 0x81b3,
.config = AD1986A_3STACK }, /* ASUS P5RD2-VM / P5GPL-X SE */ .config = AD1986A_3STACK }, /* ASUS P5RD2-VM / P5GPL-X SE */
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x81cb, { .pci_subvendor = 0x1043, .pci_subdevice = 0x81cb,
@ -811,7 +813,7 @@ static struct hda_board_config ad1986a_cfg_tbl[] = {
{ .pci_subvendor = 0x144d, .pci_subdevice = 0xc024, { .pci_subvendor = 0x144d, .pci_subdevice = 0xc024,
.config = AD1986A_LAPTOP_EAPD }, /* Samsung R65-T2300 Charis */ .config = AD1986A_LAPTOP_EAPD }, /* Samsung R65-T2300 Charis */
{ .pci_subvendor = 0x144d, .pci_subdevice = 0xc026, { .pci_subvendor = 0x144d, .pci_subdevice = 0xc026,
.config = AD1986A_LAPTOP_EAPD }, /* Samsung X10-T2300 Culesa */ .config = AD1986A_LAPTOP_EAPD }, /* Samsung X11-T2300 Culesa */
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1153, { .pci_subvendor = 0x1043, .pci_subdevice = 0x1153,
.config = AD1986A_LAPTOP_EAPD }, /* ASUS M9 */ .config = AD1986A_LAPTOP_EAPD }, /* ASUS M9 */
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1213, { .pci_subvendor = 0x1043, .pci_subdevice = 0x1213,
@ -822,6 +824,8 @@ static struct hda_board_config ad1986a_cfg_tbl[] = {
.config = AD1986A_LAPTOP_EAPD }, /* ASUS U5F */ .config = AD1986A_LAPTOP_EAPD }, /* ASUS U5F */
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x1297, { .pci_subvendor = 0x1043, .pci_subdevice = 0x1297,
.config = AD1986A_LAPTOP_EAPD }, /* ASUS Z62F */ .config = AD1986A_LAPTOP_EAPD }, /* ASUS Z62F */
{ .pci_subvendor = 0x1043, .pci_subdevice = 0x12b3,
.config = AD1986A_LAPTOP_EAPD }, /* ASUS V1j */
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x30af, { .pci_subvendor = 0x103c, .pci_subdevice = 0x30af,
.config = AD1986A_LAPTOP_EAPD }, /* HP Compaq Presario B2800 */ .config = AD1986A_LAPTOP_EAPD }, /* HP Compaq Presario B2800 */
{ .pci_subvendor = 0x17aa, .pci_subdevice = 0x2066, { .pci_subvendor = 0x17aa, .pci_subdevice = 0x2066,
@ -1640,7 +1644,7 @@ static int ad198x_ch_mode_put(struct snd_kcontrol *kcontrol,
int err = snd_hda_ch_mode_put(codec, ucontrol, spec->channel_mode, int err = snd_hda_ch_mode_put(codec, ucontrol, spec->channel_mode,
spec->num_channel_mode, spec->num_channel_mode,
&spec->multiout.max_channels); &spec->multiout.max_channels);
if (! err && spec->need_dac_fix) if (err >= 0 && spec->need_dac_fix)
spec->multiout.num_dacs = spec->multiout.max_channels / 2; spec->multiout.num_dacs = spec->multiout.max_channels / 2;
return err; return err;
} }

View File

@ -271,7 +271,7 @@ static int alc_ch_mode_put(struct snd_kcontrol *kcontrol,
int err = snd_hda_ch_mode_put(codec, ucontrol, spec->channel_mode, int err = snd_hda_ch_mode_put(codec, ucontrol, spec->channel_mode,
spec->num_channel_mode, spec->num_channel_mode,
&spec->multiout.max_channels); &spec->multiout.max_channels);
if (! err && spec->need_dac_fix) if (err >= 0 && spec->need_dac_fix)
spec->multiout.num_dacs = spec->multiout.max_channels / 2; spec->multiout.num_dacs = spec->multiout.max_channels / 2;
return err; return err;
} }
@ -5872,6 +5872,8 @@ static struct hda_board_config alc262_cfg_tbl[] = {
{ .modelname = "hp-bpc", .config = ALC262_HP_BPC }, { .modelname = "hp-bpc", .config = ALC262_HP_BPC },
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x280c, { .pci_subvendor = 0x103c, .pci_subdevice = 0x280c,
.config = ALC262_HP_BPC }, /* xw4400 */ .config = ALC262_HP_BPC }, /* xw4400 */
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x2801,
.config = ALC262_HP_BPC }, /* q965 */
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3014, { .pci_subvendor = 0x103c, .pci_subdevice = 0x3014,
.config = ALC262_HP_BPC }, /* xw6400 */ .config = ALC262_HP_BPC }, /* xw6400 */
{ .pci_subvendor = 0x103c, .pci_subdevice = 0x3015, { .pci_subvendor = 0x103c, .pci_subdevice = 0x3015,

View File

@ -243,7 +243,8 @@ static int si3054_init(struct hda_codec *codec)
if((val&SI3054_MEI_READY) != SI3054_MEI_READY) { if((val&SI3054_MEI_READY) != SI3054_MEI_READY) {
snd_printk(KERN_ERR "si3054: cannot initialize. EXT MID = %04x\n", val); snd_printk(KERN_ERR "si3054: cannot initialize. EXT MID = %04x\n", val);
return -EACCES; /* let's pray that this is no fatal error */
/* return -EACCES; */
} }
SET_REG(codec, SI3054_GPIO_POLARITY, 0xffff); SET_REG(codec, SI3054_GPIO_POLARITY, 0xffff);

View File

@ -2614,7 +2614,7 @@ static int __devinit snd_ice1712_create(struct snd_card *card,
ice->dmapath_port = pci_resource_start(pci, 2); ice->dmapath_port = pci_resource_start(pci, 2);
ice->profi_port = pci_resource_start(pci, 3); ice->profi_port = pci_resource_start(pci, 3);
if (request_irq(pci->irq, snd_ice1712_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_ice1712_interrupt, IRQF_SHARED,
"ICE1712", ice)) { "ICE1712", ice)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_ice1712_free(ice); snd_ice1712_free(ice);

View File

@ -2253,7 +2253,7 @@ static int __devinit snd_vt1724_create(struct snd_card *card,
ice->profi_port = pci_resource_start(pci, 1); ice->profi_port = pci_resource_start(pci, 1);
if (request_irq(pci->irq, snd_vt1724_interrupt, if (request_irq(pci->irq, snd_vt1724_interrupt,
IRQF_DISABLED|IRQF_SHARED, "ICE1724", ice)) { IRQF_SHARED, "ICE1724", ice)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_vt1724_free(ice); snd_vt1724_free(ice);
return -EIO; return -EIO;

View File

@ -2509,7 +2509,7 @@ static int intel8x0_resume(struct pci_dev *pci)
} }
pci_set_master(pci); pci_set_master(pci);
if (request_irq(pci->irq, snd_intel8x0_interrupt, if (request_irq(pci->irq, snd_intel8x0_interrupt,
IRQF_DISABLED|IRQF_SHARED, card->shortname, chip)) { IRQF_SHARED, card->shortname, chip)) {
printk(KERN_ERR "intel8x0: unable to grab IRQ %d, " printk(KERN_ERR "intel8x0: unable to grab IRQ %d, "
"disabling device\n", pci->irq); "disabling device\n", pci->irq);
snd_card_disconnect(card); snd_card_disconnect(card);
@ -2887,7 +2887,7 @@ static int __devinit snd_intel8x0_create(struct snd_card *card,
/* request irq after initializaing int_sta_mask, etc */ /* request irq after initializaing int_sta_mask, etc */
if (request_irq(pci->irq, snd_intel8x0_interrupt, if (request_irq(pci->irq, snd_intel8x0_interrupt,
IRQF_DISABLED|IRQF_SHARED, card->shortname, chip)) { IRQF_SHARED, card->shortname, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_intel8x0_free(chip); snd_intel8x0_free(chip);
return -EBUSY; return -EBUSY;

View File

@ -1071,7 +1071,7 @@ static int intel8x0m_resume(struct pci_dev *pci)
} }
pci_set_master(pci); pci_set_master(pci);
if (request_irq(pci->irq, snd_intel8x0_interrupt, if (request_irq(pci->irq, snd_intel8x0_interrupt,
IRQF_DISABLED|IRQF_SHARED, card->shortname, chip)) { IRQF_SHARED, card->shortname, chip)) {
printk(KERN_ERR "intel8x0m: unable to grab IRQ %d, " printk(KERN_ERR "intel8x0m: unable to grab IRQ %d, "
"disabling device\n", pci->irq); "disabling device\n", pci->irq);
snd_card_disconnect(card); snd_card_disconnect(card);
@ -1205,7 +1205,7 @@ static int __devinit snd_intel8x0m_create(struct snd_card *card,
} }
port_inited: port_inited:
if (request_irq(pci->irq, snd_intel8x0_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_intel8x0_interrupt, IRQF_SHARED,
card->shortname, chip)) { card->shortname, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_intel8x0_free(chip); snd_intel8x0_free(chip);

View File

@ -2233,7 +2233,7 @@ static int __devinit snd_korg1212_create(struct snd_card *card, struct pci_dev *
} }
err = request_irq(pci->irq, snd_korg1212_interrupt, err = request_irq(pci->irq, snd_korg1212_interrupt,
IRQF_DISABLED|IRQF_SHARED, IRQF_SHARED,
"korg1212", korg1212); "korg1212", korg1212);
if (err) { if (err) {

View File

@ -2377,7 +2377,7 @@ static int __devinit snd_m3_assp_client_init(struct snd_m3 *chip, struct m3_dma
* shifted list address is aligned. * shifted list address is aligned.
* list address = (mem address >> 1) >> 7; * list address = (mem address >> 1) >> 7;
*/ */
data_bytes = (data_bytes + 255) & ~255; data_bytes = ALIGN(data_bytes, 256);
address = 0x1100 + ((data_bytes/2) * index); address = 0x1100 + ((data_bytes/2) * index);
if ((address + (data_bytes/2)) >= 0x1c00) { if ((address + (data_bytes/2)) >= 0x1c00) {
@ -2762,7 +2762,7 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,
tasklet_init(&chip->hwvol_tq, snd_m3_update_hw_volume, (unsigned long)chip); tasklet_init(&chip->hwvol_tq, snd_m3_update_hw_volume, (unsigned long)chip);
if (request_irq(pci->irq, snd_m3_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED,
card->driver, chip)) { card->driver, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_m3_free(chip); snd_m3_free(chip);

View File

@ -1066,7 +1066,7 @@ static int snd_mixart_free(struct mixart_mgr *mgr)
/* release irq */ /* release irq */
if (mgr->irq >= 0) if (mgr->irq >= 0)
free_irq(mgr->irq, (void *)mgr); free_irq(mgr->irq, mgr);
/* reset board if some firmware was loaded */ /* reset board if some firmware was loaded */
if(mgr->dsp_loaded) { if(mgr->dsp_loaded) {
@ -1319,7 +1319,8 @@ static int __devinit snd_mixart_probe(struct pci_dev *pci,
pci_resource_len(pci, i)); pci_resource_len(pci, i));
} }
if (request_irq(pci->irq, snd_mixart_interrupt, IRQF_DISABLED|IRQF_SHARED, CARD_NAME, (void *)mgr)) { if (request_irq(pci->irq, snd_mixart_interrupt, IRQF_SHARED,
CARD_NAME, mgr)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_mixart_free(mgr); snd_mixart_free(mgr);
return -EBUSY; return -EBUSY;

View File

@ -465,7 +465,7 @@ static int snd_nm256_acquire_irq(struct nm256 *chip)
{ {
mutex_lock(&chip->irq_mutex); mutex_lock(&chip->irq_mutex);
if (chip->irq < 0) { if (chip->irq < 0) {
if (request_irq(chip->pci->irq, chip->interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(chip->pci->irq, chip->interrupt, IRQF_SHARED,
chip->card->driver, chip)) { chip->card->driver, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", chip->pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", chip->pci->irq);
mutex_unlock(&chip->irq_mutex); mutex_unlock(&chip->irq_mutex);

View File

@ -1250,7 +1250,7 @@ static int __devinit pcxhr_probe(struct pci_dev *pci, const struct pci_device_id
mgr->pci = pci; mgr->pci = pci;
mgr->irq = -1; mgr->irq = -1;
if (request_irq(pci->irq, pcxhr_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, pcxhr_interrupt, IRQF_SHARED,
card_name, mgr)) { card_name, mgr)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
pcxhr_free(mgr); pcxhr_free(mgr);

View File

@ -1899,9 +1899,8 @@ snd_riptide_create(struct snd_card *card, struct pci_dev *pci,
hwport = (struct riptideport *)chip->port; hwport = (struct riptideport *)chip->port;
UNSET_AIE(hwport); UNSET_AIE(hwport);
if (request_irq if (request_irq(pci->irq, snd_riptide_interrupt, IRQF_SHARED,
(pci->irq, snd_riptide_interrupt, IRQF_DISABLED | IRQF_SHARED, "RIPTIDE", chip)) {
"RIPTIDE", chip)) {
snd_printk(KERN_ERR "Riptide: unable to grab IRQ %d\n", snd_printk(KERN_ERR "Riptide: unable to grab IRQ %d\n",
pci->irq); pci->irq);
snd_riptide_free(chip); snd_riptide_free(chip);

View File

@ -1373,7 +1373,8 @@ static int __devinit snd_rme32_create(struct rme32 * rme32)
return -ENOMEM; return -ENOMEM;
} }
if (request_irq(pci->irq, snd_rme32_interrupt, IRQF_DISABLED | IRQF_SHARED, "RME32", (void *) rme32)) { if (request_irq(pci->irq, snd_rme32_interrupt, IRQF_SHARED,
"RME32", rme32)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
return -EBUSY; return -EBUSY;
} }

View File

@ -1587,7 +1587,8 @@ snd_rme96_create(struct rme96 *rme96)
return -ENOMEM; return -ENOMEM;
} }
if (request_irq(pci->irq, snd_rme96_interrupt, IRQF_DISABLED|IRQF_SHARED, "RME96", (void *)rme96)) { if (request_irq(pci->irq, snd_rme96_interrupt, IRQF_SHARED,
"RME96", rme96)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
return -EBUSY; return -EBUSY;
} }

View File

@ -3516,8 +3516,8 @@ static int __devinit snd_hdsp_initialize_memory(struct hdsp *hdsp)
/* Align to bus-space 64K boundary */ /* Align to bus-space 64K boundary */
cb_bus = (hdsp->capture_dma_buf.addr + 0xFFFF) & ~0xFFFFl; cb_bus = ALIGN(hdsp->capture_dma_buf.addr, 0x10000ul);
pb_bus = (hdsp->playback_dma_buf.addr + 0xFFFF) & ~0xFFFFl; pb_bus = ALIGN(hdsp->playback_dma_buf.addr, 0x10000ul);
/* Tell the card where it is */ /* Tell the card where it is */
@ -4934,13 +4934,14 @@ static int __devinit snd_hdsp_create(struct snd_card *card,
return -EBUSY; return -EBUSY;
} }
if (request_irq(pci->irq, snd_hdsp_interrupt, IRQF_DISABLED|IRQF_SHARED, "hdsp", (void *)hdsp)) { if (request_irq(pci->irq, snd_hdsp_interrupt, IRQF_SHARED,
"hdsp", hdsp)) {
snd_printk(KERN_ERR "Hammerfall-DSP: unable to use IRQ %d\n", pci->irq); snd_printk(KERN_ERR "Hammerfall-DSP: unable to use IRQ %d\n", pci->irq);
return -EBUSY; return -EBUSY;
} }
hdsp->irq = pci->irq; hdsp->irq = pci->irq;
hdsp->precise_ptr = 1; hdsp->precise_ptr = 0;
hdsp->use_midi_tasklet = 1; hdsp->use_midi_tasklet = 1;
if ((err = snd_hdsp_initialize_memory(hdsp)) < 0) if ((err = snd_hdsp_initialize_memory(hdsp)) < 0)

View File

@ -3496,8 +3496,7 @@ static int __devinit snd_hdspm_create(struct snd_card *card, struct hdspm * hdsp
hdspm->port + io_extent - 1); hdspm->port + io_extent - 1);
if (request_irq(pci->irq, snd_hdspm_interrupt, if (request_irq(pci->irq, snd_hdspm_interrupt,
IRQF_DISABLED | IRQF_SHARED, "hdspm", IRQF_SHARED, "hdspm", hdspm)) {
(void *) hdspm)) {
snd_printk(KERN_ERR "HDSPM: unable to use IRQ %d\n", pci->irq); snd_printk(KERN_ERR "HDSPM: unable to use IRQ %d\n", pci->irq);
return -EBUSY; return -EBUSY;
} }

View File

@ -1827,8 +1827,8 @@ static int __devinit snd_rme9652_initialize_memory(struct snd_rme9652 *rme9652)
/* Align to bus-space 64K boundary */ /* Align to bus-space 64K boundary */
cb_bus = (rme9652->capture_dma_buf.addr + 0xFFFF) & ~0xFFFFl; cb_bus = ALIGN(rme9652->capture_dma_buf.addr, 0x10000ul);
pb_bus = (rme9652->playback_dma_buf.addr + 0xFFFF) & ~0xFFFFl; pb_bus = ALIGN(rme9652->playback_dma_buf.addr, 0x10000ul);
/* Tell the card where it is */ /* Tell the card where it is */
@ -2500,7 +2500,8 @@ static int __devinit snd_rme9652_create(struct snd_card *card,
return -EBUSY; return -EBUSY;
} }
if (request_irq(pci->irq, snd_rme9652_interrupt, IRQF_DISABLED|IRQF_SHARED, "rme9652", (void *)rme9652)) { if (request_irq(pci->irq, snd_rme9652_interrupt, IRQF_SHARED,
"rme9652", rme9652)) {
snd_printk(KERN_ERR "unable to request IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to request IRQ %d\n", pci->irq);
return -EBUSY; return -EBUSY;
} }

View File

@ -1195,7 +1195,7 @@ static int snd_sonicvibes_free(struct sonicvibes *sonic)
pci_write_config_dword(sonic->pci, 0x40, sonic->dmaa_port); pci_write_config_dword(sonic->pci, 0x40, sonic->dmaa_port);
pci_write_config_dword(sonic->pci, 0x48, sonic->dmac_port); pci_write_config_dword(sonic->pci, 0x48, sonic->dmac_port);
if (sonic->irq >= 0) if (sonic->irq >= 0)
free_irq(sonic->irq, (void *)sonic); free_irq(sonic->irq, sonic);
release_and_free_resource(sonic->res_dmaa); release_and_free_resource(sonic->res_dmaa);
release_and_free_resource(sonic->res_dmac); release_and_free_resource(sonic->res_dmac);
pci_release_regions(sonic->pci); pci_release_regions(sonic->pci);
@ -1257,7 +1257,8 @@ static int __devinit snd_sonicvibes_create(struct snd_card *card,
sonic->midi_port = pci_resource_start(pci, 3); sonic->midi_port = pci_resource_start(pci, 3);
sonic->game_port = pci_resource_start(pci, 4); sonic->game_port = pci_resource_start(pci, 4);
if (request_irq(pci->irq, snd_sonicvibes_interrupt, IRQF_DISABLED|IRQF_SHARED, "S3 SonicVibes", (void *)sonic)) { if (request_irq(pci->irq, snd_sonicvibes_interrupt, IRQF_SHARED,
"S3 SonicVibes", sonic)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_sonicvibes_free(sonic); snd_sonicvibes_free(sonic);
return -EBUSY; return -EBUSY;

View File

@ -3380,8 +3380,8 @@ static int __devinit snd_trident_tlb_alloc(struct snd_trident *trident)
snd_printk(KERN_ERR "trident: unable to allocate TLB buffer\n"); snd_printk(KERN_ERR "trident: unable to allocate TLB buffer\n");
return -ENOMEM; return -ENOMEM;
} }
trident->tlb.entries = (unsigned int*)(((unsigned long)trident->tlb.buffer.area + SNDRV_TRIDENT_MAX_PAGES * 4 - 1) & ~(SNDRV_TRIDENT_MAX_PAGES * 4 - 1)); trident->tlb.entries = (unsigned int*)ALIGN((unsigned long)trident->tlb.buffer.area, SNDRV_TRIDENT_MAX_PAGES * 4);
trident->tlb.entries_dmaaddr = (trident->tlb.buffer.addr + SNDRV_TRIDENT_MAX_PAGES * 4 - 1) & ~(SNDRV_TRIDENT_MAX_PAGES * 4 - 1); trident->tlb.entries_dmaaddr = ALIGN(trident->tlb.buffer.addr, SNDRV_TRIDENT_MAX_PAGES * 4);
/* allocate shadow TLB page table (virtual addresses) */ /* allocate shadow TLB page table (virtual addresses) */
trident->tlb.shadow_entries = vmalloc(SNDRV_TRIDENT_MAX_PAGES*sizeof(unsigned long)); trident->tlb.shadow_entries = vmalloc(SNDRV_TRIDENT_MAX_PAGES*sizeof(unsigned long));
if (trident->tlb.shadow_entries == NULL) { if (trident->tlb.shadow_entries == NULL) {
@ -3608,7 +3608,7 @@ int __devinit snd_trident_create(struct snd_card *card,
} }
trident->port = pci_resource_start(pci, 0); trident->port = pci_resource_start(pci, 0);
if (request_irq(pci->irq, snd_trident_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_trident_interrupt, IRQF_SHARED,
"Trident Audio", trident)) { "Trident Audio", trident)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_trident_free(trident); snd_trident_free(trident);

View File

@ -2307,7 +2307,7 @@ static int __devinit snd_via82xx_create(struct snd_card *card,
if (request_irq(pci->irq, if (request_irq(pci->irq,
chip_type == TYPE_VIA8233 ? chip_type == TYPE_VIA8233 ?
snd_via8233_interrupt : snd_via686_interrupt, snd_via8233_interrupt : snd_via686_interrupt,
IRQF_DISABLED|IRQF_SHARED, IRQF_SHARED,
card->driver, chip)) { card->driver, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_via82xx_free(chip); snd_via82xx_free(chip);
@ -2366,7 +2366,7 @@ struct dxs_whitelist {
static int __devinit check_dxs_list(struct pci_dev *pci, int revision) static int __devinit check_dxs_list(struct pci_dev *pci, int revision)
{ {
static struct dxs_whitelist whitelist[] = { static struct dxs_whitelist whitelist[] __devinitdata = {
{ .subvendor = 0x1005, .subdevice = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */ { .subvendor = 0x1005, .subdevice = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */
{ .subvendor = 0x1019, .subdevice = 0x0996, .action = VIA_DXS_48K }, { .subvendor = 0x1019, .subdevice = 0x0996, .action = VIA_DXS_48K },
{ .subvendor = 0x1019, .subdevice = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */ { .subvendor = 0x1019, .subdevice = 0x0a81, .action = VIA_DXS_NO_VRA }, /* ECS K7VTA3 v8.0 */
@ -2427,7 +2427,7 @@ static int __devinit check_dxs_list(struct pci_dev *pci, int revision)
{ .subvendor = 0x4005, .subdevice = 0x4710, .action = VIA_DXS_SRC }, /* MSI K7T266 Pro2 (MS-6380 V2.0) BIOS 3.7 */ { .subvendor = 0x4005, .subdevice = 0x4710, .action = VIA_DXS_SRC }, /* MSI K7T266 Pro2 (MS-6380 V2.0) BIOS 3.7 */
{ } /* terminator */ { } /* terminator */
}; };
struct dxs_whitelist *w; const struct dxs_whitelist *w;
unsigned short subsystem_vendor; unsigned short subsystem_vendor;
unsigned short subsystem_device; unsigned short subsystem_device;

View File

@ -1124,7 +1124,7 @@ static int __devinit snd_via82xx_create(struct snd_card *card,
return err; return err;
} }
chip->port = pci_resource_start(pci, 0); chip->port = pci_resource_start(pci, 0);
if (request_irq(pci->irq, snd_via82xx_interrupt, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_via82xx_interrupt, IRQF_SHARED,
card->driver, chip)) { card->driver, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_via82xx_free(chip); snd_via82xx_free(chip);

View File

@ -169,8 +169,8 @@ static int __devinit snd_vx222_create(struct snd_card *card, struct pci_dev *pci
for (i = 0; i < 2; i++) for (i = 0; i < 2; i++)
vx->port[i] = pci_resource_start(pci, i + 1); vx->port[i] = pci_resource_start(pci, i + 1);
if (request_irq(pci->irq, snd_vx_irq_handler, IRQF_DISABLED|IRQF_SHARED, if (request_irq(pci->irq, snd_vx_irq_handler, IRQF_SHARED,
CARD_NAME, (void *) chip)) { CARD_NAME, chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_vx222_free(chip); snd_vx222_free(chip);
return -EBUSY; return -EBUSY;

View File

@ -49,7 +49,6 @@ static long mpu_port[SNDRV_CARDS];
static long joystick_port[SNDRV_CARDS]; static long joystick_port[SNDRV_CARDS];
#endif #endif
static int rear_switch[SNDRV_CARDS]; static int rear_switch[SNDRV_CARDS];
static int rear_swap[SNDRV_CARDS] = { [0 ... (SNDRV_CARDS-1)] = 1 };
module_param_array(index, int, NULL, 0444); module_param_array(index, int, NULL, 0444);
MODULE_PARM_DESC(index, "Index value for the Yamaha DS-1 PCI soundcard."); MODULE_PARM_DESC(index, "Index value for the Yamaha DS-1 PCI soundcard.");
@ -67,8 +66,6 @@ MODULE_PARM_DESC(joystick_port, "Joystick port address");
#endif #endif
module_param_array(rear_switch, bool, NULL, 0444); module_param_array(rear_switch, bool, NULL, 0444);
MODULE_PARM_DESC(rear_switch, "Enable shared rear/line-in switch"); MODULE_PARM_DESC(rear_switch, "Enable shared rear/line-in switch");
module_param_array(rear_swap, bool, NULL, 0444);
MODULE_PARM_DESC(rear_swap, "Swap rear channels (must be enabled for correct IEC958 (S/PDIF)) output");
static struct pci_device_id snd_ymfpci_ids[] = { static struct pci_device_id snd_ymfpci_ids[] = {
{ 0x1073, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* YMF724 */ { 0x1073, 0x0004, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0, }, /* YMF724 */
@ -298,7 +295,7 @@ static int __devinit snd_card_ymfpci_probe(struct pci_dev *pci,
snd_card_free(card); snd_card_free(card);
return err; return err;
} }
if ((err = snd_ymfpci_mixer(chip, rear_switch[dev], rear_swap[dev])) < 0) { if ((err = snd_ymfpci_mixer(chip, rear_switch[dev])) < 0) {
snd_card_free(card); snd_card_free(card);
return err; return err;
} }

View File

@ -910,7 +910,7 @@ static int snd_ymfpci_playback_open(struct snd_pcm_substream *substream)
ypcm = runtime->private_data; ypcm = runtime->private_data;
ypcm->output_front = 1; ypcm->output_front = 1;
ypcm->output_rear = chip->mode_dup4ch ? 1 : 0; ypcm->output_rear = chip->mode_dup4ch ? 1 : 0;
ypcm->swap_rear = chip->rear_swap; ypcm->swap_rear = 0;
spin_lock_irq(&chip->reg_lock); spin_lock_irq(&chip->reg_lock);
if (ypcm->output_rear) { if (ypcm->output_rear) {
ymfpci_open_extension(chip); ymfpci_open_extension(chip);
@ -936,6 +936,7 @@ static int snd_ymfpci_playback_spdif_open(struct snd_pcm_substream *substream)
ypcm = runtime->private_data; ypcm = runtime->private_data;
ypcm->output_front = 0; ypcm->output_front = 0;
ypcm->output_rear = 1; ypcm->output_rear = 1;
ypcm->swap_rear = 1;
spin_lock_irq(&chip->reg_lock); spin_lock_irq(&chip->reg_lock);
snd_ymfpci_writew(chip, YDSXGR_SPDIFOUTCTRL, snd_ymfpci_writew(chip, YDSXGR_SPDIFOUTCTRL,
snd_ymfpci_readw(chip, YDSXGR_SPDIFOUTCTRL) | 2); snd_ymfpci_readw(chip, YDSXGR_SPDIFOUTCTRL) | 2);
@ -963,6 +964,7 @@ static int snd_ymfpci_playback_4ch_open(struct snd_pcm_substream *substream)
ypcm = runtime->private_data; ypcm = runtime->private_data;
ypcm->output_front = 0; ypcm->output_front = 0;
ypcm->output_rear = 1; ypcm->output_rear = 1;
ypcm->swap_rear = 0;
spin_lock_irq(&chip->reg_lock); spin_lock_irq(&chip->reg_lock);
ymfpci_open_extension(chip); ymfpci_open_extension(chip);
chip->rear_opened++; chip->rear_opened++;
@ -1755,7 +1757,7 @@ static void snd_ymfpci_mixer_free_ac97(struct snd_ac97 *ac97)
chip->ac97 = NULL; chip->ac97 = NULL;
} }
int __devinit snd_ymfpci_mixer(struct snd_ymfpci *chip, int rear_switch, int rear_swap) int __devinit snd_ymfpci_mixer(struct snd_ymfpci *chip, int rear_switch)
{ {
struct snd_ac97_template ac97; struct snd_ac97_template ac97;
struct snd_kcontrol *kctl; struct snd_kcontrol *kctl;
@ -1767,7 +1769,6 @@ int __devinit snd_ymfpci_mixer(struct snd_ymfpci *chip, int rear_switch, int rea
.read = snd_ymfpci_codec_read, .read = snd_ymfpci_codec_read,
}; };
chip->rear_swap = rear_swap;
if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus)) < 0) if ((err = snd_ac97_bus(chip->card, 0, &ops, chip, &chip->ac97_bus)) < 0)
return err; return err;
chip->ac97_bus->private_free = snd_ymfpci_mixer_free_ac97_bus; chip->ac97_bus->private_free = snd_ymfpci_mixer_free_ac97_bus;
@ -2025,10 +2026,10 @@ static int __devinit snd_ymfpci_memalloc(struct snd_ymfpci *chip)
chip->bank_size_effect = snd_ymfpci_readl(chip, YDSXGR_EFFCTRLSIZE) << 2; chip->bank_size_effect = snd_ymfpci_readl(chip, YDSXGR_EFFCTRLSIZE) << 2;
chip->work_size = YDSXG_DEFAULT_WORK_SIZE; chip->work_size = YDSXG_DEFAULT_WORK_SIZE;
size = ((playback_ctrl_size + 0x00ff) & ~0x00ff) + size = ALIGN(playback_ctrl_size, 0x100) +
((chip->bank_size_playback * 2 * YDSXG_PLAYBACK_VOICES + 0x00ff) & ~0x00ff) + ALIGN(chip->bank_size_playback * 2 * YDSXG_PLAYBACK_VOICES, 0x100) +
((chip->bank_size_capture * 2 * YDSXG_CAPTURE_VOICES + 0x00ff) & ~0x00ff) + ALIGN(chip->bank_size_capture * 2 * YDSXG_CAPTURE_VOICES, 0x100) +
((chip->bank_size_effect * 2 * YDSXG_EFFECT_VOICES + 0x00ff) & ~0x00ff) + ALIGN(chip->bank_size_effect * 2 * YDSXG_EFFECT_VOICES, 0x100) +
chip->work_size; chip->work_size;
/* work_ptr must be aligned to 256 bytes, but it's already /* work_ptr must be aligned to 256 bytes, but it's already
covered with the kernel page allocation mechanism */ covered with the kernel page allocation mechanism */
@ -2043,8 +2044,8 @@ static int __devinit snd_ymfpci_memalloc(struct snd_ymfpci *chip)
chip->bank_base_playback_addr = ptr_addr; chip->bank_base_playback_addr = ptr_addr;
chip->ctrl_playback = (u32 *)ptr; chip->ctrl_playback = (u32 *)ptr;
chip->ctrl_playback[0] = cpu_to_le32(YDSXG_PLAYBACK_VOICES); chip->ctrl_playback[0] = cpu_to_le32(YDSXG_PLAYBACK_VOICES);
ptr += (playback_ctrl_size + 0x00ff) & ~0x00ff; ptr += ALIGN(playback_ctrl_size, 0x100);
ptr_addr += (playback_ctrl_size + 0x00ff) & ~0x00ff; ptr_addr += ALIGN(playback_ctrl_size, 0x100);
for (voice = 0; voice < YDSXG_PLAYBACK_VOICES; voice++) { for (voice = 0; voice < YDSXG_PLAYBACK_VOICES; voice++) {
chip->voices[voice].number = voice; chip->voices[voice].number = voice;
chip->voices[voice].bank = (struct snd_ymfpci_playback_bank *)ptr; chip->voices[voice].bank = (struct snd_ymfpci_playback_bank *)ptr;
@ -2055,8 +2056,8 @@ static int __devinit snd_ymfpci_memalloc(struct snd_ymfpci *chip)
ptr_addr += chip->bank_size_playback; ptr_addr += chip->bank_size_playback;
} }
} }
ptr = (char *)(((unsigned long)ptr + 0x00ff) & ~0x00ff); ptr = (char *)ALIGN((unsigned long)ptr, 0x100);
ptr_addr = (ptr_addr + 0x00ff) & ~0x00ff; ptr_addr = ALIGN(ptr_addr, 0x100);
chip->bank_base_capture = ptr; chip->bank_base_capture = ptr;
chip->bank_base_capture_addr = ptr_addr; chip->bank_base_capture_addr = ptr_addr;
for (voice = 0; voice < YDSXG_CAPTURE_VOICES; voice++) for (voice = 0; voice < YDSXG_CAPTURE_VOICES; voice++)
@ -2065,8 +2066,8 @@ static int __devinit snd_ymfpci_memalloc(struct snd_ymfpci *chip)
ptr += chip->bank_size_capture; ptr += chip->bank_size_capture;
ptr_addr += chip->bank_size_capture; ptr_addr += chip->bank_size_capture;
} }
ptr = (char *)(((unsigned long)ptr + 0x00ff) & ~0x00ff); ptr = (char *)ALIGN((unsigned long)ptr, 0x100);
ptr_addr = (ptr_addr + 0x00ff) & ~0x00ff; ptr_addr = ALIGN(ptr_addr, 0x100);
chip->bank_base_effect = ptr; chip->bank_base_effect = ptr;
chip->bank_base_effect_addr = ptr_addr; chip->bank_base_effect_addr = ptr_addr;
for (voice = 0; voice < YDSXG_EFFECT_VOICES; voice++) for (voice = 0; voice < YDSXG_EFFECT_VOICES; voice++)
@ -2075,8 +2076,8 @@ static int __devinit snd_ymfpci_memalloc(struct snd_ymfpci *chip)
ptr += chip->bank_size_effect; ptr += chip->bank_size_effect;
ptr_addr += chip->bank_size_effect; ptr_addr += chip->bank_size_effect;
} }
ptr = (char *)(((unsigned long)ptr + 0x00ff) & ~0x00ff); ptr = (char *)ALIGN((unsigned long)ptr, 0x100);
ptr_addr = (ptr_addr + 0x00ff) & ~0x00ff; ptr_addr = ALIGN(ptr_addr, 0x100);
chip->work_base = ptr; chip->work_base = ptr;
chip->work_base_addr = ptr_addr; chip->work_base_addr = ptr_addr;
@ -2153,7 +2154,7 @@ static int snd_ymfpci_free(struct snd_ymfpci *chip)
snd_dma_free_pages(&chip->work_ptr); snd_dma_free_pages(&chip->work_ptr);
if (chip->irq >= 0) if (chip->irq >= 0)
free_irq(chip->irq, (void *)chip); free_irq(chip->irq, chip);
release_and_free_resource(chip->res_reg_area); release_and_free_resource(chip->res_reg_area);
pci_write_config_word(chip->pci, 0x40, chip->old_legacy_ctrl); pci_write_config_word(chip->pci, 0x40, chip->old_legacy_ctrl);
@ -2290,7 +2291,7 @@ int __devinit snd_ymfpci_create(struct snd_card *card,
chip->pci = pci; chip->pci = pci;
chip->irq = -1; chip->irq = -1;
chip->device_id = pci->device; chip->device_id = pci->device;
pci_read_config_byte(pci, PCI_REVISION_ID, (u8 *)&chip->rev); pci_read_config_byte(pci, PCI_REVISION_ID, &chip->rev);
chip->reg_area_phys = pci_resource_start(pci, 0); chip->reg_area_phys = pci_resource_start(pci, 0);
chip->reg_area_virt = ioremap_nocache(chip->reg_area_phys, 0x8000); chip->reg_area_virt = ioremap_nocache(chip->reg_area_phys, 0x8000);
pci_set_master(pci); pci_set_master(pci);
@ -2300,7 +2301,8 @@ int __devinit snd_ymfpci_create(struct snd_card *card,
snd_ymfpci_free(chip); snd_ymfpci_free(chip);
return -EBUSY; return -EBUSY;
} }
if (request_irq(pci->irq, snd_ymfpci_interrupt, IRQF_DISABLED|IRQF_SHARED, "YMFPCI", (void *) chip)) { if (request_irq(pci->irq, snd_ymfpci_interrupt, IRQF_SHARED,
"YMFPCI", chip)) {
snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq); snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
snd_ymfpci_free(chip); snd_ymfpci_free(chip);
return -EBUSY; return -EBUSY;
@ -2322,7 +2324,6 @@ int __devinit snd_ymfpci_create(struct snd_card *card,
return -EIO; return -EIO;
} }
chip->rear_swap = 1;
if ((err = snd_ymfpci_ac3_init(chip)) < 0) { if ((err = snd_ymfpci_ac3_init(chip)) < 0) {
snd_ymfpci_free(chip); snd_ymfpci_free(chip);
return err; return err;

View File

@ -3577,8 +3577,7 @@ static int __init snd_usb_audio_init(void)
printk(KERN_WARNING "invalid nrpacks value.\n"); printk(KERN_WARNING "invalid nrpacks value.\n");
return -EINVAL; return -EINVAL;
} }
usb_register(&usb_audio_driver); return usb_register(&usb_audio_driver);
return 0;
} }