diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-20 10:52:13 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-12-20 10:52:13 -0500 |
commit | 03c850ec327c42a97e44c448b75983e12da417d9 (patch) | |
tree | d5fe304ba4b0639b331ffe689b5aff7c524cb4da /sound/pci | |
parent | 85d5b70d8a0681a362d075bf0d19b4ee8c6767ee (diff) | |
parent | cb99864d40e46dea9c2aa3eaa97517b776f91024 (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.c | 4 | ||||
-rw-r--r-- | sound/pci/hda/patch_hdmi.c | 46 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 5 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 2 |
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 | ||
3510 | out_free: | 3510 | out_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 | ||
439 | static int hdmi_get_channel_count(struct hda_codec *codec, hda_nid_t cvt_nid) | 441 | static 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 | ||
1684 | static 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 | |||
1694 | static int patch_generic_hdmi(struct hda_codec *codec) | 1708 | static 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, |