diff options
author | Ariff Abdullah <ariff@FreeBSD.org> | 2005-11-07 09:26:17 +0000 |
---|---|---|
committer | Ariff Abdullah <ariff@FreeBSD.org> | 2005-11-07 09:26:17 +0000 |
commit | beb1654e706766245166b860930f020b2dab57e4 (patch) | |
tree | 882b13dd47a11fbdf8c87e1aa5188d66b34d11f4 /sys | |
parent | 238c5dc5c3c388a9eb438b5dbd8b3e28dbeb20c5 (diff) | |
download | src-beb1654e706766245166b860930f020b2dab57e4.tar.gz src-beb1654e706766245166b860930f020b2dab57e4.zip |
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>
Notes
Notes:
svn path=/head/; revision=152151
Diffstat (limited to 'sys')
-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 2df70dc2d296..5201c19b14ef 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; } |