Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ALSA: hda - verify pin:converter connection on unsol event for HSW and VLV

This patch will verify the pin's coverter selection for an active stream
when an unsol event reports this pin becomes available again after a display
mode change or hot-plug event.

For Haswell+ and Valleyview: display mode change or hot-plug can change the
transcoder:port connection and make all the involved audio pins share the 1st
converter. So the stream using 1st convertor will flow to multiple pins
but active streams using other converters will fail. This workaround
is to assure the pin selects the right conveter and an assigned converter is
not shared by other unused pins.

Signed-off-by: Mengdong Lin <mengdong.lin@intel.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Takashi Iwai <tiwai@suse.de>

authored by

Mengdong Lin and committed by
Takashi Iwai
b4f75aea 2bd0ae46

+9 -1
+9 -1
sound/pci/hda/patch_hdmi.c
··· 1594 1594 * Re-setup pin and infoframe. This is needed e.g. when 1595 1595 * - sink is first plugged-in (infoframe is not set up if !monitor_present) 1596 1596 * - transcoder can change during stream playback on Haswell 1597 + * and this can make HW reset converter selection on a pin. 1597 1598 */ 1598 - if (eld->eld_valid && !old_eld_valid && per_pin->setup) 1599 + if (eld->eld_valid && !old_eld_valid && per_pin->setup) { 1600 + if (is_haswell_plus(codec) || is_valleyview(codec)) { 1601 + intel_verify_pin_cvt_connect(codec, per_pin); 1602 + intel_not_share_assigned_cvt(codec, pin_nid, 1603 + per_pin->mux_idx); 1604 + } 1605 + 1599 1606 hdmi_setup_audio_infoframe(codec, per_pin, 1600 1607 per_pin->non_pcm); 1608 + } 1601 1609 } 1602 1610 1603 1611 if (eld_changed)