Fixing Sound/Suspend-Resume on IBM T23 for Gentoo
ALSA does work, as I mentioned here, but it seems to have problems across a suspend-resume, i.e. it doesn’t work post-resume.
Previously used patches don’t seem to apply to newer Alsa modules.
Gentoo installs apmd_proxy in /etc/apm, with suspend.d and resume.d directories for handling special suspend/resume operations. Even better, event.d handles both.. 
So, based on some searching around, I ended up adding apmd to the list of services to start (rc-update add apmd default), and added the following script to get alsa to behave on resume:
bq. /etc/apm/event.d/alsa:
#!/bin/sh
<br />
case "$1" in
resume)
/usr/sbin/alsactl power off
/usr/sbin/alsactl power on
;;
suspend|standby)
;;
esac
Found this lovely snippet that answers why apm -s works better than Fn-F4 [emphasis added]:
The APM BIOS rejects suspend (or hibernate) requests under certain conditions: e.g., on my TP600, when my Xircom Ethernet/modem card is inserted and the machine is on AC power. If I do “apm -
suspend” then the kernel apm driver hears about the request first and tells apmd which runs apmd_proxy which runs the scripts in /etc/apm/event.d which do things like eject the PCMCIA cards; only then does the apm driver pass the request on to the BIOS. (I think.) If I do “tpctl—suspend” on the other hand, the BIOS hears about the request first and, if the PCMCIA card is still inserted, it rejects the request with a couple of beeps (high—low). “apm—suspend” is therefore to be preferred to “tpctl—suspend”. Unfortunately there is no alternative to “tpctl—hibernate” : the apm program and the kernel apm driver don’t know how to ask for hibernation. Solution: write a little script that does “cardctl eject ; tpctl—hib”. Fn-F4 does the same as “tpctl—suspend” and Fn-F12 does the same as “tpctl—hibernate”.
The mention of the BIOS rejecting the suspend request when a PCMCIA card is inserted is exactly what I was seeing – I’m using my wireless card right now.
So after all that, I learned that I should suspend using apm -s and not with the thinkpad buttons if I have a pcmcia card active. With no PCMCIA card, the suspend request will be handled correctly by APM and apmd, and everything should be happy.
References:
Various records of Linux Installation attempts:
- How to set up an IBM Thinkpad T30 Debian GNU/Linux
- Debian GNU/Linux on an IBM Thinkpad T23
- Linux on A30p – Sound
- SuSE Linux 8.0 on IBM T30 Thinkpad
- Re: ThinkPad 600, kernel 2.2.17pre6, and hibernation
- [ltp] APMD and Standby on the TP-T21
- artsshell permissions
Older Alsa drivers:
Information for Linux on IBM Laptops
APM / Other tools
Everywhere I looked, things would reference debian’s /etc/apm/event.d/alsa script. Thing is, I don’t run debian, and I’ll be damned if I could find the contents of the script anywhere…
For future reference, I’ve attached the source here.



