Thinkpad X61: volume very low

November 4th, 2008

My little Thinkpad X61 is working very well, except for a strange bug: even though everything in alsamixer and Gnome’s Volume Applet is maxed out, still the volume is way too low. Every time I watch a video on Youtube I have to plug in the headphones. Yesterday I investigated the problem.

First, let’s see what kind of sound hardware do we have:

lspci -v
00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 03)
Subsystem: Lenovo ThinkPad T61
Flags: bus master, fast devsel, latency 0, IRQ 17
Memory at fe220000 (64-bit, non-prefetchable) [size=16K]
Capabilities: [50] Power Management version 2
Capabilities: [60] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
Capabilities: [70] Express Root Complex Integrated Endpoint, MSI 00
Capabilities: [100] Virtual Channel
Capabilities: [130] Root Complex Link
Kernel driver in use: HDA Intel
Kernel modules: snd-hda-intel

Ok, that tells us it’s an ‘Intel Corporation 82801H’ managed with the ‘snd-hda-intel’ driver. Additionally, running alsamixer tells us it’s a AD1984 chip made by Analog Devices.

Next, let’s get to know something more about the parameters we can send to the driver:

utumno:/home/leszek# modinfo snd-hda-intel | grep parm
parm: power_save:Automatic power-saving timeout (in second, 0 = disable). (int)
parm: index:Index value for Intel HD audio interface. (array of int)
parm: id:ID string for Intel HD audio interface. (array of charp)
parm: enable:Enable Intel HD audio interface. (array of bool)
parm: model:Use the given board model. (array of charp)
parm: position_fix:Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size). (array of int)
parm: probe_mask:Bitmask to probe codecs (default = -1). (array of int)
parm: single_cmd:Use single command to communicate with codecs (for debugging only). (bool)
parm: enable_msi:Enable Message Signaled Interrupt (MSI) (int)
parm: power_save_controller:Reset controller in power save mode. (bool)

Hmm, I start suspectiong that maybe setting the ‘model’ , ‘position_fix’ or – who knows – ‘enable_msi’ parameters to something magic would help here? But what shall we set those parameters to?

Let’s read the documentation: take a look at /usr/src/`uname -r`/Documentation/sound/alsa/ALSA-Configuration.txt. All the parameters of snd-hda-intel are described in great detail, and grepping for ‘AD1984’ ( our chip name ) we find out that they even have a special setting for Lenovo Thinkpad X61! Turns out we have to set ‘model’ to ‘thinkpad’.

Let’s try. Edit /etc/modprobe.d/alsa-base and append

options snd-hda-intel model=thinkpad

to it. Now forcefully rmmod the driver and modprobe it back ( or just reboot ). Voilla! The sound is now much louder. Why wasn’t that set by default?

Comments are closed.