diff options
author | Linus Torvalds <torvalds@woody.osdl.org> | 2007-01-09 12:40:34 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.osdl.org> | 2007-01-09 12:40:34 -0500 |
commit | 656829e2d052b1da4a72aa2ac39ad733a78530ce (patch) | |
tree | dd94ceb1177bc56302dbf21b94def49a92b26c20 | |
parent | 76a2f047880c2c7779f8950c50ee8f3855a5e6df (diff) | |
parent | a037b0a43f6abafc4f725f7c7f46d577d1c44c96 (diff) |
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:
[ALSA] version 1.0.14rc1
[ALSA] usbaudio - Fix kobject_add() error at reconnection
[ALSA] usb: usbmixer error path fix
[ALSA] _snd_cmipci_uswitch_put doesn't set zero flags
[ALSA] hda-codec - Fix NULL dereference in generic hda code
[ALSA] hda_intel: ALSA HD Audio patch for Intel ICH9
[ALSA] usb-audio: work around wrong frequency in CM6501 descriptors
[ALSA] Fix potential NULL pointer dereference in echoaudio midi
[ALSA] Audio: Add nvidia HD Audio controllers of MCP67 support to hda_intel.c
-rw-r--r-- | include/sound/version.h | 2 | ||||
-rw-r--r-- | sound/pci/cmipci.c | 3 | ||||
-rw-r--r-- | sound/pci/echoaudio/midi.c | 6 | ||||
-rw-r--r-- | sound/pci/hda/hda_generic.c | 5 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 14 | ||||
-rw-r--r-- | sound/usb/usbaudio.c | 10 | ||||
-rw-r--r-- | sound/usb/usbmixer.c | 2 |
7 files changed, 30 insertions, 12 deletions
diff --git a/include/sound/version.h b/include/sound/version.h index 2949b9b991b5..20f7babad514 100644 --- a/include/sound/version.h +++ b/include/sound/version.h | |||
@@ -1,3 +1,3 @@ | |||
1 | /* include/version.h. Generated by alsa/ksync script. */ | 1 | /* include/version.h. Generated by alsa/ksync script. */ |
2 | #define CONFIG_SND_VERSION "1.0.14rc1" | 2 | #define CONFIG_SND_VERSION "1.0.14rc1" |
3 | #define CONFIG_SND_DATE " (Wed Dec 20 08:11:48 2006 UTC)" | 3 | #define CONFIG_SND_DATE " (Tue Jan 09 09:56:17 2007 UTC)" |
diff --git a/sound/pci/cmipci.c b/sound/pci/cmipci.c index 71c58df4af28..70face7e1048 100644 --- a/sound/pci/cmipci.c +++ b/sound/pci/cmipci.c | |||
@@ -2198,7 +2198,8 @@ static int _snd_cmipci_uswitch_put(struct snd_kcontrol *kcontrol, | |||
2198 | val = inb(cm->iobase + args->reg); | 2198 | val = inb(cm->iobase + args->reg); |
2199 | else | 2199 | else |
2200 | val = snd_cmipci_read(cm, args->reg); | 2200 | val = snd_cmipci_read(cm, args->reg); |
2201 | change = (val & args->mask) != (ucontrol->value.integer.value[0] ? args->mask : 0); | 2201 | change = (val & args->mask) != (ucontrol->value.integer.value[0] ? |
2202 | args->mask_on : (args->mask & ~args->mask_on)); | ||
2202 | if (change) { | 2203 | if (change) { |
2203 | val &= ~args->mask; | 2204 | val &= ~args->mask; |
2204 | if (ucontrol->value.integer.value[0]) | 2205 | if (ucontrol->value.integer.value[0]) |
diff --git a/sound/pci/echoaudio/midi.c b/sound/pci/echoaudio/midi.c index e31f0f11e3a8..91f5bff66d3f 100644 --- a/sound/pci/echoaudio/midi.c +++ b/sound/pci/echoaudio/midi.c | |||
@@ -213,7 +213,7 @@ static void snd_echo_midi_output_write(unsigned long data) | |||
213 | sent = bytes = 0; | 213 | sent = bytes = 0; |
214 | spin_lock_irqsave(&chip->lock, flags); | 214 | spin_lock_irqsave(&chip->lock, flags); |
215 | chip->midi_full = 0; | 215 | chip->midi_full = 0; |
216 | if (chip->midi_out && !snd_rawmidi_transmit_empty(chip->midi_out)) { | 216 | if (!snd_rawmidi_transmit_empty(chip->midi_out)) { |
217 | bytes = snd_rawmidi_transmit_peek(chip->midi_out, buf, | 217 | bytes = snd_rawmidi_transmit_peek(chip->midi_out, buf, |
218 | MIDI_OUT_BUFFER_SIZE - 1); | 218 | MIDI_OUT_BUFFER_SIZE - 1); |
219 | DE_MID(("Try to send %d bytes...\n", bytes)); | 219 | DE_MID(("Try to send %d bytes...\n", bytes)); |
@@ -264,9 +264,11 @@ static void snd_echo_midi_output_trigger(struct snd_rawmidi_substream *substream | |||
264 | } | 264 | } |
265 | } else { | 265 | } else { |
266 | if (chip->tinuse) { | 266 | if (chip->tinuse) { |
267 | del_timer(&chip->timer); | ||
268 | chip->tinuse = 0; | 267 | chip->tinuse = 0; |
268 | spin_unlock_irq(&chip->lock); | ||
269 | del_timer_sync(&chip->timer); | ||
269 | DE_MID(("Timer removed\n")); | 270 | DE_MID(("Timer removed\n")); |
271 | return; | ||
270 | } | 272 | } |
271 | } | 273 | } |
272 | spin_unlock_irq(&chip->lock); | 274 | spin_unlock_irq(&chip->lock); |
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index 97e9af130b71..1589d2f2917f 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c | |||
@@ -485,8 +485,9 @@ static const char *get_input_type(struct hda_gnode *node, unsigned int *pinctl) | |||
485 | return "Front Aux"; | 485 | return "Front Aux"; |
486 | return "Aux"; | 486 | return "Aux"; |
487 | case AC_JACK_MIC_IN: | 487 | case AC_JACK_MIC_IN: |
488 | if (node->pin_caps & | 488 | if (pinctl && |
489 | (AC_PINCAP_VREF_80 << AC_PINCAP_VREF_SHIFT)) | 489 | (node->pin_caps & |
490 | (AC_PINCAP_VREF_80 << AC_PINCAP_VREF_SHIFT))) | ||
490 | *pinctl |= AC_PINCTL_VREF_80; | 491 | *pinctl |= AC_PINCTL_VREF_80; |
491 | if ((location & 0x0f) == AC_JACK_LOC_FRONT) | 492 | if ((location & 0x0f) == AC_JACK_LOC_FRONT) |
492 | return "Front Mic"; | 493 | return "Front Mic"; |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 9fd34f85cad5..1a7e82104bb9 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -83,6 +83,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6}," | |||
83 | "{Intel, ICH7}," | 83 | "{Intel, ICH7}," |
84 | "{Intel, ESB2}," | 84 | "{Intel, ESB2}," |
85 | "{Intel, ICH8}," | 85 | "{Intel, ICH8}," |
86 | "{Intel, ICH9}," | ||
86 | "{ATI, SB450}," | 87 | "{ATI, SB450}," |
87 | "{ATI, SB600}," | 88 | "{ATI, SB600}," |
88 | "{ATI, RS600}," | 89 | "{ATI, RS600}," |
@@ -1711,6 +1712,8 @@ static struct pci_device_id azx_ids[] = { | |||
1711 | { 0x8086, 0x27d8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH7 */ | 1712 | { 0x8086, 0x27d8, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH7 */ |
1712 | { 0x8086, 0x269a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ESB2 */ | 1713 | { 0x8086, 0x269a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ESB2 */ |
1713 | { 0x8086, 0x284b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH8 */ | 1714 | { 0x8086, 0x284b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH8 */ |
1715 | { 0x8086, 0x293e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH9 */ | ||
1716 | { 0x8086, 0x293f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ICH }, /* ICH9 */ | ||
1714 | { 0x1002, 0x437b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB450 */ | 1717 | { 0x1002, 0x437b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB450 */ |
1715 | { 0x1002, 0x4383, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB600 */ | 1718 | { 0x1002, 0x4383, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATI }, /* ATI SB600 */ |
1716 | { 0x1002, 0x793b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS600 HDMI */ | 1719 | { 0x1002, 0x793b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ATIHDMI }, /* ATI RS600 HDMI */ |
@@ -1718,9 +1721,14 @@ static struct pci_device_id azx_ids[] = { | |||
1718 | { 0x1106, 0x3288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_VIA }, /* VIA VT8251/VT8237A */ | 1721 | { 0x1106, 0x3288, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_VIA }, /* VIA VT8251/VT8237A */ |
1719 | { 0x1039, 0x7502, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_SIS }, /* SIS966 */ | 1722 | { 0x1039, 0x7502, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_SIS }, /* SIS966 */ |
1720 | { 0x10b9, 0x5461, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ULI }, /* ULI M5461 */ | 1723 | { 0x10b9, 0x5461, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_ULI }, /* ULI M5461 */ |
1721 | { 0x10de, 0x026c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA 026c */ | 1724 | { 0x10de, 0x026c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA MCP51 */ |
1722 | { 0x10de, 0x0371, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA 0371 */ | 1725 | { 0x10de, 0x0371, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA MCP55 */ |
1723 | { 0x10de, 0x03f0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA 03f0 */ | 1726 | { 0x10de, 0x03e4, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA MCP61 */ |
1727 | { 0x10de, 0x03f0, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA MCP61 */ | ||
1728 | { 0x10de, 0x044a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA MCP65 */ | ||
1729 | { 0x10de, 0x044b, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA MCP65 */ | ||
1730 | { 0x10de, 0x055c, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA MCP67 */ | ||
1731 | { 0x10de, 0x055d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, AZX_DRIVER_NVIDIA }, /* NVIDIA MCP67 */ | ||
1724 | { 0, } | 1732 | { 0, } |
1725 | }; | 1733 | }; |
1726 | MODULE_DEVICE_TABLE(pci, azx_ids); | 1734 | MODULE_DEVICE_TABLE(pci, azx_ids); |
diff --git a/sound/usb/usbaudio.c b/sound/usb/usbaudio.c index 3d7f36fb4cf0..19bdcc74c96c 100644 --- a/sound/usb/usbaudio.c +++ b/sound/usb/usbaudio.c | |||
@@ -2471,7 +2471,13 @@ static int parse_audio_format_rates(struct snd_usb_audio *chip, struct audioform | |||
2471 | fp->nr_rates = nr_rates; | 2471 | fp->nr_rates = nr_rates; |
2472 | fp->rate_min = fp->rate_max = combine_triple(&fmt[8]); | 2472 | fp->rate_min = fp->rate_max = combine_triple(&fmt[8]); |
2473 | for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) { | 2473 | for (r = 0, idx = offset + 1; r < nr_rates; r++, idx += 3) { |
2474 | unsigned int rate = fp->rate_table[r] = combine_triple(&fmt[idx]); | 2474 | unsigned int rate = combine_triple(&fmt[idx]); |
2475 | /* C-Media CM6501 mislabels its 96 kHz altsetting */ | ||
2476 | if (rate == 48000 && nr_rates == 1 && | ||
2477 | chip->usb_id == USB_ID(0x0d8c, 0x0201) && | ||
2478 | fp->altsetting == 5 && fp->maxpacksize == 392) | ||
2479 | rate = 96000; | ||
2480 | fp->rate_table[r] = rate; | ||
2475 | if (rate < fp->rate_min) | 2481 | if (rate < fp->rate_min) |
2476 | fp->rate_min = rate; | 2482 | fp->rate_min = rate; |
2477 | else if (rate > fp->rate_max) | 2483 | else if (rate > fp->rate_max) |
@@ -3280,6 +3286,7 @@ static void snd_usb_audio_create_proc(struct snd_usb_audio *chip) | |||
3280 | 3286 | ||
3281 | static int snd_usb_audio_free(struct snd_usb_audio *chip) | 3287 | static int snd_usb_audio_free(struct snd_usb_audio *chip) |
3282 | { | 3288 | { |
3289 | usb_chip[chip->index] = NULL; | ||
3283 | kfree(chip); | 3290 | kfree(chip); |
3284 | return 0; | 3291 | return 0; |
3285 | } | 3292 | } |
@@ -3541,7 +3548,6 @@ static void snd_usb_audio_disconnect(struct usb_device *dev, void *ptr) | |||
3541 | list_for_each(p, &chip->mixer_list) { | 3548 | list_for_each(p, &chip->mixer_list) { |
3542 | snd_usb_mixer_disconnect(p); | 3549 | snd_usb_mixer_disconnect(p); |
3543 | } | 3550 | } |
3544 | usb_chip[chip->index] = NULL; | ||
3545 | mutex_unlock(®ister_mutex); | 3551 | mutex_unlock(®ister_mutex); |
3546 | snd_card_free_when_closed(card); | 3552 | snd_card_free_when_closed(card); |
3547 | } else { | 3553 | } else { |
diff --git a/sound/usb/usbmixer.c b/sound/usb/usbmixer.c index e74eb1bc8d87..7b3bf3545a3b 100644 --- a/sound/usb/usbmixer.c +++ b/sound/usb/usbmixer.c | |||
@@ -1526,7 +1526,7 @@ static int parse_audio_selector_unit(struct mixer_build *state, int unitid, unsi | |||
1526 | namelist[i] = kmalloc(MAX_ITEM_NAME_LEN, GFP_KERNEL); | 1526 | namelist[i] = kmalloc(MAX_ITEM_NAME_LEN, GFP_KERNEL); |
1527 | if (! namelist[i]) { | 1527 | if (! namelist[i]) { |
1528 | snd_printk(KERN_ERR "cannot malloc\n"); | 1528 | snd_printk(KERN_ERR "cannot malloc\n"); |
1529 | while (--i > 0) | 1529 | while (i--) |
1530 | kfree(namelist[i]); | 1530 | kfree(namelist[i]); |
1531 | kfree(namelist); | 1531 | kfree(namelist); |
1532 | kfree(cval); | 1532 | kfree(cval); |