summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorariff <ariff@FreeBSD.org>2005-11-07 09:26:17 +0000
committerariff <ariff@FreeBSD.org>2005-11-07 09:26:17 +0000
commit98b0d14e14b1216aafbd1394ba8eac035afdc6c4 (patch)
tree882b13dd47a11fbdf8c87e1aa5188d66b34d11f4 /sys
parent34af0d937d74b22dc88520e2d713aaf2eafee287 (diff)
downloadFreeBSD-src-98b0d14e14b1216aafbd1394ba8eac035afdc6c4.zip
FreeBSD-src-98b0d14e14b1216aafbd1394ba8eac035afdc6c4.tar.gz
Fix recording device selection based on ALS4000 datasheet.
- http://www.alsa-project.org/alsa/ftp/manuals/avance_logic/ALS4000a.PDF Submitted by: Watanabe Kazuhiro <CQG00620@nifty.ne.jp>
Diffstat (limited to 'sys')
-rw-r--r--sys/dev/sound/pci/als4000.c31
1 files changed, 10 insertions, 21 deletions
diff --git a/sys/dev/sound/pci/als4000.c b/sys/dev/sound/pci/als4000.c
index 2df70dc..5201c19 100644
--- a/sys/dev/sound/pci/als4000.c
+++ b/sys/dev/sound/pci/als4000.c
@@ -591,33 +591,22 @@ static int
alsmix_setrecsrc(struct snd_mixer *m, u_int32_t src)
{
struct sc_info *sc = mix_getdevinfo(m);
- u_int32_t i, l, r, mask;
+ u_int32_t i, l, r;
for (i = l = r = 0; i < SOUND_MIXER_NRDEVICES; i++) {
if (src & (1 << i)) {
- l |= amt[i].iselect;
- r |= amt[i].iselect << 1;
+ if (amt[i].iselect == 1) { /* microphone */
+ l |= amt[i].iselect;
+ r |= amt[i].iselect;
+ } else {
+ l |= amt[i].iselect;
+ r |= amt[i].iselect >> 1;
+ }
}
}
- /* ALS mixer is really an SB16 mixer */
-
- mask = 0;
-
- if (src & SOUND_MASK_MIC)
- mask |= 0x01;
-
- if (src & SOUND_MASK_CD)
- mask |= 0x06;
-
- if (src & SOUND_MASK_LINE)
- mask |= 0x18;
-
- if (src & SOUND_MASK_SYNTH)
- mask |= 0x60;
-
- als_mix_wr(sc, SB16_IMASK_L, l|mask);
- als_mix_wr(sc, SB16_IMASK_R, r|mask);
+ als_mix_wr(sc, SB16_IMASK_L, l);
+ als_mix_wr(sc, SB16_IMASK_R, r);
return src;
}
OpenPOWER on IntegriCloud