[alsa-devel] [PATCH] ALSA: hda: hdmi - fix regression in connect list handling
Takashi Iwai
tiwai at suse.de
Wed Nov 27 12:47:51 CET 2019
On Wed, 27 Nov 2019 12:25:36 +0100,
Kai Vehmanen wrote:
>
> Fix regression in how intel_haswell_fixup_connect_list()
> results are used in hda_read_pin_conn(). Use of
> snd_hda_get_raw_connections() in hda_read_pin_conn() bypasses
> the cache and thus also bypasses the overridden pin connection
> list. On platforms that require the connection list fixup,
> mux list will be empty and HDMI playback will fail to -EBUSY
> at open.
Ah, thanks for catching this. This is an obvious overlook.
> @@ -1312,10 +1316,19 @@ static int hdmi_read_pin_conn(struct hda_codec *codec, int pin_idx)
>
> snd_hda_set_dev_select(codec, pin_nid, dev_id);
>
> + if (spec->intel_hsw_fixup) {
> + intel_haswell_fixup_connect_list(codec, pin_nid);
> + conns = snd_hda_get_connections(codec, pin_nid,
> + per_pin->mux_nids,
> + HDA_MAX_CONNECTIONS);
> + } else {
> + conns = snd_hda_get_raw_connections(codec, pin_nid,
> + per_pin->mux_nids,
> + HDA_MAX_CONNECTIONS);
> + }
Actually intel_haswell_fixup_connect_list() doesn't influence on the
hardware setup but just updates the software cache. So, basically we
can copy the values directly from spec->cvt_nids here without the
override hack as we have now.
That is, something like
if (spec->intel_hsw_fixup) {
conns = spec->cvt_nids;
memcpy(per_pin->mux_nids, spec->num_cvts,
sizeof(hda_nid_t) * conns);
} else {
snd_hda_set_dev_select(codec, pin_nid, dev_id);
conns = snd_hda_get_raw_connections(codec, pin_nid,
per_pin->mux_nids,
HDA_MAX_CONNECTIONS);
}
Could you check whether this works?
thanks,
Takashi
More information about the Alsa-devel
mailing list