CS4239

From ThinkWiki
Jump to: navigation, search

CS4239

This is a Cirrus Logic Audio controller

Note: This sound adapter is paired with a PCI CS4610 audio controller.

Features

  • Chipset: CS4239
  • Interface: ISA 16bit


Linux ALSA driver

This sound chip is supported by the snd-cs4236 kernel module. Use the following options line when loading this module:

options snd-cs4236 index=0 port=0x530 cport=0x538 isapnp=0 dma1=1 dma2=0 irq=5

One 600E running Debian Etch with vanilla 2.6.28 kernel failed to produce sound with snd-cs4236, but the sound works with driver snd-cs4232 loaded. Instructions for Ubuntu suggest to blacklist this driver which in this case was wrong. With standard Debian etch and etchnhalf kernels the snd-cs4236 did not work and snd-cs4232 got stuck on device initialisation or crashed the kernel. Working set of ALSA modules for this 600E on 2.6.28 is:

# lsmod | grep snd    
snd_cs4232             11764  1 
snd_opl3_lib            8928  1 snd_cs4232
snd_hwdep               6084  1 snd_opl3_lib
snd_wss_lib            22400  1 snd_cs4232
snd_pcm                60072  2 snd_wss_lib
snd_timer              16708  3 snd_opl3_lib,snd_wss_lib,snd_pcm
snd_page_alloc          8008  2 snd_wss_lib,snd_pcm
snd_mpu401_uart         5824  1 snd_cs4232
snd_rawmidi            17728  1 snd_mpu401_uart
snd_seq_device          6284  2 snd_opl3_lib,snd_rawmidi
snd                    44580  10 snd_cs4232,snd_opl3_lib,snd_hwdep,snd_wss_lib,snd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,snd_seq_device
soundcore               6016  1 snd

Vanilla Linux ALSA driver >linux-2.6.26

linux-2.6.26.8 was the last release which contained the snd_cs4232 module which worked smooth on the 770/770x laptops e.g.

modprobe snd-cs4232 enable=1 isapnp=0 port=0x530 cport=0x538 fm_port=388 sb_port=0x220 irq=5 dma1=1 dma2=0

After linux-2.6.26 support for the 770 sound chip moved into the snd-cs4236 driver. Using this driver as a module caused frequent Oops, e.g. when trying to unload the module or using APM suspend. As a workaround I build the driver into the kernel:

CONFIG_SND_CS4236=y

and provide the configuration via kernel command line e.g. in lilo.conf:

append="snd-cs4236.isapnp=0 snd-cs4236.enable=1 snd-cs4236.port=0x530 snd-cs4236.cport=0x538 snd-cs4236.fmport=0x388 snd-cs4236.sb_port=0x220 snd-cs4236.irq=5 snd-cs4236.dma1=1 snd-cs4236.dma2=0"

This works at least, but still fills logfiles with warnings from kernel/time/timekeeping.c on APM suspend. Tested with debian stable + vanilla linux-2.6.32.7 on a 770x (9549-7BO).

CS4236 vs. CS4232

On at least one 600E, with kernels up to 2.6.24.x and ALSA versions up to 1.0.17 (compiled and installed out-of-kernel), one of the working setups was:

options snd-cs4236 port=0x530 cport=0x538 isapnp=0 dma1=1 dma2=2 irq=5

Curiously, these parameters appeared to change with each kernel update and would seemingly at random be either correctly detected by alsaconfig or need to be manually tweaked until some lucky combination was found.

Luckily, on this same 600E, with kernels starting at 2.6.27.x, the in-kernel ALSA driver CS4232 'just works' without passing any special parameters.

PnP issues

This chip is software configurable. In Thinkpads, the BIOS sets up the chip if fast boot is disabled. If fast boot is enabled, the chip is disabled until a PnP driver enables it. As both the OSS and the ALSA module do not support PnP discovering of this chip in a ThinkPad, a configuration script like this one may be used. See also this page for more information.

Mixer

I loaded the cs4242 module and on my Gnome Desktop (Ubuntu) and the sound work, but was too low when I play music and with the mixer of Gnome was not possible to modify the volume. I fixed the problem installing the mixer of KDE (kmix) and I use PCM to modify the volume.

ThinkPads this chip may be found in