ALSA: hda/ca0132 - Change ca0132_mmio_init for AE-5
authorConnor McAdams <conmanx360@gmail.com>
Tue, 18 Sep 2018 18:33:33 +0000 (14:33 -0400)
committerTakashi Iwai <tiwai@suse.de>
Thu, 20 Sep 2018 07:17:00 +0000 (09:17 +0200)
This patch adds the unique writes for the AE-5 on startup to
ca0132_mmio_init. The other cards share some addresses written to, but
use different values.

Signed-off-by: Connor McAdams <conmanx360@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_ca0132.c

index 9caa267..7dfa6bf 100644 (file)
@@ -7223,23 +7223,72 @@ static void ca0132_mmio_init(struct hda_codec *codec)
 {
        struct ca0132_spec *spec = codec->spec;
 
-       writel(0x00000000, spec->mem_base + 0x400);
-       writel(0x00000000, spec->mem_base + 0x408);
-       writel(0x00000000, spec->mem_base + 0x40C);
+       if (spec->quirk == QUIRK_AE5)
+               writel(0x00000001, spec->mem_base + 0x400);
+       else
+               writel(0x00000000, spec->mem_base + 0x400);
+
+       if (spec->quirk == QUIRK_AE5)
+               writel(0x00000001, spec->mem_base + 0x408);
+       else
+               writel(0x00000000, spec->mem_base + 0x408);
+
+       if (spec->quirk == QUIRK_AE5)
+               writel(0x00000001, spec->mem_base + 0x40c);
+       else
+               writel(0x00000000, spec->mem_base + 0x40C);
+
        writel(0x00880680, spec->mem_base + 0x01C);
-       writel(0x00000083, spec->mem_base + 0xC0C);
+
+       if (spec->quirk == QUIRK_AE5)
+               writel(0x00000080, spec->mem_base + 0xC0C);
+       else
+               writel(0x00000083, spec->mem_base + 0xC0C);
+
        writel(0x00000030, spec->mem_base + 0xC00);
        writel(0x00000000, spec->mem_base + 0xC04);
+
+       if (spec->quirk == QUIRK_AE5)
+               writel(0x00000000, spec->mem_base + 0xC0C);
+       else
+               writel(0x00000003, spec->mem_base + 0xC0C);
+
        writel(0x00000003, spec->mem_base + 0xC0C);
        writel(0x00000003, spec->mem_base + 0xC0C);
        writel(0x00000003, spec->mem_base + 0xC0C);
-       writel(0x00000003, spec->mem_base + 0xC0C);
-       writel(0x000000C1, spec->mem_base + 0xC08);
+
+       if (spec->quirk == QUIRK_AE5)
+               writel(0x00000001, spec->mem_base + 0xC08);
+       else
+               writel(0x000000C1, spec->mem_base + 0xC08);
+
        writel(0x000000F1, spec->mem_base + 0xC08);
        writel(0x00000001, spec->mem_base + 0xC08);
        writel(0x000000C7, spec->mem_base + 0xC08);
        writel(0x000000C1, spec->mem_base + 0xC08);
        writel(0x00000080, spec->mem_base + 0xC04);
+
+       if (spec->quirk == QUIRK_AE5) {
+               writel(0x00000000, spec->mem_base + 0x42c);
+               writel(0x00000000, spec->mem_base + 0x46c);
+               writel(0x00000000, spec->mem_base + 0x4ac);
+               writel(0x00000000, spec->mem_base + 0x4ec);
+               writel(0x00000000, spec->mem_base + 0x43c);
+               writel(0x00000000, spec->mem_base + 0x47c);
+               writel(0x00000000, spec->mem_base + 0x4bc);
+               writel(0x00000000, spec->mem_base + 0x4fc);
+               writel(0x00000600, spec->mem_base + 0x100);
+               writel(0x00000014, spec->mem_base + 0x410);
+               writel(0x0000060f, spec->mem_base + 0x100);
+               writel(0x0000070f, spec->mem_base + 0x100);
+               writel(0x00000aff, spec->mem_base + 0x830);
+               writel(0x00000000, spec->mem_base + 0x86c);
+               writel(0x0000006b, spec->mem_base + 0x800);
+               writel(0x00000001, spec->mem_base + 0x86c);
+               writel(0x0000006b, spec->mem_base + 0x800);
+               writel(0x00000057, spec->mem_base + 0x804);
+               writel(0x00800000, spec->mem_base + 0x20c);
+       }
 }
 
 /*