Merge branch 'asoc-5.2' into asoc-linus
This commit is contained in:
@@ -538,6 +538,29 @@ static struct hdac_hdmi_port *hdac_hdmi_get_port_from_cvt(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Go through all converters and ensure connection is set to
|
||||
* the correct pin as set via kcontrols.
|
||||
*/
|
||||
static void hdac_hdmi_verify_connect_sel_all_pins(struct hdac_device *hdev)
|
||||
{
|
||||
struct hdac_hdmi_priv *hdmi = hdev_to_hdmi_priv(hdev);
|
||||
struct hdac_hdmi_port *port;
|
||||
struct hdac_hdmi_cvt *cvt;
|
||||
int cvt_idx = 0;
|
||||
|
||||
list_for_each_entry(cvt, &hdmi->cvt_list, head) {
|
||||
port = hdac_hdmi_get_port_from_cvt(hdev, hdmi, cvt);
|
||||
if (port && port->pin) {
|
||||
snd_hdac_codec_write(hdev, port->pin->nid, 0,
|
||||
AC_VERB_SET_CONNECT_SEL, cvt_idx);
|
||||
dev_dbg(&hdev->dev, "%s: %s set connect %d -> %d\n",
|
||||
__func__, cvt->name, port->pin->nid, cvt_idx);
|
||||
}
|
||||
++cvt_idx;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This tries to get a valid pin and set the HW constraints based on the
|
||||
* ELD. Even if a valid pin is not found return success so that device open
|
||||
@@ -798,6 +821,14 @@ static int hdac_hdmi_cvt_output_widget_event(struct snd_soc_dapm_widget *w,
|
||||
AC_VERB_SET_CHANNEL_STREAMID, pcm->stream_tag);
|
||||
snd_hdac_codec_write(hdev, cvt->nid, 0,
|
||||
AC_VERB_SET_STREAM_FORMAT, pcm->format);
|
||||
|
||||
/*
|
||||
* The connection indices are shared by all converters and
|
||||
* may interfere with each other. Ensure correct
|
||||
* routing for all converters at stream start.
|
||||
*/
|
||||
hdac_hdmi_verify_connect_sel_all_pins(hdev);
|
||||
|
||||
break;
|
||||
|
||||
case SND_SOC_DAPM_POST_PMD:
|
||||
|
Reference in New Issue
Block a user