aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2012-12-20 10:52:13 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2012-12-20 10:52:13 -0500
commit03c850ec327c42a97e44c448b75983e12da417d9 (patch)
treed5fe304ba4b0639b331ffe689b5aff7c524cb4da /sound/pci
parent85d5b70d8a0681a362d075bf0d19b4ee8c6767ee (diff)
parentcb99864d40e46dea9c2aa3eaa97517b776f91024 (diff)
Merge tag 'sound-3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "This update contains overall only driver-specific fixes. Slightly large LOC are seen in usb-audio driver for a couple of new device quirks and cs42l71 ASoC driver for enhanced features. The others are a few small (regression) fixes HD-audio, and yet other small / trival ASoC fixes." * tag 'sound-3.8' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: usb-audio: Support for Digidesign Mbox 2 USB sound card: ALSA: HDA: Fix sound resume hang ALSA: hda - bug fix for invalid connection list of Haswell HDMI codec pins ALSA: hda - Fix the wrong pincaps set in ALC861VD dallas/hp fixup ALSA: hda - Set codec->single_adc_amp flag for Realtek codecs ASoC: atmel-ssc: change disable to disable in dts node ASoC: Prevent pop_wait overwrite ALSA: usb-audio: ignore-quirk for HP Wireless Audio ALSA: hda - Always turn on pins for HDMI/DP ALSA: hda - Fix pin configuration of HP Pavilion dv7 ASoC: core: Fix splitting of log messages ASoC: cs42l73: Change VSPIN/VSPOUT to VSPINOUT ASoC: cs42l73: Add DAPM events for power down. ASoC: cs42l73: Add DMIC's as DAPM inputs. ASoC: sigmadsp: Fix endianness conversion issue ASoC: tpa6130a2: Use devm_* APIs
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/hda_intel.c4
-rw-r--r--sound/pci/hda/patch_hdmi.c46
-rw-r--r--sound/pci/hda/patch_realtek.c5
-rw-r--r--sound/pci/hda/patch_sigmatel.c2
4 files changed, 38 insertions, 19 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 0f3d3db0df71..cca87277baf0 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2876,7 +2876,7 @@ static int azx_free(struct azx *chip)
2876 azx_notifier_unregister(chip); 2876 azx_notifier_unregister(chip);
2877 2877
2878 chip->init_failed = 1; /* to be sure */ 2878 chip->init_failed = 1; /* to be sure */
2879 complete(&chip->probe_wait); 2879 complete_all(&chip->probe_wait);
2880 2880
2881 if (use_vga_switcheroo(chip)) { 2881 if (use_vga_switcheroo(chip)) {
2882 if (chip->disabled && chip->bus) 2882 if (chip->disabled && chip->bus)
@@ -3504,7 +3504,7 @@ static int azx_probe(struct pci_dev *pci,
3504 pm_runtime_put_noidle(&pci->dev); 3504 pm_runtime_put_noidle(&pci->dev);
3505 3505
3506 dev++; 3506 dev++;
3507 complete(&chip->probe_wait); 3507 complete_all(&chip->probe_wait);
3508 return 0; 3508 return 0;
3509 3509
3510out_free: 3510out_free:
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 0fcfa6f406b8..b6c21ea187ca 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -431,9 +431,11 @@ static void hdmi_init_pin(struct hda_codec *codec, hda_nid_t pin_nid)
431 if (get_wcaps(codec, pin_nid) & AC_WCAP_OUT_AMP) 431 if (get_wcaps(codec, pin_nid) & AC_WCAP_OUT_AMP)
432 snd_hda_codec_write(codec, pin_nid, 0, 432 snd_hda_codec_write(codec, pin_nid, 0,
433 AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE); 433 AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE);
434 /* Disable pin out until stream is active*/ 434 /* Enable pin out: some machines with GM965 gets broken output when
435 * the pin is disabled or changed while using with HDMI
436 */
435 snd_hda_codec_write(codec, pin_nid, 0, 437 snd_hda_codec_write(codec, pin_nid, 0,
436 AC_VERB_SET_PIN_WIDGET_CONTROL, 0); 438 AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT);
437} 439}
438 440
439static int hdmi_get_channel_count(struct hda_codec *codec, hda_nid_t cvt_nid) 441static int hdmi_get_channel_count(struct hda_codec *codec, hda_nid_t cvt_nid)
@@ -1341,7 +1343,6 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
1341 struct hdmi_spec *spec = codec->spec; 1343 struct hdmi_spec *spec = codec->spec;
1342 int pin_idx = hinfo_to_pin_index(spec, hinfo); 1344 int pin_idx = hinfo_to_pin_index(spec, hinfo);
1343 hda_nid_t pin_nid = spec->pins[pin_idx].pin_nid; 1345 hda_nid_t pin_nid = spec->pins[pin_idx].pin_nid;
1344 int pinctl;
1345 bool non_pcm; 1346 bool non_pcm;
1346 1347
1347 non_pcm = check_non_pcm_per_cvt(codec, cvt_nid); 1348 non_pcm = check_non_pcm_per_cvt(codec, cvt_nid);
@@ -1350,11 +1351,6 @@ static int generic_hdmi_playback_pcm_prepare(struct hda_pcm_stream *hinfo,
1350 1351
1351 hdmi_setup_audio_infoframe(codec, pin_idx, non_pcm, substream); 1352 hdmi_setup_audio_infoframe(codec, pin_idx, non_pcm, substream);
1352 1353
1353 pinctl = snd_hda_codec_read(codec, pin_nid, 0,
1354 AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
1355 snd_hda_codec_write(codec, pin_nid, 0,
1356 AC_VERB_SET_PIN_WIDGET_CONTROL, pinctl | PIN_OUT);
1357
1358 return hdmi_setup_stream(codec, cvt_nid, pin_nid, stream_tag, format); 1354 return hdmi_setup_stream(codec, cvt_nid, pin_nid, stream_tag, format);
1359} 1355}
1360 1356
@@ -1374,7 +1370,6 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo,
1374 int cvt_idx, pin_idx; 1370 int cvt_idx, pin_idx;
1375 struct hdmi_spec_per_cvt *per_cvt; 1371 struct hdmi_spec_per_cvt *per_cvt;
1376 struct hdmi_spec_per_pin *per_pin; 1372 struct hdmi_spec_per_pin *per_pin;
1377 int pinctl;
1378 1373
1379 if (hinfo->nid) { 1374 if (hinfo->nid) {
1380 cvt_idx = cvt_nid_to_cvt_index(spec, hinfo->nid); 1375 cvt_idx = cvt_nid_to_cvt_index(spec, hinfo->nid);
@@ -1391,11 +1386,6 @@ static int hdmi_pcm_close(struct hda_pcm_stream *hinfo,
1391 return -EINVAL; 1386 return -EINVAL;
1392 per_pin = &spec->pins[pin_idx]; 1387 per_pin = &spec->pins[pin_idx];
1393 1388
1394 pinctl = snd_hda_codec_read(codec, per_pin->pin_nid, 0,
1395 AC_VERB_GET_PIN_WIDGET_CONTROL, 0);
1396 snd_hda_codec_write(codec, per_pin->pin_nid, 0,
1397 AC_VERB_SET_PIN_WIDGET_CONTROL,
1398 pinctl & ~PIN_OUT);
1399 snd_hda_spdif_ctls_unassign(codec, pin_idx); 1389 snd_hda_spdif_ctls_unassign(codec, pin_idx);
1400 per_pin->chmap_set = false; 1390 per_pin->chmap_set = false;
1401 memset(per_pin->chmap, 0, sizeof(per_pin->chmap)); 1391 memset(per_pin->chmap, 0, sizeof(per_pin->chmap));
@@ -1691,6 +1681,30 @@ static const struct hda_codec_ops generic_hdmi_patch_ops = {
1691 .unsol_event = hdmi_unsol_event, 1681 .unsol_event = hdmi_unsol_event,
1692}; 1682};
1693 1683
1684static void intel_haswell_fixup_connect_list(struct hda_codec *codec)
1685{
1686 unsigned int vendor_param;
1687 hda_nid_t list[3] = {0x2, 0x3, 0x4};
1688
1689 vendor_param = snd_hda_codec_read(codec, 0x08, 0, 0xf81, 0);
1690 if (vendor_param == -1 || vendor_param & 0x02)
1691 return;
1692
1693 /* enable DP1.2 mode */
1694 vendor_param |= 0x02;
1695 snd_hda_codec_read(codec, 0x08, 0, 0x781, vendor_param);
1696
1697 vendor_param = snd_hda_codec_read(codec, 0x08, 0, 0xf81, 0);
1698 if (vendor_param == -1 || !(vendor_param & 0x02))
1699 return;
1700
1701 /* override 3 pins connection list */
1702 snd_hda_override_conn_list(codec, 0x05, 3, list);
1703 snd_hda_override_conn_list(codec, 0x06, 3, list);
1704 snd_hda_override_conn_list(codec, 0x07, 3, list);
1705}
1706
1707
1694static int patch_generic_hdmi(struct hda_codec *codec) 1708static int patch_generic_hdmi(struct hda_codec *codec)
1695{ 1709{
1696 struct hdmi_spec *spec; 1710 struct hdmi_spec *spec;
@@ -1700,6 +1714,10 @@ static int patch_generic_hdmi(struct hda_codec *codec)
1700 return -ENOMEM; 1714 return -ENOMEM;
1701 1715
1702 codec->spec = spec; 1716 codec->spec = spec;
1717
1718 if (codec->vendor_id == 0x80862807)
1719 intel_haswell_fixup_connect_list(codec);
1720
1703 if (hdmi_parse_codec(codec) < 0) { 1721 if (hdmi_parse_codec(codec) < 0) {
1704 codec->spec = NULL; 1722 codec->spec = NULL;
1705 kfree(spec); 1723 kfree(spec);
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
index 7743775f6abb..6ee34593774a 100644
--- a/sound/pci/hda/patch_realtek.c
+++ b/sound/pci/hda/patch_realtek.c
@@ -4373,6 +4373,7 @@ static int alc_alloc_spec(struct hda_codec *codec, hda_nid_t mixer_nid)
4373 if (!spec) 4373 if (!spec)
4374 return -ENOMEM; 4374 return -ENOMEM;
4375 codec->spec = spec; 4375 codec->spec = spec;
4376 codec->single_adc_amp = 1;
4376 spec->mixer_nid = mixer_nid; 4377 spec->mixer_nid = mixer_nid;
4377 snd_hda_gen_init(&spec->gen); 4378 snd_hda_gen_init(&spec->gen);
4378 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32); 4379 snd_array_init(&spec->kctls, sizeof(struct snd_kcontrol_new), 32);
@@ -6569,8 +6570,8 @@ static void alc861vd_fixup_dallas(struct hda_codec *codec,
6569 const struct alc_fixup *fix, int action) 6570 const struct alc_fixup *fix, int action)
6570{ 6571{
6571 if (action == ALC_FIXUP_ACT_PRE_PROBE) { 6572 if (action == ALC_FIXUP_ACT_PRE_PROBE) {
6572 snd_hda_override_pin_caps(codec, 0x18, 0x00001714); 6573 snd_hda_override_pin_caps(codec, 0x18, 0x00000734);
6573 snd_hda_override_pin_caps(codec, 0x19, 0x0000171c); 6574 snd_hda_override_pin_caps(codec, 0x19, 0x0000073c);
6574 } 6575 }
6575} 6576}
6576 6577
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c
index df13c0f84899..a86547ca17c8 100644
--- a/sound/pci/hda/patch_sigmatel.c
+++ b/sound/pci/hda/patch_sigmatel.c
@@ -1725,7 +1725,7 @@ static const struct snd_pci_quirk stac92hd83xxx_cfg_tbl[] = {
1725 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1658, 1725 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1658,
1726 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD), 1726 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD),
1727 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1659, 1727 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x1659,
1728 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD), 1728 "HP Pavilion dv7", STAC_HP_DV7_4000),
1729 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x165A, 1729 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x165A,
1730 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD), 1730 "HP", STAC_92HD83XXX_HP_cNB11_INTQUAD),
1731 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x165B, 1731 SND_PCI_QUIRK(PCI_VENDOR_ID_HP, 0x165B,