kern/98167: [sound] ES1370 mixer volumes incorrectly calculated
(patch included)
Joseph Terner
jtsn at gmx.de
Tue May 30 12:20:48 PDT 2006
>Number: 98167
>Category: kern
>Synopsis: [sound] ES1370 mixer volumes incorrectly calculated (patch included)
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Tue May 30 19:20:29 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator: Joseph Terner
>Release: FreeBSD 5.4-RELEASE
>Organization:
>Environment:
n/a
>Description:
The mixer on the ES1370 sound chip provides 5 significant bits for all channels except output gain. The current code in sys/dev/sound/pci/es137x.c uses only 4 of them. Therefore the lower half of the volume range is unavailable (0 represents maximum volume).
>How-To-Repeat:
Try to set low volumes using mixer(1) on an ES1370 sound card. With an unpatched driver there is an audible gap between mute and the lowest possible volume.
>Fix:
Patch for es137x.c,v 1.59 from 7-CURRENT:
--- sys/dev/sound/pci/es137x.c.orig Tue May 30 20:50:27 2006
+++ sys/dev/sound/pci/es137x.c Tue May 30 20:49:43 2006
@@ -311,7 +311,7 @@
if (mixtable[dev].left == 0xf) {
rl = (l < 2)? 0x80 : 7 - (l - 2) / 14;
} else {
- rl = (l < 10)? 0x80 : 15 - (l - 10) / 6;
+ rl = (l < 7)? 0x80 : 31 - (l - 7) / 3;
}
es = mix_getdevinfo(m);
ES_LOCK(es);
@@ -322,7 +322,7 @@
set_dac1 = 0;
}
if (mixtable[dev].stereo) {
- rr = (r < 10)? 0x80 : 15 - (r - 10) / 6;
+ rr = (r < 7)? 0x80 : 31 - (r - 7) / 3;
es1370_wrcodec(es, mixtable[dev].right, rr);
if (set_dac1 && mixtable[SOUND_MIXER_SYNTH].stereo)
es1370_wrcodec(es, mixtable[SOUND_MIXER_SYNTH].right, rr
);
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list