diff --git a/sys/dev/sound/isa/sb16.c b/sys/dev/sound/isa/sb16.c index 94e5f912bad9..f8d09feb620d 100644 --- a/sys/dev/sound/isa/sb16.c +++ b/sys/dev/sound/isa/sb16.c @@ -299,6 +299,7 @@ static const struct sb16_mixent sb16_mixtab[32] = { [SOUND_MIXER_OGAIN] = { 0x41, 2, 6, 1 }, [SOUND_MIXER_TREBLE] = { 0x44, 4, 4, 1 }, [SOUND_MIXER_BASS] = { 0x46, 4, 4, 1 }, + [SOUND_MIXER_LINE1] = { 0x52, 5, 3, 1 } }; static int @@ -308,11 +309,11 @@ sb16mix_init(struct snd_mixer *m) mix_setdevs(m, SOUND_MASK_SYNTH | SOUND_MASK_PCM | SOUND_MASK_SPEAKER | SOUND_MASK_LINE | SOUND_MASK_MIC | SOUND_MASK_CD | - SOUND_MASK_IGAIN | SOUND_MASK_OGAIN | + SOUND_MASK_IGAIN | SOUND_MASK_OGAIN | SOUND_MASK_LINE1 | SOUND_MASK_VOLUME | SOUND_MASK_BASS | SOUND_MASK_TREBLE); mix_setrecdevs(m, SOUND_MASK_SYNTH | SOUND_MASK_LINE | - SOUND_MASK_MIC | SOUND_MASK_CD); + SOUND_MASK_LINE1 | SOUND_MASK_MIC | SOUND_MASK_CD); sb_setmixer(sb, 0x3c, 0x1f); /* make all output active */ @@ -369,6 +370,12 @@ sb16mix_setrecsrc(struct snd_mixer *m, u_int32_t src) sb_setmixer(sb, SB16_IMASK_L, recdev); sb_setmixer(sb, SB16_IMASK_R, recdev); + /* Switch on/off FM tuner source */ + if (src & SOUND_MASK_LINE1) + sb_setmixer(sb, 0x4a, 0x0c); + else + sb_setmixer(sb, 0x4a, 0x00); + /* * since the same volume controls apply to the input and * output sections, the best approach to have a consistent