[ALSA] ac97 - Fix silent output problem with Cx20551 codec
authorTakashi Iwai <tiwai@suse.de>
Fri, 9 Feb 2007 11:42:03 +0000 (12:42 +0100)
committerJaroslav Kysela <perex@suse.cz>
Wed, 14 Feb 2007 07:38:21 +0000 (08:38 +0100)
Fixed the silent output problem on laptops with Conexant Cx20551 codec
chip, such as Packard-bell EasyNote A* series.
The information was taken from ALSA bug#1134.

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

index 74ed81081478c1266a8851f6c8709fcdcc90c486..a9eec2a2357d5fae8638d2234444aca90ffe1bc2 100644 (file)
@@ -143,6 +143,7 @@ static const struct ac97_codec_id snd_ac97_codec_ids[] = {
 { 0x43525970, 0xfffffff8, "CS4202",            NULL,           NULL },
 { 0x43585421, 0xffffffff, "HSD11246",          NULL,           NULL }, // SmartMC II
 { 0x43585428, 0xfffffff8, "Cx20468",           patch_conexant, NULL }, // SmartAMC fixme: the mask might be different
+{ 0x43585431, 0xffffffff, "Cx20551",           patch_cx20551,  NULL },
 { 0x44543031, 0xfffffff0, "DT0398",            NULL,           NULL },
 { 0x454d4328, 0xffffffff, "EM28028",           NULL,           NULL },  // same as TR28028?
 { 0x45838308, 0xffffffff, "ESS1988",           NULL,           NULL },
index 641d0c8d659ed222f7540e8483f7881c1c232ab3..bfc2fed16da3a0208a6a5be3d146a81032ecffd1 100644 (file)
@@ -1338,6 +1338,12 @@ int patch_conexant(struct snd_ac97 * ac97)
        return 0;
 }
 
+int patch_cx20551(struct snd_ac97 *ac97)
+{
+       snd_ac97_update_bits(ac97, 0x5c, 0x01, 0x01);
+       return 0;
+}
+
 /*
  * Analog Device AD18xx, AD19xx codecs
  */
index 94340daaaf1f7a64835c2923b0780230fd01a260..555d1c9a98fd724f2dc977a7ac860a4cfcf923b0 100644 (file)
@@ -39,6 +39,7 @@ int patch_sigmatel_stac9758(struct snd_ac97 * ac97);
 int patch_cirrus_cs4299(struct snd_ac97 * ac97);
 int patch_cirrus_spdif(struct snd_ac97 * ac97);
 int patch_conexant(struct snd_ac97 * ac97);
+int patch_cx20551(struct snd_ac97 * ac97);
 int patch_ad1819(struct snd_ac97 * ac97);
 int patch_ad1881(struct snd_ac97 * ac97);
 int patch_ad1885(struct snd_ac97 * ac97);