|
@@ -448,6 +448,9 @@ static int hdac_hdmi_query_port_connlist(struct hdac_ext_device *hdac,
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ if (hdac_hdmi_port_select_set(hdac, port) < 0)
|
|
|
|
+ return -EIO;
|
|
|
|
+
|
|
port->num_mux_nids = snd_hdac_get_connections(&hdac->hdac, pin->nid,
|
|
port->num_mux_nids = snd_hdac_get_connections(&hdac->hdac, pin->nid,
|
|
port->mux_nids, HDA_MAX_CONNECTIONS);
|
|
port->mux_nids, HDA_MAX_CONNECTIONS);
|
|
if (port->num_mux_nids == 0)
|
|
if (port->num_mux_nids == 0)
|
|
@@ -687,6 +690,10 @@ static int hdac_hdmi_pin_output_widget_event(struct snd_soc_dapm_widget *w,
|
|
if (!pcm)
|
|
if (!pcm)
|
|
return -EIO;
|
|
return -EIO;
|
|
|
|
|
|
|
|
+ /* set the device if pin is mst_capable */
|
|
|
|
+ if (hdac_hdmi_port_select_set(edev, port) < 0)
|
|
|
|
+ return -EIO;
|
|
|
|
+
|
|
switch (event) {
|
|
switch (event) {
|
|
case SND_SOC_DAPM_PRE_PMU:
|
|
case SND_SOC_DAPM_PRE_PMU:
|
|
hdac_hdmi_set_power_state(edev, port->pin->nid, AC_PWRST_D0);
|
|
hdac_hdmi_set_power_state(edev, port->pin->nid, AC_PWRST_D0);
|
|
@@ -775,6 +782,11 @@ static int hdac_hdmi_pin_mux_widget_event(struct snd_soc_dapm_widget *w,
|
|
kc = w->kcontrols[0];
|
|
kc = w->kcontrols[0];
|
|
|
|
|
|
mux_idx = dapm_kcontrol_get_value(kc);
|
|
mux_idx = dapm_kcontrol_get_value(kc);
|
|
|
|
+
|
|
|
|
+ /* set the device if pin is mst_capable */
|
|
|
|
+ if (hdac_hdmi_port_select_set(edev, port) < 0)
|
|
|
|
+ return -EIO;
|
|
|
|
+
|
|
if (mux_idx > 0) {
|
|
if (mux_idx > 0) {
|
|
snd_hdac_codec_write(&edev->hdac, port->pin->nid, 0,
|
|
snd_hdac_codec_write(&edev->hdac, port->pin->nid, 0,
|
|
AC_VERB_SET_CONNECT_SEL, (mux_idx - 1));
|
|
AC_VERB_SET_CONNECT_SEL, (mux_idx - 1));
|