[ALSA] ac97 - Added a codec patch for LM4550
authorCharl Coetzee <ccoetzee@interalia.ca>
Thu, 9 Feb 2006 10:48:21 +0000 (11:48 +0100)
committerJaroslav Kysela <perex@suse.cz>
Wed, 22 Mar 2006 09:28:39 +0000 (10:28 +0100)
Modules: AC97 Codec

Added a codec patch for LM4550.  It sets up a static volume resolution
table.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ac97/ac97_codec.c
sound/pci/ac97/ac97_patch.c
sound/pci/ac97/ac97_patch.h

index 124c1bc4cb92724c0b757a4afbef89e71f1d5796..38b6c65d40c37d16212af92526be1c62ef1c7c85 100644 (file)
@@ -150,7 +150,7 @@ static const struct ac97_codec_id snd_ac97_codec_ids[] = {
 { 0x49544561, 0xffffffff, "IT2646E",           patch_it2646,   NULL },
 { 0x4e534300, 0xffffffff, "LM4540,43,45,46,48",        NULL,           NULL }, // only guess --jk
 { 0x4e534331, 0xffffffff, "LM4549",            NULL,           NULL },
-{ 0x4e534350, 0xffffffff, "LM4550",            NULL,           NULL },
+{ 0x4e534350, 0xffffffff, "LM4550",            patch_lm4550,   NULL }, // volume wrap fix 
 { 0x50534304, 0xffffffff, "UCB1400",           NULL,           NULL },
 { 0x53494c20, 0xffffffe0, "Si3036,8",          mpatch_si3036,  mpatch_si3036, AC97_MODEM_PATCH },
 { 0x54524102, 0xffffffff, "TR28022",           NULL,           NULL },
index 8bc79cbe321523c6be863cb88915d30bd60f509b..5c03b4b6f5c1558eb106b66dd2289c02d6c219c9 100644 (file)
@@ -2825,3 +2825,34 @@ int mpatch_si3036(struct snd_ac97 * ac97)
        snd_ac97_write_cache(ac97, 0x68, 0);
        return 0;
 }
+
+/*
+ * LM 4550 Codec
+ *
+ * We use a static resolution table since LM4550 codec cannot be
+ * properly autoprobed to determine the resolution via
+ * check_volume_resolution().
+ */
+
+static struct snd_ac97_res_table lm4550_restbl[] = {
+       { AC97_MASTER, 0x1f1f },
+       { AC97_HEADPHONE, 0x1f1f },
+       { AC97_MASTER_MONO, 0x001f },
+       { AC97_PC_BEEP, 0x001f },       /* LSB is ignored */
+       { AC97_PHONE, 0x001f },
+       { AC97_PHONE, 0x001f },
+       { AC97_MIC, 0x001f },
+       { AC97_LINE, 0x1f1f },
+       { AC97_CD, 0x1f1f },
+       { AC97_VIDEO, 0x1f1f },
+       { AC97_AUX, 0x1f1f },
+       { AC97_PCM, 0x1f1f },
+       { AC97_REC_GAIN, 0x0f0f },
+       { } /* terminator */
+};
+
+int patch_lm4550(struct snd_ac97 *ac97)
+{
+       ac97->res_table = lm4550_restbl;
+       return 0;
+}
index 5060cb6f2ec370d4c53d2ea2111370612bb4292b..adcaa04586cbb500de7feeaaa893f36db7af97c6 100644 (file)
@@ -59,3 +59,4 @@ int patch_vt1616(struct snd_ac97 * ac97);
 int patch_vt1617a(struct snd_ac97 * ac97);
 int patch_it2646(struct snd_ac97 * ac97);
 int mpatch_si3036(struct snd_ac97 * ac97);
+int patch_lm4550(struct snd_ac97 * ac97);