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:
/etc/apm/event.d/alsa:
#!/bin/sh 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
Unfortunately, there is no alternative toapm —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 dotpctl —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 totpctl —suspend
.tpctl —hibernate
: the apm program and the kernel apm driver don't know how to ask for hibernation. Solution: write a little script that doescardctl eject ; tpctl —hib
.Fn-F4
does the same astpctl —suspend
andFn-F12
does the same astpctl —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
- 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.