提交 2e75d050 编写于 作者: T Takashi Iwai

[ALSA] ac97 - Add a workaround for broken quirk for VT1617A codec

On boards with VT1617A codec, the sound disappears suddenly.
This looks like a problem with HPE-bit control that is supposed to be
set in patch_vt1617a().  However, on such problematic hardwares, the
bit is actually reset mysteriously.

The patch adds a workaround for the wrong quirk.
Signed-off-by: NTakashi Iwai <tiwai@suse.de>
上级 564c5bea
...@@ -3446,6 +3446,7 @@ static const struct snd_kcontrol_new snd_ac97_controls_vt1617a[] = { ...@@ -3446,6 +3446,7 @@ static const struct snd_kcontrol_new snd_ac97_controls_vt1617a[] = {
int patch_vt1617a(struct snd_ac97 * ac97) int patch_vt1617a(struct snd_ac97 * ac97)
{ {
int err = 0; int err = 0;
int val;
/* we choose to not fail out at this point, but we tell the /* we choose to not fail out at this point, but we tell the
caller when we return */ caller when we return */
...@@ -3456,7 +3457,13 @@ int patch_vt1617a(struct snd_ac97 * ac97) ...@@ -3456,7 +3457,13 @@ int patch_vt1617a(struct snd_ac97 * ac97)
/* bring analog power consumption to normal by turning off the /* bring analog power consumption to normal by turning off the
* headphone amplifier, like WinXP driver for EPIA SP * headphone amplifier, like WinXP driver for EPIA SP
*/ */
/* We need to check the bit before writing it.
* On some (many?) hardwares, setting bit actually clears it!
*/
val = snd_ac97_read(ac97, 0x5c);
if (!(val & 0x20))
snd_ac97_write_cache(ac97, 0x5c, 0x20); snd_ac97_write_cache(ac97, 0x5c, 0x20);
ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */ ac97->ext_id |= AC97_EI_SPDIF; /* force the detection of spdif */
ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000; ac97->rates[AC97_RATES_SPDIF] = SNDRV_PCM_RATE_44100 | SNDRV_PCM_RATE_48000;
ac97->build_ops = &patch_vt1616_ops; ac97->build_ops = &patch_vt1616_ops;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册