Merge branches 'topic/fix/hda' and 'topic/fix/misc' into for-linus

+39 -4
+6 -1
sound/core/control.c
··· 225 225 kctl.id.iface = ncontrol->iface; 226 226 kctl.id.device = ncontrol->device; 227 227 kctl.id.subdevice = ncontrol->subdevice; 228 - if (ncontrol->name) 228 + if (ncontrol->name) { 229 229 strlcpy(kctl.id.name, ncontrol->name, sizeof(kctl.id.name)); 230 + if (strcmp(ncontrol->name, kctl.id.name) != 0) 231 + snd_printk(KERN_WARNING 232 + "Control name '%s' truncated to '%s'\n", 233 + ncontrol->name, kctl.id.name); 234 + } 230 235 kctl.id.index = ncontrol->index; 231 236 kctl.count = ncontrol->count ? ncontrol->count : 1; 232 237 access = ncontrol->access == 0 ? SNDRV_CTL_ELEM_ACCESS_READWRITE :
+1
sound/pci/hda/hda_codec.c
··· 64 64 { 0x14f1, "Conexant" }, 65 65 { 0x17e8, "Chrontel" }, 66 66 { 0x1854, "LG" }, 67 + { 0x1aec, "Wolfson Microelectronics" }, 67 68 { 0x434d, "C-Media" }, 68 69 { 0x8384, "SigmaTel" }, 69 70 {} /* terminator */
+29
sound/pci/hda/hda_intel.c
··· 45 45 #include <linux/slab.h> 46 46 #include <linux/pci.h> 47 47 #include <linux/mutex.h> 48 + #include <linux/reboot.h> 48 49 #include <sound/core.h> 49 50 #include <sound/initval.h> 50 51 #include "hda_codec.h" ··· 398 397 399 398 /* for pending irqs */ 400 399 struct work_struct irq_pending_work; 400 + 401 + /* reboot notifier (for mysterious hangup problem at power-down) */ 402 + struct notifier_block reboot_notifier; 401 403 }; 402 404 403 405 /* driver types */ ··· 1983 1979 1984 1980 1985 1981 /* 1982 + * reboot notifier for hang-up problem at power-down 1983 + */ 1984 + static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf) 1985 + { 1986 + struct azx *chip = container_of(nb, struct azx, reboot_notifier); 1987 + azx_stop_chip(chip); 1988 + return NOTIFY_OK; 1989 + } 1990 + 1991 + static void azx_notifier_register(struct azx *chip) 1992 + { 1993 + chip->reboot_notifier.notifier_call = azx_halt; 1994 + register_reboot_notifier(&chip->reboot_notifier); 1995 + } 1996 + 1997 + static void azx_notifier_unregister(struct azx *chip) 1998 + { 1999 + if (chip->reboot_notifier.notifier_call) 2000 + unregister_reboot_notifier(&chip->reboot_notifier); 2001 + } 2002 + 2003 + /* 1986 2004 * destructor 1987 2005 */ 1988 2006 static int azx_free(struct azx *chip) 1989 2007 { 1990 2008 int i; 2009 + 2010 + azx_notifier_unregister(chip); 1991 2011 1992 2012 if (chip->initialized) { 1993 2013 azx_clear_irq_pending(chip); ··· 2376 2348 pci_set_drvdata(pci, card); 2377 2349 chip->running = 1; 2378 2350 power_down_all_codecs(chip); 2351 + azx_notifier_register(chip); 2379 2352 2380 2353 dev++; 2381 2354 return err;
+1
sound/pci/hda/patch_analog.c
··· 3860 3860 3861 3861 static struct snd_pci_quirk ad1884a_cfg_tbl[] = { 3862 3862 SND_PCI_QUIRK(0x103c, 0x3030, "HP", AD1884A_MOBILE), 3863 + SND_PCI_QUIRK(0x103c, 0x3056, "HP", AD1884A_MOBILE), 3863 3864 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X300", AD1884A_THINKPAD), 3864 3865 {} 3865 3866 };
+1 -3
sound/pci/hda/patch_sigmatel.c
··· 566 566 nid = codec->slave_dig_outs[smux_idx - 1]; 567 567 if (spec->cur_smux[smux_idx] == smux->num_items - 1) 568 568 val = AMP_OUT_MUTE; 569 - if (smux_idx == 0) 570 - nid = spec->multiout.dig_out_nid; 571 569 else 572 - nid = codec->slave_dig_outs[smux_idx - 1]; 570 + val = AMP_OUT_UNMUTE; 573 571 /* un/mute SPDIF out */ 574 572 snd_hda_codec_write_cache(codec, nid, 0, 575 573 AC_VERB_SET_AMP_GAIN_MUTE, val);
+1
sound/pci/intel8x0.c
··· 2702 2702 SND_PCI_QUIRK(0x0e11, 0x008a, "AD1885", 41000), 2703 2703 SND_PCI_QUIRK(0x1028, 0x00be, "AD1885", 44100), 2704 2704 SND_PCI_QUIRK(0x1028, 0x0177, "AD1980", 48000), 2705 + SND_PCI_QUIRK(0x1028, 0x01ad, "AD1981B", 48000), 2705 2706 SND_PCI_QUIRK(0x1043, 0x80f3, "AD1985", 48000), 2706 2707 { } /* terminator */ 2707 2708 };