[alsa-devel] ad1986a snd_hda_intel patch

Dmitry Ursegov dursegov at jet.su
Fri Apr 20 21:55:41 CEST 2007


Hello!

I have an asus a8jn laptop and a integrated audio with Analog Devices
AD1986A chip.

$ lspci -vnn
0:1b.0 Audio device [0403]: Intel Corporation 82801G (ICH7 Family) High
Definition Audio Controller [8086:27d8] (rev 02)
        Subsystem: ASUSTeK Computer Inc. Unknown device [1043:1447]
        Flags: bus master, fast devsel, latency 0, IRQ 21
        Memory at febfc000 (64-bit, non-prefetchable) [size=16K]
        Capabilities: <access denied>

The audio seems to work properly on the right channel, but not on the
left. All I get on the left channel is a loud screeching noise followed
by a pop when the audio turns off. The microphon jack don't work also.

I make a patch from the solution described in this
http://mailman.alsa-project.org/pipermail/alsa-devel/2007-March/000093.html message:

diff -Nur alsa-driver-1.0.14rc3/alsa-kernel/pci/hda/patch_analog.c
alsa-driver-1.0.14rc3_ad1986a/alsa-kernel/pci/hda/patch_analog.c
--- alsa-driver-1.0.14rc3/alsa-kernel/pci/hda/patch_analog.c
2007-03-06 15:26:32.000000000 +0300
+++ alsa-driver-1.0.14rc3_ad1986a/alsa-kernel/pci/hda/patch_analog.c
2007-04-20 23:32:19.000000000 +0400
@@ -873,7 +873,7 @@
        board_config = snd_hda_check_board_config(codec, AD1986A_MODELS,
                                                  ad1986a_models,
                                                  ad1986a_cfg_tbl);
-       switch (board_config) {
+/*     switch (board_config) {
        case AD1986A_3STACK:
                spec->num_mixers = 2;
                spec->mixers[1] = ad1986a_3st_mixers;
@@ -912,6 +912,18 @@
                spec->multiout.dig_out_nid = 0;
                break;
        }
+*/
+
+                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 = 1;
+                spec->multiout.max_channels = 2;
+                spec->multiout.num_dacs = 1;

        return 0;
 }

I don't know, why snd_hda_check_board_config() return wrong value, but
that workaround works.

Thanks!
Dmitry Ursegov



More information about the Alsa-devel mailing list