aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2013-01-08 10:33:41 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2013-01-08 10:33:41 -0500
commited2c8911684ac780d051d251ad0cd9d797dd029c (patch)
treeaa2419792165a1ce247382b14fbf3cf45a7355c3
parent5c33d9b248603ef33049da71180f443e8d242599 (diff)
parent6d3cd5d444223c41eabb70dccff14fae4e8cb8b1 (diff)
Merge tag 'sound-3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "Nothing too exciting here, just a few regression and trivial fixes, and new quirks for HD-audio and USB-audio. - HD-audio mute LED mode enum fix - Fix kernel panic of Digidesign Mbox2 usb-audio quirk (which was new in 3.8-rc1) - Creative BT-D1 usb-audio quirk - mute LED fixup for HP Pavillion 17 laptop" * tag 'sound-3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda - add mute LED for HP Pavilion 17 (Realtek codec) ALSA: au88x0: fix incorrect left shift sound: oss/pas2: Fix possible access out of array ALSA: usb-audio: Fix kernel panic of Digidesign Mbox2 quirk ALSA: usb-audio: Add support for Creative BT-D1 via usb sound quirks ALSA: hda - Switch "On" and "Off" for "Mute-LED Mode" kcontrol
-rw-r--r--sound/oss/pas2_card.c5
-rw-r--r--sound/pci/au88x0/au88x0_synth.c2
-rw-r--r--sound/pci/hda/hda_codec.c2
-rw-r--r--sound/pci/hda/patch_realtek.c30
-rw-r--r--sound/usb/midi.c4
-rw-r--r--sound/usb/quirks-table.h24
-rw-r--r--sound/usb/quirks.c16
-rw-r--r--sound/usb/usbaudio.h1
8 files changed, 67 insertions, 17 deletions
diff --git a/sound/oss/pas2_card.c b/sound/oss/pas2_card.c
index dabf8a871dcc..7004e24d209f 100644
--- a/sound/oss/pas2_card.c
+++ b/sound/oss/pas2_card.c
@@ -333,6 +333,11 @@ static void __init attach_pas_card(struct address_info *hw_config)
333 { 333 {
334 char temp[100]; 334 char temp[100];
335 335
336 if (pas_model < 0 ||
337 pas_model >= ARRAY_SIZE(pas_model_names)) {
338 printk(KERN_ERR "pas2 unrecognized model.\n");
339 return;
340 }
336 sprintf(temp, 341 sprintf(temp,
337 "%s rev %d", pas_model_names[(int) pas_model], 342 "%s rev %d", pas_model_names[(int) pas_model],
338 pas_read(0x2789)); 343 pas_read(0x2789));
diff --git a/sound/pci/au88x0/au88x0_synth.c b/sound/pci/au88x0/au88x0_synth.c
index 2805e34bd41d..8bef47311e45 100644
--- a/sound/pci/au88x0/au88x0_synth.c
+++ b/sound/pci/au88x0/au88x0_synth.c
@@ -58,7 +58,7 @@ static void vortex_wt_setdsout(vortex_t * vortex, u32 wt, int en)
58 if (en) 58 if (en)
59 temp |= (1 << (wt & 0x1f)); 59 temp |= (1 << (wt & 0x1f));
60 else 60 else
61 temp &= (1 << ~(wt & 0x1f)); 61 temp &= ~(1 << (wt & 0x1f));
62 hwwrite(vortex->mmio, WT_DSREG((wt >= 0x20) ? 1 : 0), temp); 62 hwwrite(vortex->mmio, WT_DSREG((wt >= 0x20) ? 1 : 0), temp);
63} 63}
64 64
diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c
index 8353c77536ac..b8fb0a5adb9b 100644
--- a/sound/pci/hda/hda_codec.c
+++ b/sound/pci/hda/hda_codec.c
@@ -2531,7 +2531,7 @@ static int vmaster_mute_mode_info(struct snd_kcontrol *kcontrol,
2531 struct snd_ctl_elem_info *uinfo) 2531 struct snd_ctl_elem_info *uinfo)
2532{ 2532{
2533 static const char * const texts[] = { 2533 static const char * const texts[] = {
2534 "Off", "On", "Follow Master" 2534 "On", "Off", "Follow Master"
2535 }; 2535 };
2536 unsigned int index; 2536 unsigned int index;
2537 2537
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 6ee34593774a..71ae23dd7103 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -5992,6 +5992,30 @@ static void alc269_fixup_quanta_mute(struct hda_codec *codec,
5992 spec->automute_hook = alc269_quanta_automute; 5992 spec->automute_hook = alc269_quanta_automute;
5993} 5993}
5994 5994
5995/* update mute-LED according to the speaker mute state via mic1 VREF pin */
5996static void alc269_fixup_mic1_mute_hook(void *private_data, int enabled)
5997{
5998 struct hda_codec *codec = private_data;
5999 unsigned int pinval = AC_PINCTL_IN_EN + (enabled ?
6000 AC_PINCTL_VREF_HIZ : AC_PINCTL_VREF_80);
6001 snd_hda_set_pin_ctl_cache(codec, 0x18, pinval);
6002}
6003
6004static void alc269_fixup_mic1_mute(struct hda_codec *codec,
6005 const struct alc_fixup *fix, int action)
6006{
6007 struct alc_spec *spec = codec->spec;
6008 switch (action) {
6009 case ALC_FIXUP_ACT_BUILD:
6010 spec->vmaster_mute.hook = alc269_fixup_mic1_mute_hook;
6011 snd_hda_add_vmaster_hook(codec, &spec->vmaster_mute, true);
6012 /* fallthru */
6013 case ALC_FIXUP_ACT_INIT:
6014 snd_hda_sync_vmaster_hook(&spec->vmaster_mute);
6015 break;
6016 }
6017}
6018
5995/* update mute-LED according to the speaker mute state via mic2 VREF pin */ 6019/* update mute-LED according to the speaker mute state via mic2 VREF pin */
5996static void alc269_fixup_mic2_mute_hook(void *private_data, int enabled) 6020static void alc269_fixup_mic2_mute_hook(void *private_data, int enabled)
5997{ 6021{
@@ -6043,6 +6067,7 @@ enum {
6043 ALC269_FIXUP_DMIC, 6067 ALC269_FIXUP_DMIC,
6044 ALC269VB_FIXUP_AMIC, 6068 ALC269VB_FIXUP_AMIC,
6045 ALC269VB_FIXUP_DMIC, 6069 ALC269VB_FIXUP_DMIC,
6070 ALC269_FIXUP_MIC1_MUTE_LED,
6046 ALC269_FIXUP_MIC2_MUTE_LED, 6071 ALC269_FIXUP_MIC2_MUTE_LED,
6047 ALC269_FIXUP_INV_DMIC, 6072 ALC269_FIXUP_INV_DMIC,
6048 ALC269_FIXUP_LENOVO_DOCK, 6073 ALC269_FIXUP_LENOVO_DOCK,
@@ -6171,6 +6196,10 @@ static const struct alc_fixup alc269_fixups[] = {
6171 { } 6196 { }
6172 }, 6197 },
6173 }, 6198 },
6199 [ALC269_FIXUP_MIC1_MUTE_LED] = {
6200 .type = ALC_FIXUP_FUNC,
6201 .v.func = alc269_fixup_mic1_mute,
6202 },
6174 [ALC269_FIXUP_MIC2_MUTE_LED] = { 6203 [ALC269_FIXUP_MIC2_MUTE_LED] = {
6175 .type = ALC_FIXUP_FUNC, 6204 .type = ALC_FIXUP_FUNC,
6176 .v.func = alc269_fixup_mic2_mute, 6205 .v.func = alc269_fixup_mic2_mute,
@@ -6215,6 +6244,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
6215 SND_PCI_QUIRK(0x1025, 0x029b, "Acer 1810TZ", ALC269_FIXUP_INV_DMIC), 6244 SND_PCI_QUIRK(0x1025, 0x029b, "Acer 1810TZ", ALC269_FIXUP_INV_DMIC),
6216 SND_PCI_QUIRK(0x1025, 0x0349, "Acer AOD260", ALC269_FIXUP_INV_DMIC), 6245 SND_PCI_QUIRK(0x1025, 0x0349, "Acer AOD260", ALC269_FIXUP_INV_DMIC),
6217 SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_MIC2_MUTE_LED), 6246 SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_MIC2_MUTE_LED),
6247 SND_PCI_QUIRK(0x103c, 0x1972, "HP Pavilion 17", ALC269_FIXUP_MIC1_MUTE_LED),
6218 SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC), 6248 SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_DMIC),
6219 SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_DMIC), 6249 SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_DMIC),
6220 SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW), 6250 SND_PCI_QUIRK(0x1043, 0x1a13, "Asus G73Jw", ALC269_FIXUP_ASUS_G73JW),
diff --git a/sound/usb/midi.c b/sound/usb/midi.c
index c183d34842ac..34b9bb7fe87c 100644
--- a/sound/usb/midi.c
+++ b/sound/usb/midi.c
@@ -2181,10 +2181,6 @@ int snd_usbmidi_create(struct snd_card *card,
2181 umidi->usb_protocol_ops = &snd_usbmidi_novation_ops; 2181 umidi->usb_protocol_ops = &snd_usbmidi_novation_ops;
2182 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints); 2182 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2183 break; 2183 break;
2184 case QUIRK_MIDI_MBOX2:
2185 umidi->usb_protocol_ops = &snd_usbmidi_midiman_ops;
2186 err = snd_usbmidi_detect_per_port_endpoints(umidi, endpoints);
2187 break;
2188 case QUIRK_MIDI_RAW_BYTES: 2184 case QUIRK_MIDI_RAW_BYTES:
2189 umidi->usb_protocol_ops = &snd_usbmidi_raw_ops; 2185 umidi->usb_protocol_ops = &snd_usbmidi_raw_ops;
2190 /* 2186 /*
diff --git a/sound/usb/quirks-table.h b/sound/usb/quirks-table.h
index cdcf6b45e8a8..78e845ec65da 100644
--- a/sound/usb/quirks-table.h
+++ b/sound/usb/quirks-table.h
@@ -50,6 +50,28 @@
50 } 50 }
51}, 51},
52 52
53{
54 /* Creative BT-D1 */
55 USB_DEVICE(0x041e, 0x0005),
56 .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) {
57 .ifnum = 1,
58 .type = QUIRK_AUDIO_FIXED_ENDPOINT,
59 .data = &(const struct audioformat) {
60 .formats = SNDRV_PCM_FMTBIT_S16_LE,
61 .channels = 2,
62 .iface = 1,
63 .altsetting = 1,
64 .altset_idx = 1,
65 .endpoint = 0x03,
66 .ep_attr = USB_ENDPOINT_XFER_ISOC,
67 .attributes = 0,
68 .rates = SNDRV_PCM_RATE_CONTINUOUS,
69 .rate_min = 48000,
70 .rate_max = 48000,
71 }
72 }
73},
74
53/* Creative/Toshiba Multimedia Center SB-0500 */ 75/* Creative/Toshiba Multimedia Center SB-0500 */
54{ 76{
55 USB_DEVICE(0x041e, 0x3048), 77 USB_DEVICE(0x041e, 0x3048),
@@ -2993,7 +3015,7 @@ YAMAHA_DEVICE(0x7010, "UB99"),
2993 }, 3015 },
2994 { 3016 {
2995 .ifnum = 6, 3017 .ifnum = 6,
2996 .type = QUIRK_MIDI_MBOX2, 3018 .type = QUIRK_MIDI_MIDIMAN,
2997 .data = &(const struct snd_usb_midi_endpoint_info) { 3019 .data = &(const struct snd_usb_midi_endpoint_info) {
2998 .out_ep = 0x02, 3020 .out_ep = 0x02,
2999 .out_cables = 0x0001, 3021 .out_cables = 0x0001,
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
index f104c68fe1e0..acc12f004c23 100644
--- a/sound/usb/quirks.c
+++ b/sound/usb/quirks.c
@@ -306,7 +306,6 @@ int snd_usb_create_quirk(struct snd_usb_audio *chip,
306 [QUIRK_MIDI_YAMAHA] = create_any_midi_quirk, 306 [QUIRK_MIDI_YAMAHA] = create_any_midi_quirk,
307 [QUIRK_MIDI_MIDIMAN] = create_any_midi_quirk, 307 [QUIRK_MIDI_MIDIMAN] = create_any_midi_quirk,
308 [QUIRK_MIDI_NOVATION] = create_any_midi_quirk, 308 [QUIRK_MIDI_NOVATION] = create_any_midi_quirk,
309 [QUIRK_MIDI_MBOX2] = create_any_midi_quirk,
310 [QUIRK_MIDI_RAW_BYTES] = create_any_midi_quirk, 309 [QUIRK_MIDI_RAW_BYTES] = create_any_midi_quirk,
311 [QUIRK_MIDI_EMAGIC] = create_any_midi_quirk, 310 [QUIRK_MIDI_EMAGIC] = create_any_midi_quirk,
312 [QUIRK_MIDI_CME] = create_any_midi_quirk, 311 [QUIRK_MIDI_CME] = create_any_midi_quirk,
@@ -528,11 +527,11 @@ static void mbox2_setup_48_24_magic(struct usb_device *dev)
528#define MBOX2_BOOT_LOADING 0x01 /* Hard coded into the device */ 527#define MBOX2_BOOT_LOADING 0x01 /* Hard coded into the device */
529#define MBOX2_BOOT_READY 0x02 /* Hard coded into the device */ 528#define MBOX2_BOOT_READY 0x02 /* Hard coded into the device */
530 529
531int snd_usb_mbox2_boot_quirk(struct usb_device *dev) 530static int snd_usb_mbox2_boot_quirk(struct usb_device *dev)
532{ 531{
533 struct usb_host_config *config = dev->actconfig; 532 struct usb_host_config *config = dev->actconfig;
534 int err; 533 int err;
535 u8 bootresponse; 534 u8 bootresponse[12];
536 int fwsize; 535 int fwsize;
537 int count; 536 int count;
538 537
@@ -546,20 +545,20 @@ int snd_usb_mbox2_boot_quirk(struct usb_device *dev)
546 snd_printd("usb-audio: Sending Digidesign Mbox 2 boot sequence...\n"); 545 snd_printd("usb-audio: Sending Digidesign Mbox 2 boot sequence...\n");
547 546
548 count = 0; 547 count = 0;
549 bootresponse = MBOX2_BOOT_LOADING; 548 bootresponse[0] = MBOX2_BOOT_LOADING;
550 while ((bootresponse == MBOX2_BOOT_LOADING) && (count < 10)) { 549 while ((bootresponse[0] == MBOX2_BOOT_LOADING) && (count < 10)) {
551 msleep(500); /* 0.5 second delay */ 550 msleep(500); /* 0.5 second delay */
552 snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0), 551 snd_usb_ctl_msg(dev, usb_rcvctrlpipe(dev, 0),
553 /* Control magic - load onboard firmware */ 552 /* Control magic - load onboard firmware */
554 0x85, 0xc0, 0x0001, 0x0000, &bootresponse, 0x0012); 553 0x85, 0xc0, 0x0001, 0x0000, &bootresponse, 0x0012);
555 if (bootresponse == MBOX2_BOOT_READY) 554 if (bootresponse[0] == MBOX2_BOOT_READY)
556 break; 555 break;
557 snd_printd("usb-audio: device not ready, resending boot sequence...\n"); 556 snd_printd("usb-audio: device not ready, resending boot sequence...\n");
558 count++; 557 count++;
559 } 558 }
560 559
561 if (bootresponse != MBOX2_BOOT_READY) { 560 if (bootresponse[0] != MBOX2_BOOT_READY) {
562 snd_printk(KERN_ERR "usb-audio: Unknown bootresponse=%d, or timed out, ignoring device.\n", bootresponse); 561 snd_printk(KERN_ERR "usb-audio: Unknown bootresponse=%d, or timed out, ignoring device.\n", bootresponse[0]);
563 return -ENODEV; 562 return -ENODEV;
564 } 563 }
565 564
@@ -660,7 +659,6 @@ static int audiophile_skip_setting_quirk(struct snd_usb_audio *chip,
660 return 0; /* keep this altsetting */ 659 return 0; /* keep this altsetting */
661} 660}
662 661
663
664static int fasttrackpro_skip_setting_quirk(struct snd_usb_audio *chip, 662static int fasttrackpro_skip_setting_quirk(struct snd_usb_audio *chip,
665 int iface, int altno) 663 int iface, int altno)
666{ 664{
diff --git a/sound/usb/usbaudio.h b/sound/usb/usbaudio.h
index a8172c119796..1ac3fd9cc5a6 100644
--- a/sound/usb/usbaudio.h
+++ b/sound/usb/usbaudio.h
@@ -76,7 +76,6 @@ enum quirk_type {
76 QUIRK_MIDI_YAMAHA, 76 QUIRK_MIDI_YAMAHA,
77 QUIRK_MIDI_MIDIMAN, 77 QUIRK_MIDI_MIDIMAN,
78 QUIRK_MIDI_NOVATION, 78 QUIRK_MIDI_NOVATION,
79 QUIRK_MIDI_MBOX2,
80 QUIRK_MIDI_RAW_BYTES, 79 QUIRK_MIDI_RAW_BYTES,
81 QUIRK_MIDI_EMAGIC, 80 QUIRK_MIDI_EMAGIC,
82 QUIRK_MIDI_CME, 81 QUIRK_MIDI_CME,