alsa sound breaks with suspend
Hi,
I wonder if anyone has any ideas about this minor annoyance:
System: Thinkpad X31 with Intel sound:
0000:00:1f.6 Modem: Intel Corp. 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M)
AC'97 Modem Controller (rev 01)
2.6.8.1 from kernel.org, alsa drivers built as modules:
CONFIG_SND=m
CONFIG_SND_TIMER=m
CONFIG_SND_PCM=m
CONFIG_SND_RAWMIDI=m
CONFIG_SND_SEQUENCER=m
CONFIG_SND_OSSEMUL=y
CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_SEQUENCER_OSS=y
CONFIG_SND_MPU401_UART=m
CONFIG_SND_AC97_CODEC=m
CONFIG_SND_INTEL8X0=m
Using APM, no ACPI:
# Power management options (ACPI, APM)
# APM (Advanced Power Management) BIOS Support
CONFIG_APM=y
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
# CONFIG_APM_DO_ENABLE is not set
# CONFIG_APM_CPU_IDLE is not set
# CONFIG_APM_DISPLAY_BLANK is not set
# CONFIG_APM_RTC_IS_GMT is not set
CONFIG_APM_ALLOW_INTS=y
# CONFIG_APM_REAL_MODE_POWER_OFF is not set
Note: The behavior described below is the same whether ALLOW_INTS is on
or off.
With 2.6.7 I could suspend and resume and the alsa drivers would stay
functional. As of 2.6.8.1, on resume the Master and PCM controls resume
at 0% volume and muted. I can get around that for now with an apm script:
#!/bin/sh
AMIXER=/usr/bin/amixer
[ -x "${AMIXER}" ] || exit 0
case "${1},${2}" in
(resume,suspend)
${AMIXER} # kick the sound drivers
/bin/sleep 1
/usr/bin/logger before
${AMIXER} set Master,0 80%,80% unmute
${AMIXER} set PCM,0 80%,80% unmute
/usr/bin/logger after
;;
esac
exit 0
Note that without the first amixer call to "kick" the sound drivers, the
"before" log would happen before the drivers seem to "wake up":
Aug 21 15:57:00 0x19 kernel: intel8x0_measure_ac97_clock: measured 49493
usecs
Aug 21 15:57:00 0x19 kernel: intel8x0: clocking to 48000
With the extra kick everything works. I was wondering if anyone has any
idea on how this can be fixed more cleanly. A quick look with modinfo
didn't show any obvious parameters that may affect [A]PM behavior.
D.
Reply to: