summaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2006-10-31 15:24:45 +0100
committerJaroslav Kysela <perex@suse.cz>2006-11-28 13:46:34 +0100
commit80b8d5d6bc0000c6e499260883cfc95e645f49d1 (patch)
treeb3248f158a74179b039bc29455a35c5c0fe4fc1e /sound
parentac5d1a7d253f3c02d1e5c93edfa26e81466ec71e (diff)
downloadlinux-3.10-80b8d5d6bc0000c6e499260883cfc95e645f49d1.tar.gz
linux-3.10-80b8d5d6bc0000c6e499260883cfc95e645f49d1.tar.bz2
linux-3.10-80b8d5d6bc0000c6e499260883cfc95e645f49d1.zip
[ALSA] Enable stereo line input for TAS codec
Despite what the data sheet says in one place, to get stereo input from input A (line in), we have to clear the 'input B monaural' bit in the ACR. Signed-off-by: Paul Mackerras <paulus@samba.org> Signed-off-by: Takashi Iwai <tiwai@suse.de> Signed-off-by: Jaroslav Kysela <perex@suse.cz>
Diffstat (limited to 'sound')
-rw-r--r--sound/aoa/codecs/snd-aoa-codec-tas.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sound/aoa/codecs/snd-aoa-codec-tas.c b/sound/aoa/codecs/snd-aoa-codec-tas.c
index 2ef55a17917..9de8485ba3f 100644
--- a/sound/aoa/codecs/snd-aoa-codec-tas.c
+++ b/sound/aoa/codecs/snd-aoa-codec-tas.c
@@ -514,9 +514,15 @@ static int tas_snd_capture_source_put(struct snd_kcontrol *kcontrol,
mutex_lock(&tas->mtx);
oldacr = tas->acr;
- tas->acr &= ~TAS_ACR_INPUT_B;
+ /*
+ * Despite what the data sheet says in one place, the
+ * TAS_ACR_B_MONAUREAL bit forces mono output even when
+ * input A (line in) is selected.
+ */
+ tas->acr &= ~(TAS_ACR_INPUT_B | TAS_ACR_B_MONAUREAL);
if (ucontrol->value.enumerated.item[0])
- tas->acr |= TAS_ACR_INPUT_B;
+ tas->acr |= TAS_ACR_INPUT_B | TAS_ACR_B_MONAUREAL |
+ TAS_ACR_B_MON_SEL_RIGHT;
if (oldacr == tas->acr) {
mutex_unlock(&tas->mtx);
return 0;
@@ -686,8 +692,7 @@ static int tas_reset_init(struct tas *tas)
if (tas_write_reg(tas, TAS_REG_MCS, 1, &tmp))
goto outerr;
- tas->acr |= TAS_ACR_ANALOG_PDOWN | TAS_ACR_B_MONAUREAL |
- TAS_ACR_B_MON_SEL_RIGHT;
+ tas->acr |= TAS_ACR_ANALOG_PDOWN;
if (tas_write_reg(tas, TAS_REG_ACR, 1, &tas->acr))
goto outerr;