snd_envy24ht regression in 8.0 (patch included)

Carl Johan Gustavsson carl.gustavsson at bahnhofbredband.se
Sat Dec 5 00:24:50 UTC 2009


Yamagi Burmeister wrote:
> Hello,
> I've got a Audiotrak Prodigy HD2 soundcard, based upon the VIA
> Envy24HT-s chipset. Dmesg output is:
>
> pcm1: <Envy24HT audio (AudioTrak Prodigy HD2)> port
> 0x3080-0x309f,0x3000-0x307f irq 28 at device 4.0 on pci18
> pcm1: [GIANT-LOCKED]
> pcm1: [ITHREAD]
> pcm1: system configuration
>   SubVendorID: 0x3137, SubDeviceID: 0x4154
>   XIN2 Clock Source: 49.152MHz(192kHz*256)
>   MPU-401 UART(s) #: 1
>   ADC #: 1 and SPDIF receiver connected
>   DAC #: 1
>   Multi-track converter type: I2S(192KHz support, 24bit resolution,
>   ID#0x0)
>   S/PDIF(IN/OUT): 1/1 ID# 0x00
>   GPIO(mask/dir/state): 0xfff8ff/0xdfffff/0x200700
>
> /dev/sndstat shows:
>
> root at screw:pts/8 ~> cat /dev/sndstat
> FreeBSD Audio Driver (newpcm: 64bit 2009061500/amd64)
> Installed devices:
> pcm0: <nVidia nForce4> at io 0x1800, 0x1400 irq 22 bufsz 16384 kld
> snd_ich [MPSAFE] (1p:1v/1r:1v channels duplex)
> pcm1: <Envy24HT audio (AudioTrak Prodigy HD2)> at io
> 0x3080:32,0x3000:128 irq 28 [GIANT] (1p:1v/5r:1v channels duplex
> default)
>
> In FreeBSD 7.2 it worked just like a charm but after upgrading to 8.0
> the left stereo channel is only half as loud as the right one. It can be
> reproduced with either speakers and headphones. I tracked it down to a
> change in revision 188480 of spicds.c, the change "fix: stupid bug with
> volume control for AK4396" breaks volume control for me. The attached
> patch fixes the problem by reverting the specific change but I guess
> it'll break some other cards again.
>
> An other possible work around is to double the volume of the left
> channel via the mixer.
>
> Ciao,
> Yamagi
>

Hi,

That patch was partly correct but it did only fix the problem on the right
channel, the left one exhibits a similar error. Logical operators in case
labels does not work well in C, or at least not as the original writer 
expected :)

Please revert your changes and try the attached patch.

-cjg

-------------- next part --------------
Index: spicds.c
===================================================================
--- spicds.c	(revision 200112)
+++ spicds.c	(working copy)
@@ -283,7 +283,8 @@
 		case SPICDS_TYPE_WM8770:
 			left = left + 27;
 			break;
-		case SPICDS_TYPE_AK4381 || SPICDS_TYPE_AK4396:
+		case SPICDS_TYPE_AK4381:
+		case SPICDS_TYPE_AK4396:
 			left = left * 255 / 100;
 			break;
 		default:


More information about the freebsd-multimedia mailing list