2011/1/29 Mark Goldstein goldstein.mark@gmail.com
On Sat, Jan 29, 2011 at 12:53 PM, Mark Goldstein goldstein.mark@gmail.com wrote:
On Sat, Jan 29, 2011 at 12:42 PM, Mark Goldstein goldstein.mark@gmail.com wrote:
On Sat, Jan 29, 2011 at 11:37 AM, Mark Goldstein goldstein.mark@gmail.com wrote:
On Fri, Jan 28, 2011 at 2:47 AM, Raymond Yau superquad.vortex2@gmail.com wrote:
2011/1/27 Mark Goldstein goldstein.mark@gmail.com
On Thu, Jan 27, 2011 at 11:09 AM, Raymond Yau superquad.vortex2@gmail.com wrote: > 2011/1/27 Mark Goldstein goldstein.mark@gmail.com >
Still trying to figure out why only Rear Mic works while Front Mic does
not.
Ok, for some reason Pin-ctls for Front Mic (0x1e) set to VREF Hi-Z. After I set it to VREF 50 using hda-analyser, Front Mic started working. Have to figure out why it is set to Hi-Z.
static void via_auto_init_analog_input(struct hda_codec *codec) { struct via_spec *spec = codec->spec; const struct auto_pin_cfg *cfg = &spec->autocfg; unsigned int ctl; int i;
for (i = 0; i < cfg->num_inputs; i++) { hda_nid_t nid = cfg->inputs[i].pin; if (spec->smart51_enabled && is_smart51_pins(spec, nid)) ctl = PIN_OUT; else if (i == AUTO_PIN_MIC) ^^^^^^^^^^^^^^^^^^^^^^^^^ ctl = PIN_VREF50; else ctl = PIN_IN; snd_hda_codec_write(codec, nid, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, ctl); }
}
Should it probably be else if (cfg->input[i].type == AUTO_PIN_MIC) ?
OK, now it works for me. So totally there were 3 changes:
- setting of PIN control for Mics
- shifting the ids in pin_idxs one position to the right
- using specialized version of vt_auto_create_analog_input_ctls, that
passes idx - 1 to snd_hda_add_imux_item.
Well, instead of last two changes it was probably possible to use only 3rd, but instead of passing idx - 1 to snd_hda_add_imux_item pass idx
- 1 to via_new_analog_input.
Of course it should be done in more common way, since not only VT1708S used different indexes for via_new_analog_input and snd_hda_add_imux_item.
The reason is assign "Stereo Mix" as first element of input source ,
In snd_hda_input_mux_put() , imux->items[].index is the position of the pin in the connection list
snd_hda_codec_write_cache(codec, nid, 0, AC_VERB_SET_CONNECT_SEL, imux->items[idx].index);
if you look at print_codec_info() in hda_proc.c
you can get the connection list of imux using snd_hda_get_connections()
conn_len = snd_hda_get_connections(codec, nid, conn, HDA_MAX_CONNECTIONS);