Comment 10 for bug 355300

Revision history for this message
Henrique de Moraes Holschuh (hmh) wrote :

The IBM-style ThinkPad volume control is a digital mixer to control the volume of the **built-in** speakers and headphones. Newer Lenovo models (past the T60 second generation) don't have it, instead, they have just a hardware MUTE engine.

It is impossible to deactivate the hardware mixer unless you resort to changes to the firmware (so, it is NOT going to happen).

The IBM-style volume control system is not designed (both from a hardware and a firmware point-of-view) to control anything else than the internal speakers and headphone volume. It does not control the dock's line-out (which doesn't go through the headphone/speakers volume controller (duh!), nor gets the PC speaker signal mixed in). And it doesn't control the main mixer.

It doesn't do any of those things in Windows, either. It never did. What it does have in Windows is a proper OSD system, so users would rapidly learn what the volume buttons are, and how to use them.

Anyway, as I said, the hardware mixer cannot be disabled. The firmware will always adjust the headphone/speaker volume when the volume buttons are pressed. These buttons are NOT generic volume control hotkeys, they are the more user-friendly version of a "volume knob" for the internal speakers and headphone output.

So, to be blunt: you don't have generic volume control keys on your ThinkPads, unless you:

1. Are using a Lenovo hardware-mixer-less ThinkPad that doesn't send events to thinkpad-acpi in the first place (but which also doesn't note that anywhere, so thinkpad-acpi doesn't even know it is running on a thinkpad that lacks the volume notifications). The Lenovo models issue normal keypresses through the KDC for volume up/down (I don't know about MUTE);

OR

2. You have modified the ACPI (and probably the EC) firmware to disable the hardware mixer.

And all the issues one has with volume control in ThinkPads old and new are directly caused by people who wanted so badly to break the ThinkPad volume control model, that they tried to force semantics that are just not applicable to these keys (they are NOT master volume control keys) and to the driver hotkey system (keypress events are NOT an OSD side-channel).

IMO, it is best to look at this in another way: you want to ADD generic volume control keys in your keyboard (because you never had those in the first place!), and you can do just that as long as you stay clear from the few knobs the firmware doesn't let you mess with freely (brightness, volume, thinklight, hibernate). It is not like there is a lack of unassigned _generic_ FN hotkeys in a more modern thinkpad (i.e. any *40 model or newer).

I suggest that fn+insert and fn+delete be mapped to KEY_VOLUME_UP and KEY_VOLUME_DOWN, and fn+pgdn be mapped to KEY_MUTE.

This is simple (it only takes three lines inside a HAL .fdi file), it works just fine (and it will _remain_ working just fine in the future, which is important), and it doesn't suffer from a number of border conditions and issues like more 'elaborate' attempts such as the one suggested by another post of this thread, do.

Of course, this requires unbroken support for KEY_VOLUME_UP, KEY_VOLUME_DOWN and KEY_MUTE in HAL when the events are coming from thinkpad-acpi's input device. I believe the crap (a "passive notification" modifier added to abuse input events for OSD) that could break these has been removed already, but you might want to double-check that.

As for OSD, please refer to lauchpad bug #357673.