[alsa-devel] Problem with VIA VT1708S and git versions of alsa-driver.

Mark Goldstein goldstein.mark at gmail.com
Sat Jan 29 13:42:43 CET 2011


On Sat, Jan 29, 2011 at 12:53 PM, Mark Goldstein
<goldstein.mark at gmail.com> wrote:
> On Sat, Jan 29, 2011 at 12:42 PM, Mark Goldstein
> <goldstein.mark at gmail.com> wrote:
>> On Sat, Jan 29, 2011 at 11:37 AM, Mark Goldstein
>> <goldstein.mark at gmail.com> wrote:
>>> On Fri, Jan 28, 2011 at 2:47 AM, Raymond Yau
>>> <superquad.vortex2 at gmail.com> wrote:
>>>> 2011/1/27 Mark Goldstein <goldstein.mark at gmail.com>
>>>>
>>>>> On Thu, Jan 27, 2011 at 11:09 AM, Raymond Yau
>>>>> <superquad.vortex2 at gmail.com> wrote:
>>>>> > 2011/1/27 Mark Goldstein <goldstein.mark at 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:
1) setting of PIN control for Mics
2) shifting the ids in pin_idxs one position to the right
3) 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.

-- 
Mark Goldstein


More information about the Alsa-devel mailing list