Sound on Thinkpad 600 under Slackware 12.0 (Crystal 4237B chip)
Trying to get the sound working on my Thinkpad 600. The sound chip is the Crystal 4237B, on the ISA bus. I have lots of information from users of previous versions of Slackware, as to all the settings needed. What I lack is a coherent plan to get all of the puzzle pieces in place in the proper order.
I would prefer to enable the sound as a module, loaded when the system goes multiuser, rather than automatically being enabled at bootup. If I'm not doing anything that requires sound, I'd rather just leave it. It looks to me as if the sound chip is being picked up by the BIOS, but it is not detected by ALSA, as the options are not correctly set up. What I would like to do in this thread is tap the knowledge of the masses, and distill a coherent narrative of the steps required to detect, configure, modularize, and use the sound card. What is frustrating me at the moment is what I have found to be consistent in the Linux world - the documentation for individual pieces is excellent, but there is a desperate lack of general, overall guidance. I'll post here the steps I've taken so far, and which tools I've used, and what results I've gotten. I will use only tools that are available in the native Slackware 12.0 distro. My goal is that a reader of the thread would be able to work their way through the examples and the tools and then go on to apply a similar strategy to find their own solutions to their own problems. What I've done so far: 1. Installed Slackware 12.0. (Dual boot with Windows 2000 pro) 2. Used the bash shell command man to learn the options to the uname command. "man uname" 3. Results of "uname -a" "Linux darkstar 2.6.21.5 #2 Tue Jun 19 15:22:48 CDT 2007 i686 Pentium II (Deschutes) GenuineIntel GNU/Linux (I suppose that I should also point out that I am using a virtual terminal from the XFCE desktop to copy and paste command line commands and results.) 4. Googled linux sound thinkpad 600, and found http://www.levien.com/tp600.html , among others. Lots of good information there, but out of date for the Slack12.0 setup. 5. Read the Slackware Linux Essentials book - several times. Read Scott Granneman's book 'Linux Phrasebook' to learn some basics (ISBN 0-672-32838-0). Used Ken Burch's 'Linux Shell Scripting With Bash' - (ISBN 0-672-32642-6) to fill in some of the details in rc.* scripts. 6. Tried alsaconf to configure soundcard. alsaconf searches and detects the sound card, but misidentifies it as a cs4232. We know that this is a CS4327B chip. The drivers that we should be using are the cs4236, which according to the notes in /usr/src/linux/Documentation/sound/alsa/ALSA-Configuration.txt covers the chip we are interested in. alsaconf then modifies /etc/modprobe.d/sound , and /etc/modprobe.conf . According to the notes in /etc/modprobe.conf, that file is deprecated, and so we won't try to use it. In /etc/modprobe.d/sound , we find alias snd-card-0 snd-cs4232 alias sound-slot-0 snd-cs4232 The alsa configurator finishes with a set of error messages which are pushed off screen by a message saying that everything is working fine. Thus: Loading driver... ALSA warning: No mixer settings found in /etc/asound.state. Sound may be muted. Use 'alsamixer' to unmute your sound card, and then 'alsactl store' to save the default ALSA mixer settings to be loaded at boot. Setting default volumes... amixer: Mixer attach default error: No such device Saving the mixer setup used for this in /etc/asound.state. /usr/sbin/alsactl: save_state:1253: No soundcards found... =============================================================================== Now ALSA is ready to use. For adjustment of volumes, use your favorite mixer. Have a lot of fun! But, alsamixer returns the error message - root@darkstar:/# alsamixer alsamixer: function snd_ctl_open failed for default: No such device tail -25 /var/adm/syslog shows us the following ... Dec 31 11:57:12 darkstar kernel: CS4236+ soundcard not found or device busy Dec 31 11:57:14 darkstar kernel: CS4236+ soundcard not found or device busy Which is curious. Where did syslog get the CS4236+ from? Perhaps the card is identified correctly, but alsaconfig displays it incorrectly? 7. Next we look at lspci: root@darkstar:/# lspci 00:00.0 Host bridge: Intel Corporation 440BX/ZX/DX - 82443BX/ZX/DX Host bridge (AGP disabled) (rev 02) 00:02.0 CardBus bridge: Texas Instruments PCI1250 (rev 02) 00:02.1 CardBus bridge: Texas Instruments PCI1250 (rev 02) 00:03.0 VGA compatible controller: Neomagic Corporation NM2160 [MagicGraph 128XD] (rev 01) 00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 01) 00:07.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01) 00:07.2 USB Controller: Intel Corporation 82371AB/EB/MB PIIX4 USB (rev 01) 00:07.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 01) lspci -v (verbose) ... 00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ISA (rev 01) Flags: bus master, medium devsel, latency 0 ... So the chip is there - and the PCI bus can see it. But, as it isn't properly configured, alsa can't use it. So where should we put the configuration information? On a good Slackware setup, we should be putting the configuration into the rc.d directory - but where? rc.alsa? , rc.M? , perhaps rc.local? , or maybe rc.modules-2.6.21.5 ? Reading all the notes in the various files suggests that /usr/src/linux/Documentation might be a good place to look for some guidance. In /usr/src/linux/Documentation/sound/alsa/ALSA-Configuration.txt we find many suggestions, among them to make the device with /dev/MAKEDEV or snddevices. (I can't find either.) Details on the CS4236 settings are in this file under Module snd-cs4236. At this point, I've burrowed down far enough that I've completely lost sight of where I started. Shall we try modprobe snd-cs4236 -C /etc/sound/configuration ? I'll put all the configuration info into /etc/sound/configuration, and we'll give it a whirl. Contents of /etc/sound/configuration - stolen from http://www.levien.com/tp600.html and modified per my best guesses based on usr/.../ALSA-Configuration.txt . alias char-major-116 snd alias snd-card-0 snd-card-cs4236 alias sound-slot-0 snd-card-0 alias sound-service-0-0 snd-mixer-oss alias sound-service-0-3 snd-pcm1-oss alias sound-service-0-12 snd-pcm1-oss options snd snd_major=116 snd_cards_limit=1 snd_device_gid=0 snd_device_uid=0 alias sound snd-card-cs4236 options snd-card-cs4236 snd_port=0x534 snd_cport=0x120 snd_mpu_port=0x300 snd_fm_port=0x388 snd_irq=5 snd_mpu_irq=9 snd_dma1=1 snd_dma2=0 root@darkstar:/# modprobe snd-cs4236 -C /etc/sound/configuration FATAL: Error inserting snd_cs4236 (/lib/modules/2.6.21.5/kernel/sound/isa/cs423x/snd-cs4236.ko): No such device root@darkstar:/# So now I'm out of ideas. Where to next? |
My suggestion would be to look in /etc/rc.d/rc.modules-2.6.21.5 and find these commented out lines:
Code:
# Crystal CS4232 based (PnP) cards: According to the link you cited you will probably need io=0x530 irq=5 dma=1 dma=2 on your Thinkpad 600. These options are discussed in /usr/src/linux/Documentation/sound/oss/CS4232. i.e Make the line read Quote:
Note: As this is an ISA device then it will not be listed by lspci. 'lsmod | grep snd' should show snd-cs4236. If it shows then run alsaconf. You may also need to clear out your changes to /etc/sound/configuration. alsaconf should handle setting this for you. |
Next steps
OK, sounds sensible.
I removed my /etc/sound/configuration file and edited /etc/rc.d/rc.modules-2.6.21.5 to uncomment the /sbin/....line. I changed it to /sbin/modprobe snd-cs4232 io=0x530 irq=5 dma=1 dma=2 and the resulting error messages at boot up look like ... eth0: no IPv6 routers present ACPI: Fatal opcode executed ACPI: Fatal opcode executed pnp: Device 00:07 activated. CS4232 WSS PnP manual resources are invalid, using auto config CS4232 WSS PnP configure failed for WSS (out of resources?) PnP BIOS detection failed for CS4232 pnp: Device 00:07 disabled. cs4232-pnpbios: probe of 00:07 failed with error -16 CS4232 soundcard not found or device busy ... so the next thing to try is to look up the syntax for options to modprobe to be sure that the syntax is correct, since the two sources use different syntax. |
Sorry, I just noticed my error in the line I gave you.
Try this: Quote:
|
Take one step back...
So, here's where I am today.
As the cs-4236 module did not seem to be present, I went to the ALSA website, and downloaded the latest versions of everything. I'm working on the compilation and installation now. Once that gets done, I'll be back to the original problem. I think the heart of the matter is that the sound card is not being picked up by the PNP. I may have to step all the way back to where the PNP system tries to configure the sound card before ALSA will be able to use it, but at least I'll have the latest and greatest ALSA drivers and utilities. I'll post the compilation steps after I get done. |
OK, got all new ALSA installed. Version 1.0.18, fresh from www.alsa-project.org. I downloaded and installed alsa-drivers, alsa-lib, and alsa-utils. Following the directions at http://www.alsa-project.org/main/ind...:Module-cs4236. Unzipped everything with tar -xjf alsa-whichever. (This was a new one for me. I hadn't realized that tar could handle the .bz2 files directly, but the -j option works quite nicely. This time it paid to read the manual.)
Once all the new ALSA was installed, I came up against the instructions on the ALSA website to not use the ./snddevices script if I'm using devfs. But how do I know whether or not I'm using devfs? I checked for man entries for devfs, and came up empty. Apparently Slackware 12.0 uses udev, so I went ahead and used the ./snddevices script. The /dev/dsp, /dev/midi, /dev/mixer, and /dev/sequencer files were added. The chmod a+rw command from the instructions took care of setting the permissions, so I'm making progress. The next step in the instructions is : modprobe snd-cs4236 , which returns : FATAL: Error inserting snd_cs4236 (/lib/modules/2.6.21.5/kernel/sound/isa/cs423x/snd-cs4236.ko): No such device the three other modules - snd-pcm-oss, snd-mixer-oss, and snd-seq-oss load without complaint,and they show up in lsmod: root@darkstar:/# lsmod Module Size Used by snd_cs4236_lib 13952 0 snd_rtctimer 2592 0 snd_seq_dummy 2692 0 snd_seq_oss 28032 0 snd_seq_midi_event 5888 1 snd_seq_oss snd_seq 42576 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event snd_pcm_oss 38432 0 snd_mixer_oss 13824 1 snd_pcm_oss ipv6 226016 12 capability 3336 0 commoncap 5376 1 capability snd_opl3_lib 8064 0 snd_hwdep 6532 1 snd_opl3_lib snd_cs4231_lib 19584 1 snd_cs4236_lib snd_pcm 65160 3 snd_cs4236_lib,snd_pcm_oss,snd_cs4231_lib snd_timer 17540 5 snd_rtctimer,snd_seq,snd_opl3_lib,snd_cs4231_lib,snd_pcm snd_page_alloc 7432 2 snd_cs4231_lib,snd_pcm snd_mpu401_uart 6272 0 snd_rawmidi 18080 1 snd_mpu401_uart snd_seq_device 6540 5 snd_seq_dummy,snd_seq_oss,snd_seq,snd_opl3_lib,snd_rawmidi snd 41956 13 snd_cs4236_lib,snd_seq_oss,snd_seq,snd_pcm_oss,snd_mixer_oss,snd_opl3_lib,snd_hwdep,snd_cs4231_lib,s nd_pcm,snd_timer,snd_mpu401_uart,snd_rawmidi,snd_seq_device soundcore 5728 1 snd agpgart 26928 0 lp 9800 0 parport_pc 23844 1 parport 30152 2 lp,parport_pc pcspkr 2304 0 psmouse 34440 0 pcmcia 30628 0 cdc_ether 4992 0 usbnet 13448 1 cdc_ether mii 4736 1 usbnet serio_raw 5124 0 ata_generic 5252 0 i2c_piix4 7436 0 yenta_socket 23180 2 rsrc_nonstatic 10880 1 yenta_socket pcmcia_core 32400 3 pcmcia,yenta_socket,rsrc_nonstatic evdev 7936 1 So at least now I have all fresh new ALSA ready to go. When I finally get PnP and ISA and ALSA and the CS4237B talking to eachother, maybe we'll get somewhere. The ALSA documentation is insistent that the isapnp utilities are not needed for ALSA, but I'm thinking that I need them just to figure out how to talk to this dang chip. |
Quote:
I suspect that this is due to the PnP not working successfully. Quote:
Also, is there a BIOS option to disable PnP detection, or to allow the OS to handle PnP detection? If I recall correctly, ALSA was compiled into the kernel in Slackware 12.0. I do not think that downloading and building the latest ALSA will have made any difference to your setup. |
Latest attempts:
Added noisapnp to the append line in my lilo.conf file. I'm already using this line to ask the kernel to not try addressing memory beyond what the processor can handle. " mem=163264 noisapnp ". Then I installed the new lilo by running /sbin/lilo . The IBM bios utilities do not allow the sort of fine grained control that would let me specify to skip the ISA PnP. But I did turn the quickboot option off. Bootup runs normally, alsaconf still finds the sound card and calls it a cs4232. ( I understand that this is because the 'family' of cards is named by the first instance of the card in the family. But still, an annoying quirk.) There are lines at bootup indicating that I do not have the parameters that I am passing to the module snd-cs4232 correct yet : Jan 4 16:45:32 darkstar kernel: piix4_smbus 0000:00:07.3: IBM system detected; this module may corrupt your serial eeprom! Refusing to load module! Jan 4 16:45:32 darkstar kernel: piix4_smbus: probe of 0000:00:07.3 failed with error -1 Jan 4 16:45:32 darkstar kernel: snd_cs4232: Unknown parameter `dma' Jan 4 16:45:59 darkstar sshd[2923]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use. Jan 4 16:46:12 darkstar kernel: CS4232 WSS PnP manual resources are invalid, using auto config Jan 4 16:46:12 darkstar kernel: CS4232 WSS PnP configure failed for WSS (out of resources?) Jan 4 16:46:12 darkstar kernel: PnP BIOS detection failed for CS4232 Jan 4 16:46:12 darkstar kernel: cs4232-pnpbios: probe of 00:07 failed with error -16 Jan 4 16:46:12 darkstar kernel: CS4232 soundcard not found or device busy Jan 4 16:47:57 darkstar kernel: CS4232 WSS PnP manual resources are invalid, using auto config Jan 4 16:47:57 darkstar kernel: CS4232 WSS PnP configure failed for WSS (out of resources?) Jan 4 16:47:57 darkstar kernel: PnP BIOS detection failed for CS4232 Jan 4 16:47:57 darkstar kernel: cs4232-pnpbios: probe of 00:07 failed with error -16 Jan 4 16:47:57 darkstar kernel: CS4232 soundcard not found or device busy root@darkstar:/# At this point, my reflex is try modprobe snd-cs4232 with different combinations of port and irq arguments in hopes of finding one that works. But this idea fails on two counts: First, trying modprobe snd-cs4232 with or without arguments simply returns : root@darkstar:/# modprobe snd-cs4232 FATAL: Error inserting snd_cs4232 (/lib/modules/2.6.21.5/kernel/sound/isa/cs423x/snd-cs4232.ko): No such device root@darkstar:/# modprobe snd-cs4232 port=0x530 FATAL: Error inserting snd_cs4232 (/lib/modules/2.6.21.5/kernel/sound/isa/cs423x/snd-cs4232.ko): No such device root@darkstar:/# modprobe snd-cs4232 port=0x534 FATAL: Error inserting snd_cs4232 (/lib/modules/2.6.21.5/kernel/sound/isa/cs423x/snd-cs4232.ko): No such device Second, part of the whole point was to learn some more sophisticated tools than the brute force thrashing in the dark method. (I'm getting tired of that method.) What should I be looking for in proc/sys or /dev/??? ? Seems to me that somewhere, I should be able to find these details out. |
Quote:
Quote:
|
News from proc/
I've done lots of reading in man proc and man sys, and here are the interesting bits I found:
root@darkstar:/proc/asound/oss# cat sndstat Sound Driver:3.8.1a-980706 (ALSA v1.0.14rc3 emulation code) Kernel: Linux darkstar 2.6.21.5 #2 Tue Jun 19 15:22:48 CDT 2007 i686 Config options: 0 Installed drivers: Type 10: ALSA emulation Card config: --- no soundcards --- Audio devices: NOT ENABLED IN CONFIG Synth devices: NOT ENABLED IN CONFIG Midi devices: NOT ENABLED IN CONFIG Timers: 7: system timer Mixers: NOT ENABLED IN CONFIG root@darkstar:/proc/asound/oss# This information is from oss, but there are two points I'm curious about. The line Config options: 0 makes me think that I could be passing options to oss at boot up that would be helpful ( after the card is detected). Also, the NOT ENABLED IN CONFIG makes me wonder where I should be looking to make changes to enable in CONFIG. Does this refer to oss configuration or some higher level kernel configuration? Here's the rest of what is in proc : root@darkstar:/proc/asound# ls cards devices hwdep modules oss/ pcm seq/ timers version root@darkstar:/proc/asound# cat cards --- no soundcards --- root@darkstar:/proc/asound# cat devices 1: : sequencer 33: : timer root@darkstar:/proc/asound# cat hwdep root@darkstar:/proc/asound# cat modules root@darkstar:/proc/asound# cat pcm root@darkstar:/proc/asound# cat timers G0: system timer : 4000.000us (10000000 ticks) root@darkstar:/proc/asound# cat version Advanced Linux Sound Architecture Driver Version 1.0.14rc3 (Wed Mar 14 07:25:50 2007 UTC). root@darkstar:/proc/asound# Makes sense, as the card is not being detected or enabled - therefore alsa and oss can't do any configuring. Thanks. |
I have googled this and found some other information.
http://www.murga-linux.com/puppy/viewtopic.php?p=248431 http://www.wlug.org.nz/ThinkpadNotes Have you tried booting with the Fast Boot option turned off in the BIOS? Also, try booting with the pnpbios=off acpi=off kernel options. It may also be worth trying this line in /etc/rc.d/rc.modules Quote:
|
I remember having issues with sound when I installed ubuntu on an old TP 600E. IIRC udev at that time incorrectly identified the sound chip and loaded the wrong module. It was necessary to blacklist that module and install another from /etc/modprobe.d as well as using several alias statements. I don't remember the details but I do know that I found the answer at http://thinkwiki.org
That site has all kinds of info about thinkpad quirks and linux. You may find your answers there. Good luck! |
Success - Thank You Thank You
I did turn the Fast Boot option off in the BIOS - F1 at bootup, and then under the configuration options.
I added the pnpbios=off acpi=off switches to etc/lilo.conf , and put the #Crystal CS4232 based (PnP) cards: /sbin/modprobe snd-cs4232 isapnp=0 port=0x0530 cport=0x538 fm_port=0x388 sb_port =0x220 irq=5 dma1=1 dma2=0 line and options into etc/rc.d/rc.modules-2.6.21.5 . I was thrilled to see boot up without error messages, and when I typed alsamixer at the command line, the mixer obediently popped up and allowed me to unmute the sound. I plan to try different options, particularly invoking the newer cs-4236 module, and different boot options to try to determine which ones are absolutely necessary. I'll report back after I've had a chance to do some more experimenting. But for now, I'm just thrilled to be listening to Black Sabbath on my antique laptop. Thanks to everyone for their help. Can't tell you how much I appreciate it. |
I am very pleased that you have it working. I was worried that you would give up on this. Congratulations on your persistence that has lead to a good result.
|
I updated /etc/rc.d/rc.modules-2.6.21.5 to include cs-4236 instead of cs-4232. Works well so far. Initially alsa complained - but that was due to the lack of proper values in the alsa configuration. Without isapnp=off and acpi=off in the boot options, the sound card is not recognized, probably because resources are being allocated away from where the sound card is looking for them. Used alsamixer to set the levels; with the cs-4236 module, I can set many more levels on the sound hardware. Not that I need to play with everything just to listen to CDs, but it gives me a happy feeling to know I'm using the correct module for this sound card. Many thanks to the people who wrote it and made it available.
Next I'll post a condensed version of what steps are really needed to get the sound fired up, without all the complexity of my mis-steps. |
All times are GMT -5. The time now is 03:19 AM. |