Hi,
there seem to be quite some buggy via8233-chipsets around (they are handled by
the via82xx-driver). I'd propse a workaround in the drivers.
Problem description:
The sound in most applications is so noisy that you can hardly hear the
music. This problem applies to all alsa versions I have tested (some have
noise on one channel only). The only distribution on which I got sound
working was SuSE 8.1 (with a 2.4.19-Kernel patched by them). However I have
not looked at what changes they made to the alsa code. The noise seems to be
played about every time the soundcard's buffer is refreshed (more exactly:
playing noise seems to be tied to the chip's interrupts (one snippet of white
noise or one click or whatever is played every time the interrupt handler is
called)). This is however just an impression and may be wrong.
Possible cause:
As far as I can tell, the 8233-chip (at least the one in my notebook) or some
other chip involved does not properly support sample-rates other than 48000.
While most sample rates do work, some don't (e.g. 44.1 kHz which most apps
try to use)
Some other people suggest things like forcing apps to use 48kHz (see e.g.
http://www.alsa-project.org/alsa-doc/doc-php/template.php3?company=VIA&card=&chip=via8235&module=via82xx)
too. This actually works and leaves the impression that the card should be
forced to 48k whenever possible.
Another theory suggests to look at the pcm buffer stuff (because noise seems
to be tied to hardware interrupts). Maybe the interrupt to change buffers is
triggered at the wrong moment. Have not investigated this and does not seem
too probable to me.
Suggestion:
The problem can be solved by forcing the chip to always play at 48 kHz. I'm
not familiar with the code so I do not know where the best place to change it
would be, One possibility, however, is to add the following line to
sound/pci/via82xx.c in method snd_via82xx_mixer_new around line 1485 (for the
alsa version shipped with linux kernel 2.5.69):
if (chip->chip_type != TYPE_VIA686) {
/* use slot 10/11 */
snd_ac97_update_bits(chip->ac97, AC97_EXTENDED_STATUS, 0x03 << 4, 0x03
<<4);
// BEGIN OF ADDED CODE
// clear the bit that allows sampling rates other than 48000
if (chip->chip_type != TYPE_VIA8233) {
snd_ac97_update_bits(chip->ac97, AC97_EXTENDED_STATUS,
AC97_EA_VRA , 0x00);
}
// END OF ADDED CODE
}
If there are objections or if most 8233-chips work correctly, this could be
#ifdef'ed with some kind of CONFIG_WORKAROUND_BUGGY8233 option or the like.
Although this code snippet does not add any regressions for me, it is clear
that it is just a workaround. I'd of course be happy if someone found a
"real" solution.
If there are any questions, I'll be happy to provide more information
Cheers,
Frank
---- appendix: output of lspci -nvv for the device in question
00:11.5 Class 0401: 1106:3059 (rev 30)
Subsystem: 14ff:0403
Control: I/O+ Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
Stepping- SERR- FastB2B-
Status: Cap+ 66Mhz- UDF- FastB2B- ParErr- DEVSEL=medium >TAbort-
<TAbort- <MAbort- >SERR- <PERR-
Interrupt: pin C routed to IRQ 5
Region 0: I/O ports at 1000 [size=256]
Capabilities: [c0] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA
PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
-------------------------------------------------------
This SF.Net email is sponsored by: INetU
Attention Web Developers & Consultants: Become An INetU Hosting Partner.
Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
_______________________________________________
Alsa-devel mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/alsa-devel