Am Samstag 14 April 2007 schrieb Prakash Punnoor:

> Hah! I managed it!!! Just tested with speaker-test, so far. I hacked the
> driver a bit:
>
> In patch_analog.c in static int patch_ad1986a(struct hda_codec *codec)
>
>       case AD1986A_3STACK:
>               spec->num_mixers = 2;
>               spec->mixers[1] = ad1986a_3st_mixers;
>               //spec->num_init_verbs = 3;
>               //spec->init_verbs[1] = ad1986a_3st_init_verbs;
>               //spec->init_verbs[2] = ad1986a_ch2_init;
>               spec->channel_mode = ad1986a_modes;
>               spec->num_channel_mode = ARRAY_SIZE(ad1986a_modes);
>               spec->need_dac_fix = 0;//1;
>               spec->multiout.max_channels = 6;//2;
>               spec->multiout.num_dacs = 3;//1;
>               break;
>
> I don't yet know whether it is completely correct what I did and what is
> the minimal change needed.
>
> Perhaps some of the changes will lead to regressions, I need to check
> further.
>
> I think setting max channels and num_dacs has nor meaning, as probably the
> get overwritten on ch set, right? dac_fix probably changes the way num_dacs
> are assigned to?
>
> So my guess is that probably setting ad1986a_3st_init_verbs is wrong for my
> mobo.
>
>       {0x0f, AC_VERB_SET_CONNECT_SEL, 0x2},
>       {0x10, AC_VERB_SET_CONNECT_SEL, 0x1},
>
> What do those magic number 0x1 and 0x2 mean here? I looked into hda specs
> and ad1986a specs. 0xf is mic selector and 0x10 is line selector. Does is
> select which physical output is chosen?
>
> I will test later whether leaking dac_fix as 1 and ust taking out
> ad1986a_3st_init_verbs will be enough.
>
> Cheers,

OK, I was right. Taking out ad1986a_3st_init_verbs is enough for making it 
work:

        case AD1986A_3STACK:
                spec->num_mixers = 2;
                spec->mixers[1] = ad1986a_3st_mixers;
                spec->num_init_verbs = 1;//2;
                //spec->init_verbs[1] = ad1986a_3st_init_verbs;
                spec->init_verbs[2] = ad1986a_ch2_init;
                spec->channel_mode = ad1986a_modes;
                spec->num_channel_mode = ARRAY_SIZE(ad1986a_modes);
                spec->need_dac_fix = 1;
                spec->multiout.max_channels = 2;
                spec->multiout.num_dacs = 1;
                break;

There is still one bug left for me: If I change ch setting, I need to adjust 
vol for sur, cl/lfe again, otherwise they stay mute. Bug of driver or 
alsamixer?

Would be nice if we got a real fix for kernel 2.6.21. :-)

Cheers,
-- 
(°=                 =°)
//\ Prakash Punnoor /\\
V_/                 \_V

Attachment: signature.asc
Description: This is a digitally signed message part.

-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Alsa-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-user

Reply via email to