diff options
author | ariff <ariff@FreeBSD.org> | 2005-11-07 09:26:17 +0000 |
---|---|---|
committer | ariff <ariff@FreeBSD.org> | 2005-11-07 09:26:17 +0000 |
commit | 98b0d14e14b1216aafbd1394ba8eac035afdc6c4 (patch) | |
tree | 882b13dd47a11fbdf8c87e1aa5188d66b34d11f4 /sys/dev | |
parent | 34af0d937d74b22dc88520e2d713aaf2eafee287 (diff) | |
download | FreeBSD-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/dev')
-rw-r--r-- | sys/dev/sound/pci/als4000.c | 31 |
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; } |