diff options
author | Henrique de Moraes Holschuh <hmh@hmh.eng.br> | 2009-09-20 13:09:25 -0400 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2009-09-20 13:48:13 -0400 |
commit | 0d922e3b84dc4923fc67901580a3c166006fba7a (patch) | |
tree | d7ee9009f4d423cee170fc41471922d1abcfe329 /Documentation | |
parent | 176dd98523fee4836210bc0834c8e3e6a93247bf (diff) |
thinkpad-acpi: hotkey event driver update
Update the HKEY event driver to:
1. Handle better the second-gen firmware, which has no HKEY mask
support but does report FN+F3, FN+F4 and FN+F12 without the need
for NVRAM polling.
a) always make the mask-related attributes available in sysfs;
b) use DMI quirks to detect the second-gen firmware;
c) properly report that FN+F3, FN+F4 and FN+F12 are enabled,
and available even on mask-less second-gen firmware;
2. Decouple the issuing of hotkey events towards userspace from
their reception from the firmware. ALSA mixer and brightness
event reporting support will need this feature.
3. Clean up the mess in the hotkey driver a great deal. It is
still very convoluted, and wants a full refactoring into a
proper event API interface, but that is not going to happen
today.
4. Fully reset firmware interface on resume (restore hotkey
mask and status).
5. Stop losing polled events for no good reason when changing the
mask and poll frequencies. We will still lose them when the
hotkey_source_mask is changed, as well as any that happened
between driver suspend and driver resume.
The hotkey subdriver now has the notion of user-space-visible hotkey
event mask, as well as of the set of "hotkey" events the driver needs
(because brightness/volume change reports are not just keypress
reports in most ThinkPad models).
With this rewrite, the ABI level is bumped to 0x020500 should
userspace need to know it is dealing with the updated hotkey
subdriver.
Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'Documentation')
-rw-r--r-- | Documentation/laptops/thinkpad-acpi.txt | 46 |
1 files changed, 26 insertions, 20 deletions
diff --git a/Documentation/laptops/thinkpad-acpi.txt b/Documentation/laptops/thinkpad-acpi.txt index f635fb09d62..aafcaa63419 100644 --- a/Documentation/laptops/thinkpad-acpi.txt +++ b/Documentation/laptops/thinkpad-acpi.txt | |||
@@ -199,18 +199,22 @@ kind to allow it (and it often doesn't!). | |||
199 | 199 | ||
200 | Not all bits in the mask can be modified. Not all bits that can be | 200 | Not all bits in the mask can be modified. Not all bits that can be |
201 | modified do anything. Not all hot keys can be individually controlled | 201 | modified do anything. Not all hot keys can be individually controlled |
202 | by the mask. Some models do not support the mask at all, and in those | 202 | by the mask. Some models do not support the mask at all. The behaviour |
203 | models, hot keys cannot be controlled individually. The behaviour of | 203 | of the mask is, therefore, highly dependent on the ThinkPad model. |
204 | the mask is, therefore, highly dependent on the ThinkPad model. | 204 | |
205 | The driver will filter out any unmasked hotkeys, so even if the firmware | ||
206 | doesn't allow disabling an specific hotkey, the driver will not report | ||
207 | events for unmasked hotkeys. | ||
205 | 208 | ||
206 | Note that unmasking some keys prevents their default behavior. For | 209 | Note that unmasking some keys prevents their default behavior. For |
207 | example, if Fn+F5 is unmasked, that key will no longer enable/disable | 210 | example, if Fn+F5 is unmasked, that key will no longer enable/disable |
208 | Bluetooth by itself. | 211 | Bluetooth by itself in firmware. |
209 | 212 | ||
210 | Note also that not all Fn key combinations are supported through ACPI. | 213 | Note also that not all Fn key combinations are supported through ACPI |
211 | For example, on the X40, the brightness, volume and "Access IBM" buttons | 214 | depending on the ThinkPad model and firmware version. On those |
212 | do not generate ACPI events even with this driver. They *can* be used | 215 | ThinkPads, it is still possible to support some extra hotkeys by |
213 | through the "ThinkPad Buttons" utility, see http://www.nongnu.org/tpb/ | 216 | polling the "CMOS NVRAM" at least 10 times per second. The driver |
217 | attempts to enables this functionality automatically when required. | ||
214 | 218 | ||
215 | procfs notes: | 219 | procfs notes: |
216 | 220 | ||
@@ -255,18 +259,11 @@ sysfs notes: | |||
255 | 1: does nothing | 259 | 1: does nothing |
256 | 260 | ||
257 | hotkey_mask: | 261 | hotkey_mask: |
258 | bit mask to enable driver-handling (and depending on | 262 | bit mask to enable reporting (and depending on |
259 | the firmware, ACPI event generation) for each hot key | 263 | the firmware, ACPI event generation) for each hot key |
260 | (see above). Returns the current status of the hot keys | 264 | (see above). Returns the current status of the hot keys |
261 | mask, and allows one to modify it. | 265 | mask, and allows one to modify it. |
262 | 266 | ||
263 | Note: when NVRAM polling is active, the firmware mask | ||
264 | will be different from the value returned by | ||
265 | hotkey_mask. The driver will retain enabled bits for | ||
266 | hotkeys that are under NVRAM polling even if the | ||
267 | firmware refuses them, and will not set these bits on | ||
268 | the firmware hot key mask. | ||
269 | |||
270 | hotkey_all_mask: | 267 | hotkey_all_mask: |
271 | bit mask that should enable event reporting for all | 268 | bit mask that should enable event reporting for all |
272 | supported hot keys, when echoed to hotkey_mask above. | 269 | supported hot keys, when echoed to hotkey_mask above. |
@@ -279,7 +276,8 @@ sysfs notes: | |||
279 | bit mask that should enable event reporting for all | 276 | bit mask that should enable event reporting for all |
280 | supported hot keys, except those which are always | 277 | supported hot keys, except those which are always |
281 | handled by the firmware anyway. Echo it to | 278 | handled by the firmware anyway. Echo it to |
282 | hotkey_mask above, to use. | 279 | hotkey_mask above, to use. This is the default mask |
280 | used by the driver. | ||
283 | 281 | ||
284 | hotkey_source_mask: | 282 | hotkey_source_mask: |
285 | bit mask that selects which hot keys will the driver | 283 | bit mask that selects which hot keys will the driver |
@@ -287,9 +285,10 @@ sysfs notes: | |||
287 | based on the capabilities reported by the ACPI firmware, | 285 | based on the capabilities reported by the ACPI firmware, |
288 | but it can be overridden at runtime. | 286 | but it can be overridden at runtime. |
289 | 287 | ||
290 | Hot keys whose bits are set in both hotkey_source_mask | 288 | Hot keys whose bits are set in hotkey_source_mask are |
291 | and also on hotkey_mask are polled for in NVRAM. Only a | 289 | polled for in NVRAM, and reported as hotkey events if |
292 | few hot keys are available through CMOS NVRAM polling. | 290 | enabled in hotkey_mask. Only a few hot keys are |
291 | available through CMOS NVRAM polling. | ||
293 | 292 | ||
294 | Warning: when in NVRAM mode, the volume up/down/mute | 293 | Warning: when in NVRAM mode, the volume up/down/mute |
295 | keys are synthesized according to changes in the mixer, | 294 | keys are synthesized according to changes in the mixer, |
@@ -621,6 +620,8 @@ For Lenovo models *with* ACPI backlight control: | |||
621 | 2. Do *NOT* load up ACPI video, enable the hotkeys in thinkpad-acpi, | 620 | 2. Do *NOT* load up ACPI video, enable the hotkeys in thinkpad-acpi, |
622 | and map them to KEY_BRIGHTNESS_UP and KEY_BRIGHTNESS_DOWN. Process | 621 | and map them to KEY_BRIGHTNESS_UP and KEY_BRIGHTNESS_DOWN. Process |
623 | these keys on userspace somehow (e.g. by calling xbacklight). | 622 | these keys on userspace somehow (e.g. by calling xbacklight). |
623 | The driver will do this automatically if it detects that ACPI video | ||
624 | has been disabled. | ||
624 | 625 | ||
625 | 626 | ||
626 | Bluetooth | 627 | Bluetooth |
@@ -1459,3 +1460,8 @@ Sysfs interface changelog: | |||
1459 | 0x020400: Marker for 16 LEDs support. Also, LEDs that are known | 1460 | 0x020400: Marker for 16 LEDs support. Also, LEDs that are known |
1460 | to not exist in a given model are not registered with | 1461 | to not exist in a given model are not registered with |
1461 | the LED sysfs class anymore. | 1462 | the LED sysfs class anymore. |
1463 | |||
1464 | 0x020500: Updated hotkey driver, hotkey_mask is always available | ||
1465 | and it is always able to disable hot keys. Very old | ||
1466 | thinkpads are properly supported. hotkey_bios_mask | ||
1467 | is deprecated and marked for removal. | ||