From: Libin Yang <libin.yang@xxxxxxxxxxxxxxx> This patches adds the support of connection list for DP MST. With this, hdmi driver in DP MST mode can easily reuse the connection list mechanism. Signed-off-by: Libin Yang <libin.yang@xxxxxxxxxxxxxxx> --- sound/pci/hda/hda_codec.c | 52 +++++++++++++++++++++++++++--------------- sound/pci/hda/hda_codec.h | 15 ++++++------ sound/pci/hda/hda_generic.c | 18 +++++++-------- sound/pci/hda/hda_proc.c | 2 +- sound/pci/hda/patch_analog.c | 18 ++++++++------- sound/pci/hda/patch_hdmi.c | 8 ++++--- sound/pci/hda/patch_realtek.c | 20 ++++++++-------- sound/pci/hda/patch_sigmatel.c | 4 ++-- sound/pci/hda/patch_via.c | 10 ++++---- 9 files changed, 84 insertions(+), 63 deletions(-) diff --git a/sound/pci/hda/hda_codec.c b/sound/pci/hda/hda_codec.c index 8374188..d17e38e 100644 --- a/sound/pci/hda/hda_codec.c +++ b/sound/pci/hda/hda_codec.c @@ -110,23 +110,24 @@ struct hda_conn_list { struct list_head list; int len; hda_nid_t nid; + int dev_id; hda_nid_t conns[0]; }; /* look up the cached results */ static struct hda_conn_list * -lookup_conn_list(struct hda_codec *codec, hda_nid_t nid) +lookup_conn_list(struct hda_codec *codec, hda_nid_t nid, int dev_id) { struct hda_conn_list *p; list_for_each_entry(p, &codec->conn_list, list) { - if (p->nid == nid) + if ((p->nid == nid) && (p->dev_id == dev_id)) return p; } return NULL; } -static int add_conn_list(struct hda_codec *codec, hda_nid_t nid, int len, - const hda_nid_t *list) +static int add_conn_list(struct hda_codec *codec, hda_nid_t nid, + int dev_id, int len, const hda_nid_t *list) { struct hda_conn_list *p; @@ -135,6 +136,7 @@ static int add_conn_list(struct hda_codec *codec, hda_nid_t nid, int len, return -ENOMEM; p->len = len; p->nid = nid; + p->dev_id = dev_id; memcpy(p->conns, list, len * sizeof(hda_nid_t)); list_add(&p->list, &codec->conn_list); return 0; @@ -150,8 +152,13 @@ static void remove_conn_list(struct hda_codec *codec) } } -/* read the connection and add to the cache */ -static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid) +/* + * read the connection and add to the cache + * the caller should select the device entry by sending the + * corresponding verb if necessary before calling this function + */ +static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid, + int dev_id) { hda_nid_t list[32]; hda_nid_t *result = list; @@ -166,7 +173,8 @@ static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid) len = snd_hda_get_raw_connections(codec, nid, result, len); } if (len >= 0) - len = snd_hda_override_conn_list(codec, nid, len, result); + len = snd_hda_override_conn_list(codec, nid, dev_id, + len, result); if (result != list) kfree(result); return len; @@ -176,6 +184,7 @@ static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid) * snd_hda_get_conn_list - get connection list * @codec: the HDA codec * @nid: NID to parse + * @dev_id: device entry id * @listp: the pointer to store NID list * * Parses the connection list of the given widget and stores the pointer @@ -188,7 +197,7 @@ static int read_and_add_raw_conns(struct hda_codec *codec, hda_nid_t nid) * concurrently, protect with a mutex appropriately. */ int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid, - const hda_nid_t **listp) + int dev_id, const hda_nid_t **listp) { bool added = false; @@ -197,7 +206,7 @@ int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid, const struct hda_conn_list *p; /* if the connection-list is already cached, read it */ - p = lookup_conn_list(codec, nid); + p = lookup_conn_list(codec, nid, dev_id); if (p) { if (listp) *listp = p->conns; @@ -206,7 +215,7 @@ int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid, if (snd_BUG_ON(added)) return -EINVAL; - err = read_and_add_raw_conns(codec, nid); + err = read_and_add_raw_conns(codec, nid, dev_id); if (err < 0) return err; added = true; @@ -218,6 +227,7 @@ EXPORT_SYMBOL_GPL(snd_hda_get_conn_list); * snd_hda_get_connections - copy connection list * @codec: the HDA codec * @nid: NID to parse + * @dev_id: device entry id * @conn_list: connection list array; when NULL, checks only the size * @max_conns: max. number of connections to store * @@ -227,10 +237,11 @@ EXPORT_SYMBOL_GPL(snd_hda_get_conn_list); * Returns the number of connections, or a negative error code. */ int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid, - hda_nid_t *conn_list, int max_conns) + int dev_id, hda_nid_t *conn_list, + int max_conns) { const hda_nid_t *list; - int len = snd_hda_get_conn_list(codec, nid, &list); + int len = snd_hda_get_conn_list(codec, nid, dev_id, &list); if (len > 0 && conn_list) { if (len > max_conns) { @@ -249,6 +260,7 @@ EXPORT_SYMBOL_GPL(snd_hda_get_connections); * snd_hda_override_conn_list - add/modify the connection-list to cache * @codec: the HDA codec * @nid: NID to parse + * @dev_id: device entry id * @len: number of connection list entries * @list: the list of connection entries * @@ -257,18 +269,18 @@ EXPORT_SYMBOL_GPL(snd_hda_get_connections); * * Returns zero or a negative error code. */ -int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int len, - const hda_nid_t *list) +int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, + int dev_id, int len, const hda_nid_t *list) { struct hda_conn_list *p; - p = lookup_conn_list(codec, nid); + p = lookup_conn_list(codec, nid, dev_id); if (p) { list_del(&p->list); kfree(p); } - return add_conn_list(codec, nid, len, list); + return add_conn_list(codec, nid, dev_id, len, list); } EXPORT_SYMBOL_GPL(snd_hda_override_conn_list); @@ -277,6 +289,7 @@ EXPORT_SYMBOL_GPL(snd_hda_override_conn_list); * @codec: the HDA codec * @mux: NID containing the list * @nid: NID to select + * @dev_id: device entry id * @recursive: 1 when searching NID recursively, otherwise 0 * * Parses the connection list of the widget @mux and checks whether the @@ -284,12 +297,12 @@ EXPORT_SYMBOL_GPL(snd_hda_override_conn_list); * Otherwise it returns -1. */ int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux, - hda_nid_t nid, int recursive) + hda_nid_t nid, int dev_id, int recursive) { const hda_nid_t *conn; int i, nums; - nums = snd_hda_get_conn_list(codec, mux, &conn); + nums = snd_hda_get_conn_list(codec, mux, dev_id, &conn); for (i = 0; i < nums; i++) if (conn[i] == nid) return i; @@ -304,7 +317,8 @@ int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux, unsigned int type = get_wcaps_type(get_wcaps(codec, conn[i])); if (type == AC_WID_PIN || type == AC_WID_AUD_OUT) continue; - if (snd_hda_get_conn_index(codec, conn[i], nid, recursive) >= 0) + if (snd_hda_get_conn_index(codec, conn[i], nid, dev_id, + recursive) >= 0) return i; } return -1; diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h index 373fcad..4852c1a 100644 --- a/sound/pci/hda/hda_codec.h +++ b/sound/pci/hda/hda_codec.h @@ -329,11 +329,12 @@ snd_hda_codec_write(struct hda_codec *codec, hda_nid_t nid, int flags, #define snd_hda_get_sub_nodes(codec, nid, start_nid) \ snd_hdac_get_sub_nodes(&(codec)->core, nid, start_nid) int snd_hda_get_connections(struct hda_codec *codec, hda_nid_t nid, - hda_nid_t *conn_list, int max_conns); + int dev_id, hda_nid_t *conn_list, + int max_conns); static inline int -snd_hda_get_num_conns(struct hda_codec *codec, hda_nid_t nid) +snd_hda_get_num_conns(struct hda_codec *codec, hda_nid_t nid, int dev_id) { - return snd_hda_get_connections(codec, nid, NULL, 0); + return snd_hda_get_connections(codec, nid, dev_id, NULL, 0); } #define snd_hda_get_raw_connections(codec, nid, list, max_conns) \ @@ -341,12 +342,12 @@ snd_hda_get_num_conns(struct hda_codec *codec, hda_nid_t nid) #define snd_hda_get_num_raw_conns(codec, nid) \ snd_hdac_get_connections(&(codec)->core, nid, NULL, 0); -int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid, +int snd_hda_get_conn_list(struct hda_codec *codec, hda_nid_t nid, int dev_id, const hda_nid_t **listp); -int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, int nums, - const hda_nid_t *list); +int snd_hda_override_conn_list(struct hda_codec *codec, hda_nid_t nid, + int dev_id, int nums, const hda_nid_t *list); int snd_hda_get_conn_index(struct hda_codec *codec, hda_nid_t mux, - hda_nid_t nid, int recursive); + hda_nid_t nid, int dev_id, int recursive); int snd_hda_get_devices(struct hda_codec *codec, hda_nid_t nid, u8 *dev_list, int max_devices); diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index 7ca5b89..f8300b4 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c @@ -338,7 +338,7 @@ static bool is_reachable_path(struct hda_codec *codec, { if (!from_nid || !to_nid) return false; - return snd_hda_get_conn_index(codec, to_nid, from_nid, true) >= 0; + return snd_hda_get_conn_index(codec, to_nid, from_nid, 0, true) >= 0; } /* nid, dir and idx */ @@ -397,7 +397,7 @@ static bool __parse_nid_path(struct hda_codec *codec, else if (to_nid == (hda_nid_t)(-anchor_nid)) return false; /* hit the exclusive nid */ - nums = snd_hda_get_conn_list(codec, to_nid, &conn); + nums = snd_hda_get_conn_list(codec, to_nid, 0, &conn); for (i = 0; i < nums; i++) { if (conn[i] != from_nid) { /* special case: when from_nid is 0, @@ -696,9 +696,9 @@ static bool is_stereo_amps(struct hda_codec *codec, hda_nid_t nid, int dir) return true; if (dir != HDA_INPUT || get_wcaps_type(wcaps) != AC_WID_AUD_MIX) return false; - if (snd_hda_get_num_conns(codec, nid) != 1) + if (snd_hda_get_num_conns(codec, nid, 0) != 1) return false; - if (snd_hda_get_connections(codec, nid, &conn, 1) < 0) + if (snd_hda_get_connections(codec, nid, 0, &conn, 1) < 0) return false; return !!(get_wcaps(codec, conn) & AC_WCAP_STEREO); } @@ -791,7 +791,7 @@ static void activate_amp_in(struct hda_codec *codec, struct nid_path *path, int type; hda_nid_t nid = path->path[i]; - nums = snd_hda_get_conn_list(codec, nid, &conn); + nums = snd_hda_get_conn_list(codec, nid, 0, &conn); type = get_wcaps_type(get_wcaps(codec, nid)); if (type == AC_WID_PIN || (type == AC_WID_AUD_IN && codec->single_adc_amp)) { @@ -1058,7 +1058,7 @@ static int add_sw_ctl(struct hda_codec *codec, const char *pfx, int cidx, val = amp_val_replace_channels(val, chs); if (get_amp_direction_(val) == HDA_INPUT) { hda_nid_t nid = get_amp_nid_(val); - int nums = snd_hda_get_num_conns(codec, nid); + int nums = snd_hda_get_num_conns(codec, nid, 0); if (nums > 1) { type = HDA_CTL_BIND_MUTE; val |= nums << 19; @@ -3004,7 +3004,7 @@ static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid, const hda_nid_t *list; hda_nid_t nid; - idx = snd_hda_get_conn_index(codec, mix_nid, pin, true); + idx = snd_hda_get_conn_index(codec, mix_nid, pin, 0, true); if (idx < 0) return false; @@ -3017,7 +3017,7 @@ static bool look_for_mix_leaf_ctls(struct hda_codec *codec, hda_nid_t mix_nid, return true; /* check leaf node */ - num_conns = snd_hda_get_conn_list(codec, mix_nid, &list); + num_conns = snd_hda_get_conn_list(codec, mix_nid, 0, &list); if (num_conns < idx) return false; nid = list[idx]; @@ -4760,7 +4760,7 @@ static void mute_all_mixer_nid(struct hda_codec *codec, hda_nid_t mix) const hda_nid_t *conn; bool has_amp; - nums = snd_hda_get_conn_list(codec, mix, &conn); + nums = snd_hda_get_conn_list(codec, mix, 0, &conn); has_amp = nid_has_mute(codec, mix, HDA_INPUT); for (i = 0; i < nums; i++) { if (has_amp) diff --git a/sound/pci/hda/hda_proc.c b/sound/pci/hda/hda_proc.c index 033aa84..c747183 100644 --- a/sound/pci/hda/hda_proc.c +++ b/sound/pci/hda/hda_proc.c @@ -636,7 +636,7 @@ static void print_conn_list(struct snd_info_buffer *buffer, } /* Get Cache connections info */ - cache_len = snd_hda_get_conn_list(codec, nid, &list); + cache_len = snd_hda_get_conn_list(codec, nid, 0, &list); if (cache_len >= 0 && (cache_len != conn_len || memcmp(list, conn, conn_len) != 0)) { snd_iprintf(buffer, " In-driver Connection: %d\n", cache_len); diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c index e0fb8c6..6f007ff 100644 --- a/sound/pci/hda/patch_analog.c +++ b/sound/pci/hda/patch_analog.c @@ -466,7 +466,7 @@ static int ad1983_auto_smux_enum_info(struct snd_kcontrol *kcontrol, static const char * const texts2[] = { "PCM", "ADC" }; static const char * const texts3[] = { "PCM", "ADC1", "ADC2" }; hda_nid_t dig_out = spec->gen.multiout.dig_out_nid; - int num_conns = snd_hda_get_num_conns(codec, dig_out); + int num_conns = snd_hda_get_num_conns(codec, dig_out, 0); if (num_conns == 2) return snd_hda_enum_helper_info(kcontrol, uinfo, 2, texts2); @@ -493,7 +493,7 @@ static int ad1983_auto_smux_enum_put(struct snd_kcontrol *kcontrol, struct ad198x_spec *spec = codec->spec; unsigned int val = ucontrol->value.enumerated.item[0]; hda_nid_t dig_out = spec->gen.multiout.dig_out_nid; - int num_conns = snd_hda_get_num_conns(codec, dig_out); + int num_conns = snd_hda_get_num_conns(codec, dig_out, 0); if (val >= num_conns) return -EINVAL; @@ -521,7 +521,7 @@ static int ad1983_add_spdif_mux_ctl(struct hda_codec *codec) if (!dig_out) return 0; - num_conns = snd_hda_get_num_conns(codec, dig_out); + num_conns = snd_hda_get_num_conns(codec, dig_out, 0); if (num_conns != 2 && num_conns != 3) return 0; if (!snd_hda_gen_add_kctl(&spec->gen, NULL, &ad1983_auto_smux_mixer)) @@ -546,8 +546,10 @@ static int patch_ad1983(struct hda_codec *codec) set_beep_amp(spec, 0x10, 0, HDA_OUTPUT); /* limit the loopback routes not to confuse the parser */ - snd_hda_override_conn_list(codec, 0x0c, ARRAY_SIZE(conn_0c), conn_0c); - snd_hda_override_conn_list(codec, 0x0d, ARRAY_SIZE(conn_0d), conn_0d); + snd_hda_override_conn_list(codec, 0x0c, 0, ARRAY_SIZE(conn_0c), + conn_0c); + snd_hda_override_conn_list(codec, 0x0d, 0, ARRAY_SIZE(conn_0d), + conn_0d); err = ad198x_parse_auto_config(codec, false); if (err < 0) @@ -745,7 +747,7 @@ static int ad1988_auto_smux_enum_info(struct snd_kcontrol *kcontrol, static const char * const texts[] = { "PCM", "ADC1", "ADC2", "ADC3", }; - int num_conns = snd_hda_get_num_conns(codec, 0x0b) + 1; + int num_conns = snd_hda_get_num_conns(codec, 0x0b, 0) + 1; if (num_conns > 4) num_conns = 4; return snd_hda_enum_helper_info(kcontrol, uinfo, num_conns, texts); @@ -768,7 +770,7 @@ static int ad1988_auto_smux_enum_put(struct snd_kcontrol *kcontrol, struct ad198x_spec *spec = codec->spec; unsigned int val = ucontrol->value.enumerated.item[0]; struct nid_path *path; - int num_conns = snd_hda_get_num_conns(codec, 0x0b) + 1; + int num_conns = snd_hda_get_num_conns(codec, 0x0b, 0) + 1; if (val >= num_conns) return -EINVAL; @@ -856,7 +858,7 @@ static int ad1988_add_spdif_mux_ctl(struct hda_codec *codec) get_wcaps_type(get_wcaps(codec, 0x1d)) != AC_WID_AUD_MIX) return 0; - num_conns = snd_hda_get_num_conns(codec, 0x0b) + 1; + num_conns = snd_hda_get_num_conns(codec, 0x0b, 0) + 1; if (num_conns != 3 && num_conns != 4) return 0; diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c index fe4141c..7e03200 100644 --- a/sound/pci/hda/patch_hdmi.c +++ b/sound/pci/hda/patch_hdmi.c @@ -1719,7 +1719,7 @@ static int hdmi_read_pin_conn(struct hda_codec *codec, int pin_idx) return -EINVAL; } - per_pin->num_mux_nids = snd_hda_get_connections(codec, pin_nid, + per_pin->num_mux_nids = snd_hda_get_connections(codec, pin_nid, 0, per_pin->mux_nids, HDA_MAX_CONNECTIONS); @@ -2818,14 +2818,16 @@ static void intel_haswell_fixup_connect_list(struct hda_codec *codec, hda_nid_t conns[4]; int nconns; - nconns = snd_hda_get_connections(codec, nid, conns, ARRAY_SIZE(conns)); + nconns = snd_hda_get_connections(codec, nid, 0, conns, + ARRAY_SIZE(conns)); if (nconns == spec->num_cvts && !memcmp(conns, spec->cvt_nids, spec->num_cvts * sizeof(hda_nid_t))) return; /* override pins connection list */ codec_dbg(codec, "hdmi: haswell: override pin connection 0x%x\n", nid); - snd_hda_override_conn_list(codec, nid, spec->num_cvts, spec->cvt_nids); + snd_hda_override_conn_list(codec, nid, 0, spec->num_cvts, + spec->cvt_nids); } #define INTEL_VENDOR_NID 0x08 diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 93d2156..fb70f18 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -1851,17 +1851,17 @@ static void alc889_fixup_dac_route(struct hda_codec *codec, /* fake the connections during parsing the tree */ hda_nid_t conn1[2] = { 0x0c, 0x0d }; hda_nid_t conn2[2] = { 0x0e, 0x0f }; - snd_hda_override_conn_list(codec, 0x14, 2, conn1); - snd_hda_override_conn_list(codec, 0x15, 2, conn1); - snd_hda_override_conn_list(codec, 0x18, 2, conn2); - snd_hda_override_conn_list(codec, 0x1a, 2, conn2); + snd_hda_override_conn_list(codec, 0x14, 0, 2, conn1); + snd_hda_override_conn_list(codec, 0x15, 0, 2, conn1); + snd_hda_override_conn_list(codec, 0x18, 0, 2, conn2); + snd_hda_override_conn_list(codec, 0x1a, 0, 2, conn2); } else if (action == HDA_FIXUP_ACT_PROBE) { /* restore the connections */ hda_nid_t conn[5] = { 0x0c, 0x0d, 0x0e, 0x0f, 0x26 }; - snd_hda_override_conn_list(codec, 0x14, 5, conn); - snd_hda_override_conn_list(codec, 0x15, 5, conn); - snd_hda_override_conn_list(codec, 0x18, 5, conn); - snd_hda_override_conn_list(codec, 0x1a, 5, conn); + snd_hda_override_conn_list(codec, 0x14, 0, 5, conn); + snd_hda_override_conn_list(codec, 0x15, 0, 5, conn); + snd_hda_override_conn_list(codec, 0x18, 0, 5, conn); + snd_hda_override_conn_list(codec, 0x1a, 0, 5, conn); } } @@ -4607,8 +4607,8 @@ static void alc290_fixup_mono_speakers(struct hda_codec *codec, make sure 0x14 (front speaker) and 0x15 (headphones) use the stereo DAC, while leaving 0x17 (bass speaker) for node 0x03. */ hda_nid_t conn1[2] = { 0x0c }; - snd_hda_override_conn_list(codec, 0x14, 1, conn1); - snd_hda_override_conn_list(codec, 0x15, 1, conn1); + snd_hda_override_conn_list(codec, 0x14, 0, 1, conn1); + snd_hda_override_conn_list(codec, 0x15, 0, 1, conn1); } } diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 37b70f8..5bff793 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c @@ -984,7 +984,7 @@ static int stac_create_spdif_mux_ctls(struct hda_codec *codec) if (cfg->dig_outs < 1) return 0; - num_cons = snd_hda_get_num_conns(codec, cfg->dig_out_pins[0]); + num_cons = snd_hda_get_num_conns(codec, cfg->dig_out_pins[0], 0); if (num_cons <= 1) return 0; @@ -4543,7 +4543,7 @@ static int patch_stac92hd73xx(struct hda_codec *codec) spec->gen.mixer_nid = 0x1d; spec->have_spdif_mux = 1; - num_dacs = snd_hda_get_num_conns(codec, 0x0a) - 1; + num_dacs = snd_hda_get_num_conns(codec, 0x0a, 0) - 1; if (num_dacs < 3 || num_dacs > 5) { codec_warn(codec, "Could not determine number of channels defaulting to DAC count\n"); diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index fc30d1e..14d9010 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c @@ -867,7 +867,7 @@ static int add_secret_dac_path(struct hda_codec *codec) if (!spec->gen.mixer_nid) return 0; - nums = snd_hda_get_connections(codec, spec->gen.mixer_nid, conn, + nums = snd_hda_get_connections(codec, spec->gen.mixer_nid, 0, conn, ARRAY_SIZE(conn) - 1); for (i = 0; i < nums; i++) { if (get_wcaps_type(get_wcaps(codec, conn[i])) == AC_WID_AUD_OUT) @@ -882,7 +882,7 @@ static int add_secret_dac_path(struct hda_codec *codec) conn[nums++] = nid; return snd_hda_override_conn_list(codec, spec->gen.mixer_nid, - nums, conn); + 0, nums, conn); } } return 0; @@ -1082,8 +1082,10 @@ static void fix_vt1802_connections(struct hda_codec *codec) static hda_nid_t conn_24[] = { 0x14, 0x1c }; static hda_nid_t conn_33[] = { 0x1c }; - snd_hda_override_conn_list(codec, 0x24, ARRAY_SIZE(conn_24), conn_24); - snd_hda_override_conn_list(codec, 0x33, ARRAY_SIZE(conn_33), conn_33); + snd_hda_override_conn_list(codec, 0x24, 0, ARRAY_SIZE(conn_24), + conn_24); + snd_hda_override_conn_list(codec, 0x33, 0, ARRAY_SIZE(conn_33), + conn_33); } /* patch for vt2002P */ -- 1.9.1 _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel