]> git.hungrycats.org Git - linux/commitdiff
ALSA CVS update - Jaroslav Kysela <perex@suse.cz>
authorJaroslav Kysela <perex@suse.cz>
Mon, 15 Mar 2004 12:04:42 +0000 (13:04 +0100)
committerJaroslav Kysela <perex@suse.cz>
Mon, 15 Mar 2004 12:04:42 +0000 (13:04 +0100)
AC97 Codec Core
Kevin Mack <kevmack@accesscomm.ca>
Here's a quick and dirty patch that's given me basic sound from
my Gateway M675 notebook (Sigmatel 9758 AC97 codec).

include/sound/ac97_codec.h
sound/pci/ac97/ac97_codec.c
sound/pci/ac97/ac97_patch.c
sound/pci/ac97/ac97_patch.h

index 0f27586b8fd00671e2deb47149102a6eba8c526d..0113fbebcf927f2e30e04b8a6cf999ddfd122295 100644 (file)
 #define AC97_GPIO_LINE2_HL1R    0x8000  /* Opt./ Handset to Line2 relay control (out) */
 
 /* specific - SigmaTel */
+#define AC97_SIGMATEL_OUTSEL   0x64    /* Output Select, STAC9758 */
+#define AC97_SIGMATEL_INSEL    0x66    /* Input Select, STAC9758 */
+#define AC97_SIGMATEL_IOMISC   0x68    /* STAC9758 */
 #define AC97_SIGMATEL_ANALOG   0x6c    /* Analog Special */
 #define AC97_SIGMATEL_DAC2INVERT 0x6e
 #define AC97_SIGMATEL_BIAS1    0x70
 #define AC97_SIGMATEL_BIAS2    0x72
+#define AC97_SIGMATEL_VARIOUS  0x72    /* STAC9758 */
 #define AC97_SIGMATEL_MULTICHN 0x74    /* Multi-Channel programming */
 #define AC97_SIGMATEL_CIC1     0x76
 #define AC97_SIGMATEL_CIC2     0x78
index 8cd709fac269569192877c3be54fe107841bacb5..6f94c782458c8a437c74e80d984ce23afc25dfb6 100644 (file)
@@ -171,6 +171,7 @@ static const ac97_codec_id_t snd_ac97_codec_ids[] = {
 { 0x83847650, 0xffffffff, "STAC9750/51",       NULL,           NULL }, // patch?
 { 0x83847652, 0xffffffff, "STAC9752/53",       NULL,           NULL }, // patch?
 { 0x83847656, 0xffffffff, "STAC9756/57",       patch_sigmatel_stac9756,        NULL },
+{ 0x83847658, 0xffffffff, "STAC9758/59",       patch_sigmatel_stac9758,        NULL },
 { 0x83847666, 0xffffffff, "STAC9766/67",       NULL,           NULL }, // patch?
 { 0,         0,          NULL,                 NULL,           NULL }
 };
index fbf889c1db0e4917085e037150da32d28b2dbee1..414bc3729451ba6aa5fec0a40096e517d10362f7 100644 (file)
@@ -447,6 +447,21 @@ int patch_sigmatel_stac9756(ac97_t * ac97)
        return 0;
 }
 
+int patch_sigmatel_stac9758(ac97_t * ac97)
+{
+       // patch for SigmaTel
+       ac97->build_ops = &patch_sigmatel_stac9700_ops;
+       // turn on stereo speaker, headphone and line-out
+       snd_ac97_write_cache(ac97, AC97_SIGMATEL_OUTSEL, 0x9040);
+       // headphone select and boost
+       snd_ac97_write_cache(ac97, AC97_SIGMATEL_IOMISC, 0x2102);
+       // enable mic
+       snd_ac97_write_cache(ac97, AC97_SIGMATEL_INSEL, 0x0203);
+       // enable stereo mic
+       snd_ac97_write_cache(ac97, AC97_SIGMATEL_VARIOUS, 0x0001);
+       return 0;
+}
+
 /*
  * Cirrus Logic CS42xx codecs
  */
index 2cc081a4730427ea8afcf0a9202647b7a0794005..3e78799c593ade8ce13ae94be187cf62f20e242a 100644 (file)
@@ -34,6 +34,7 @@ int patch_sigmatel_stac9708(ac97_t * ac97);
 int patch_sigmatel_stac9721(ac97_t * ac97);
 int patch_sigmatel_stac9744(ac97_t * ac97);
 int patch_sigmatel_stac9756(ac97_t * ac97);
+int patch_sigmatel_stac9758(ac97_t * ac97);
 int patch_cirrus_cs4299(ac97_t * ac97);
 int patch_cirrus_spdif(ac97_t * ac97);
 int patch_conexant(ac97_t * ac97);