blob: f6e6bc66eed34dab26148f6043ae6b4347c64476 [file] [log] [blame]
Henrique de Moraes Holschuh643f12d2007-03-29 01:58:43 -03001 ThinkPad ACPI Extras Driver
Linus Torvalds1da177e2005-04-16 15:20:36 -07002
Henrique de Moraes Holschuhaa2fbce2009-01-11 03:01:10 -02003 Version 0.22
4 November 23rd, 2008
Linus Torvalds1da177e2005-04-16 15:20:36 -07005
6 Borislav Deianov <borislav@users.sf.net>
Henrique de Moraes Holschuhc78d5c92007-07-18 23:45:47 -03007 Henrique de Moraes Holschuh <hmh@hmh.eng.br>
8 http://ibm-acpi.sf.net/
Linus Torvalds1da177e2005-04-16 15:20:36 -07009
10
Henrique de Moraes Holschuh643f12d2007-03-29 01:58:43 -030011This is a Linux driver for the IBM and Lenovo ThinkPad laptops. It
12supports various features of these laptops which are accessible
13through the ACPI and ACPI EC framework, but not otherwise fully
14supported by the generic Linux ACPI drivers.
15
16This driver used to be named ibm-acpi until kernel 2.6.21 and release
170.13-20070314. It used to be in the drivers/acpi tree, but it was
18moved to the drivers/misc tree and renamed to thinkpad-acpi for kernel
Henrique de Moraes Holschuh9abf0ee2009-01-11 03:00:58 -0200192.6.22, and release 0.14. It was moved to drivers/platform/x86 for
Henrique de Moraes Holschuhaa2fbce2009-01-11 03:01:10 -020020kernel 2.6.29 and release 0.22.
Linus Torvalds1da177e2005-04-16 15:20:36 -070021
Henrique de Moraes Holschuh95e57ab2008-04-26 01:02:22 -030022The driver is named "thinkpad-acpi". In some places, like module
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +000023names and log messages, "thinkpad_acpi" is used because of userspace
24issues.
Henrique de Moraes Holschuh95e57ab2008-04-26 01:02:22 -030025
26"tpacpi" is used as a shorthand where "thinkpad-acpi" would be too
27long due to length limitations on some Linux kernel versions.
Linus Torvalds1da177e2005-04-16 15:20:36 -070028
29Status
30------
31
32The features currently supported are the following (see below for
33detailed description):
34
35 - Fn key combinations
36 - Bluetooth enable and disable
Henrique de Moraes Holschuh837ca6d2007-03-23 17:33:54 -030037 - video output switching, expansion control
Linus Torvalds1da177e2005-04-16 15:20:36 -070038 - ThinkLight on and off
39 - limited docking and undocking
40 - UltraBay eject
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +000041 - CMOS/UCMS control
Borislav Deianov78f81cc2005-08-17 00:00:00 -040042 - LED control
43 - ACPI sounds
44 - temperature sensors
45 - Experimental: embedded controller register dump
Stefan Schmidt24f7ff02006-09-22 12:19:15 +020046 - LCD brightness control
47 - Volume control
Henrique de Moraes Holschuhecf2a802007-04-27 22:00:09 -030048 - Fan control and monitoring: fan speed, fan enable/disable
Jeremy Fitzhardinge9662e082008-08-27 21:04:49 -070049 - WAN enable and disable
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +000050 - UWB enable and disable
Linus Torvalds1da177e2005-04-16 15:20:36 -070051
52A compatibility table by model and feature is maintained on the web
53site, http://ibm-acpi.sf.net/. I appreciate any success or failure
54reports, especially if they add to or correct the compatibility table.
55Please include the following information in your report:
56
57 - ThinkPad model name
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +000058 - a copy of your ACPI tables, using the "acpidump" utility
Henrique de Moraes Holschuh643f12d2007-03-29 01:58:43 -030059 - a copy of the output of dmidecode, with serial numbers
60 and UUIDs masked off
Linus Torvalds1da177e2005-04-16 15:20:36 -070061 - which driver features work and which don't
62 - the observed behavior of non-working features
63
64Any other comments or patches are also more than welcome.
65
66
67Installation
68------------
69
70If you are compiling this driver as included in the Linux kernel
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +000071sources, look for the CONFIG_THINKPAD_ACPI Kconfig option.
72It is located on the menu path: "Device Drivers" -> "X86 Platform
73Specific Device Drivers" -> "ThinkPad ACPI Laptop Extras".
74
Linus Torvalds1da177e2005-04-16 15:20:36 -070075
76Features
77--------
78
Henrique de Moraes Holschuh54ae1502007-04-24 11:48:12 -030079The driver exports two different interfaces to userspace, which can be
80used to access the features it provides. One is a legacy procfs-based
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +000081interface, which will be removed at some time in the future. The other
82is a new sysfs-based interface which is not complete yet.
Henrique de Moraes Holschuh54ae1502007-04-24 11:48:12 -030083
84The procfs interface creates the /proc/acpi/ibm directory. There is a
85file under that directory for each feature it supports. The procfs
86interface is mostly frozen, and will change very little if at all: it
87will not be extended to add any new functionality in the driver, instead
88all new functionality will be implemented on the sysfs interface.
89
90The sysfs interface tries to blend in the generic Linux sysfs subsystems
91and classes as much as possible. Since some of these subsystems are not
92yet ready or stabilized, it is expected that this interface will change,
93and any and all userspace programs must deal with it.
94
95
96Notes about the sysfs interface:
97
98Unlike what was done with the procfs interface, correctness when talking
99to the sysfs interfaces will be enforced, as will correctness in the
100thinkpad-acpi's implementation of sysfs interfaces.
101
102Also, any bugs in the thinkpad-acpi sysfs driver code or in the
103thinkpad-acpi's implementation of the sysfs interfaces will be fixed for
104maximum correctness, even if that means changing an interface in
105non-compatible ways. As these interfaces mature both in the kernel and
106in thinkpad-acpi, such changes should become quite rare.
107
108Applications interfacing to the thinkpad-acpi sysfs interfaces must
109follow all sysfs guidelines and correctly process all errors (the sysfs
110interface makes extensive use of errors). File descriptors and open /
111close operations to the sysfs inodes must also be properly implemented.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700112
Henrique de Moraes Holschuh176750d2007-04-24 11:48:13 -0300113The version of thinkpad-acpi's sysfs interface is exported by the driver
114as a driver attribute (see below).
115
116Sysfs driver attributes are on the driver's sysfs attribute space,
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000117for 2.6.23+ this is /sys/bus/platform/drivers/thinkpad_acpi/ and
Henrique de Moraes Holschuh7fd40022007-09-25 06:38:03 -0300118/sys/bus/platform/drivers/thinkpad_hwmon/
Henrique de Moraes Holschuh176750d2007-04-24 11:48:13 -0300119
Henrique de Moraes Holschuh7fd40022007-09-25 06:38:03 -0300120Sysfs device attributes are on the thinkpad_acpi device sysfs attribute
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000121space, for 2.6.23+ this is /sys/devices/platform/thinkpad_acpi/.
Henrique de Moraes Holschuh7fd40022007-09-25 06:38:03 -0300122
123Sysfs device attributes for the sensors and fan are on the
124thinkpad_hwmon device's sysfs attribute space, but you should locate it
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000125looking for a hwmon device with the name attribute of "thinkpad", or
126better yet, through libsensors.
127
Henrique de Moraes Holschuh176750d2007-04-24 11:48:13 -0300128
129Driver version
130--------------
131
132procfs: /proc/acpi/ibm/driver
133sysfs driver attribute: version
Linus Torvalds1da177e2005-04-16 15:20:36 -0700134
135The driver name and version. No commands can be written to this file.
136
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000137
Henrique de Moraes Holschuh176750d2007-04-24 11:48:13 -0300138Sysfs interface version
139-----------------------
140
141sysfs driver attribute: interface_version
142
143Version of the thinkpad-acpi sysfs interface, as an unsigned long
144(output in hex format: 0xAAAABBCC), where:
145 AAAA - major revision
146 BB - minor revision
147 CC - bugfix revision
148
149The sysfs interface version changelog for the driver can be found at the
150end of this document. Changes to the sysfs interface done by the kernel
151subsystems are not documented here, nor are they tracked by this
152attribute.
153
Henrique de Moraes Holschuh94b08712007-07-18 23:45:32 -0300154Changes to the thinkpad-acpi sysfs interface are only considered
155non-experimental when they are submitted to Linux mainline, at which
156point the changes in this interface are documented and interface_version
157may be updated. If you are using any thinkpad-acpi features not yet
158sent to mainline for merging, you do so on your own risk: these features
159may disappear, or be implemented in a different and incompatible way by
160the time they are merged in Linux mainline.
161
162Changes that are backwards-compatible by nature (e.g. the addition of
163attributes that do not change the way the other attributes work) do not
164always warrant an update of interface_version. Therefore, one must
165expect that an attribute might not be there, and deal with it properly
166(an attribute not being there *is* a valid way to make it clear that a
167feature is not available in sysfs).
168
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000169
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300170Hot keys
171--------
172
173procfs: /proc/acpi/ibm/hotkey
Henrique de Moraes Holschuhcc4c24e2007-05-30 20:50:14 -0300174sysfs device attribute: hotkey_*
Linus Torvalds1da177e2005-04-16 15:20:36 -0700175
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200176In a ThinkPad, the ACPI HKEY handler is responsible for communicating
Henrique de Moraes Holschuh1a343762007-07-18 23:45:36 -0300177some important events and also keyboard hot key presses to the operating
178system. Enabling the hotkey functionality of thinkpad-acpi signals the
179firmware that such a driver is present, and modifies how the ThinkPad
180firmware will behave in many situations.
181
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300182The driver enables the hot key feature automatically when loaded. The
183feature can later be disabled and enabled back at runtime. The driver
184will also restore the hot key feature to its previous state and mask
185when it is unloaded.
186
Henrique de Moraes Holschuh1a343762007-07-18 23:45:36 -0300187When the hotkey feature is enabled and the hot key mask is set (see
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300188below), the driver will report HKEY events in the following format:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700189
190 ibm/hotkey HKEY 00000080 0000xxxx
191
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300192Some of these events refer to hot key presses, but not all.
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300193
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300194The driver will generate events over the input layer for hot keys and
195radio switches, and over the ACPI netlink layer for other events. The
196input layer support accepts the standard IOCTLs to remap the keycodes
197assigned to each hot key.
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300198
Henrique de Moraes Holschuh1a343762007-07-18 23:45:36 -0300199The hot key bit mask allows some control over which hot keys generate
200events. If a key is "masked" (bit set to 0 in the mask), the firmware
201will handle it. If it is "unmasked", it signals the firmware that
202thinkpad-acpi would prefer to handle it, if the firmware would be so
203kind to allow it (and it often doesn't!).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700204
Henrique de Moraes Holschuh1a343762007-07-18 23:45:36 -0300205Not all bits in the mask can be modified. Not all bits that can be
206modified do anything. Not all hot keys can be individually controlled
207by the mask. Some models do not support the mask at all, and in those
208models, hot keys cannot be controlled individually. The behaviour of
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200209the mask is, therefore, highly dependent on the ThinkPad model.
Henrique de Moraes Holschuhae92bd12007-07-18 23:45:29 -0300210
Henrique de Moraes Holschuh1a343762007-07-18 23:45:36 -0300211Note that unmasking some keys prevents their default behavior. For
212example, if Fn+F5 is unmasked, that key will no longer enable/disable
213Bluetooth by itself.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700214
Henrique de Moraes Holschuh1a343762007-07-18 23:45:36 -0300215Note also that not all Fn key combinations are supported through ACPI.
216For example, on the X40, the brightness, volume and "Access IBM" buttons
217do not generate ACPI events even with this driver. They *can* be used
218through the "ThinkPad Buttons" utility, see http://www.nongnu.org/tpb/
Linus Torvalds1da177e2005-04-16 15:20:36 -0700219
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300220procfs notes:
221
222The following commands can be written to the /proc/acpi/ibm/hotkey file:
223
224 echo enable > /proc/acpi/ibm/hotkey -- enable the hot keys feature
225 echo disable > /proc/acpi/ibm/hotkey -- disable the hot keys feature
Henrique de Moraes Holschuhae92bd12007-07-18 23:45:29 -0300226 echo 0xffffffff > /proc/acpi/ibm/hotkey -- enable all hot keys
227 echo 0 > /proc/acpi/ibm/hotkey -- disable all possible hot keys
228 ... any other 8-hex-digit mask ...
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300229 echo reset > /proc/acpi/ibm/hotkey -- restore the original mask
230
Henrique de Moraes Holschuh01e88f22008-01-08 13:02:41 -0200231The procfs interface does not support NVRAM polling control. So as to
232maintain maximum bug-to-bug compatibility, it does not report any masks,
233nor does it allow one to manipulate the hot key mask when the firmware
234does not support masks at all, even if NVRAM polling is in use.
235
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300236sysfs notes:
237
Henrique de Moraes Holschuhcc4c24e2007-05-30 20:50:14 -0300238 hotkey_bios_enabled:
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300239 Returns the status of the hot keys feature when
240 thinkpad-acpi was loaded. Upon module unload, the hot
241 key feature status will be restored to this value.
242
243 0: hot keys were disabled
Henrique de Moraes Holschuh1a343762007-07-18 23:45:36 -0300244 1: hot keys were enabled (unusual)
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300245
Henrique de Moraes Holschuhcc4c24e2007-05-30 20:50:14 -0300246 hotkey_bios_mask:
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300247 Returns the hot keys mask when thinkpad-acpi was loaded.
248 Upon module unload, the hot keys mask will be restored
249 to this value.
250
Henrique de Moraes Holschuhcc4c24e2007-05-30 20:50:14 -0300251 hotkey_enable:
Henrique de Moraes Holschuh01e88f22008-01-08 13:02:41 -0200252 Enables/disables the hot keys feature in the ACPI
253 firmware, and reports current status of the hot keys
254 feature. Has no effect on the NVRAM hot key polling
255 functionality.
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300256
257 0: disables the hot keys feature / feature disabled
258 1: enables the hot keys feature / feature enabled
259
Henrique de Moraes Holschuhcc4c24e2007-05-30 20:50:14 -0300260 hotkey_mask:
Henrique de Moraes Holschuh01e88f22008-01-08 13:02:41 -0200261 bit mask to enable driver-handling (and depending on
262 the firmware, ACPI event generation) for each hot key
263 (see above). Returns the current status of the hot keys
264 mask, and allows one to modify it.
265
266 Note: when NVRAM polling is active, the firmware mask
267 will be different from the value returned by
268 hotkey_mask. The driver will retain enabled bits for
269 hotkeys that are under NVRAM polling even if the
270 firmware refuses them, and will not set these bits on
271 the firmware hot key mask.
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300272
Henrique de Moraes Holschuh9b010de2007-07-18 23:45:30 -0300273 hotkey_all_mask:
274 bit mask that should enable event reporting for all
275 supported hot keys, when echoed to hotkey_mask above.
276 Unless you know which events need to be handled
277 passively (because the firmware *will* handle them
278 anyway), do *not* use hotkey_all_mask. Use
279 hotkey_recommended_mask, instead. You have been warned.
280
281 hotkey_recommended_mask:
282 bit mask that should enable event reporting for all
Henrique de Moraes Holschuh1a343762007-07-18 23:45:36 -0300283 supported hot keys, except those which are always
284 handled by the firmware anyway. Echo it to
285 hotkey_mask above, to use.
Henrique de Moraes Holschuh9b010de2007-07-18 23:45:30 -0300286
Henrique de Moraes Holschuh01e88f22008-01-08 13:02:41 -0200287 hotkey_source_mask:
288 bit mask that selects which hot keys will the driver
289 poll the NVRAM for. This is auto-detected by the driver
290 based on the capabilities reported by the ACPI firmware,
291 but it can be overridden at runtime.
292
293 Hot keys whose bits are set in both hotkey_source_mask
294 and also on hotkey_mask are polled for in NVRAM. Only a
295 few hot keys are available through CMOS NVRAM polling.
296
297 Warning: when in NVRAM mode, the volume up/down/mute
298 keys are synthesized according to changes in the mixer,
299 so you have to use volume up or volume down to unmute,
300 as per the ThinkPad volume mixer user interface. When
301 in ACPI event mode, volume up/down/mute are reported as
302 separate events, but this behaviour may be corrected in
303 future releases of this driver, in which case the
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200304 ThinkPad volume mixer user interface semantics will be
Henrique de Moraes Holschuh01e88f22008-01-08 13:02:41 -0200305 enforced.
306
307 hotkey_poll_freq:
308 frequency in Hz for hot key polling. It must be between
309 0 and 25 Hz. Polling is only carried out when strictly
310 needed.
311
312 Setting hotkey_poll_freq to zero disables polling, and
313 will cause hot key presses that require NVRAM polling
314 to never be reported.
315
316 Setting hotkey_poll_freq too low will cause repeated
317 pressings of the same hot key to be misreported as a
318 single key press, or to not even be detected at all.
319 The recommended polling frequency is 10Hz.
320
Henrique de Moraes Holschuh74941a62007-07-18 23:45:31 -0300321 hotkey_radio_sw:
Henrique de Moraes Holschuhd147da72008-02-16 02:17:57 -0200322 If the ThinkPad has a hardware radio switch, this
Henrique de Moraes Holschuh74941a62007-07-18 23:45:31 -0300323 attribute will read 0 if the switch is in the "radios
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200324 disabled" position, and 1 if the switch is in the
Henrique de Moraes Holschuh74941a62007-07-18 23:45:31 -0300325 "radios enabled" position.
326
Henrique de Moraes Holschuh50ebec02008-01-08 13:02:55 -0200327 This attribute has poll()/select() support.
328
Henrique de Moraes Holschuh6c231bd2008-02-16 02:17:58 -0200329 hotkey_tablet_mode:
330 If the ThinkPad has tablet capabilities, this attribute
331 will read 0 if the ThinkPad is in normal mode, and
332 1 if the ThinkPad is in tablet mode.
333
334 This attribute has poll()/select() support.
335
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300336 hotkey_report_mode:
337 Returns the state of the procfs ACPI event report mode
338 filter for hot keys. If it is set to 1 (the default),
339 all hot key presses are reported both through the input
340 layer and also as ACPI events through procfs (but not
341 through netlink). If it is set to 2, hot key presses
342 are reported only through the input layer.
343
344 This attribute is read-only in kernels 2.6.23 or later,
345 and read-write on earlier kernels.
346
347 May return -EPERM (write access locked out by module
348 parameter) or -EACCES (read-only).
349
Henrique de Moraes Holschuha713b4d2008-01-08 13:02:52 -0200350 wakeup_reason:
351 Set to 1 if the system is waking up because the user
352 requested a bay ejection. Set to 2 if the system is
353 waking up because the user requested the system to
354 undock. Set to zero for normal wake-ups or wake-ups
355 due to unknown reasons.
356
Henrique de Moraes Holschuh50ebec02008-01-08 13:02:55 -0200357 This attribute has poll()/select() support.
358
Henrique de Moraes Holschuha713b4d2008-01-08 13:02:52 -0200359 wakeup_hotunplug_complete:
360 Set to 1 if the system was waken up because of an
361 undock or bay ejection request, and that request
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200362 was successfully completed. At this point, it might
Henrique de Moraes Holschuha713b4d2008-01-08 13:02:52 -0200363 be useful to send the system back to sleep, at the
364 user's choice. Refer to HKEY events 0x4003 and
365 0x3003, below.
366
Henrique de Moraes Holschuh50ebec02008-01-08 13:02:55 -0200367 This attribute has poll()/select() support.
368
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300369input layer notes:
370
371A Hot key is mapped to a single input layer EV_KEY event, possibly
372followed by an EV_MSC MSC_SCAN event that shall contain that key's scan
373code. An EV_SYN event will always be generated to mark the end of the
374event block.
375
376Do not use the EV_MSC MSC_SCAN events to process keys. They are to be
377used as a helper to remap keys, only. They are particularly useful when
378remapping KEY_UNKNOWN keys.
379
380The events are available in an input device, with the following id:
381
382 Bus: BUS_HOST
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -0300383 vendor: 0x1014 (PCI_VENDOR_ID_IBM) or
384 0x17aa (PCI_VENDOR_ID_LENOVO)
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300385 product: 0x5054 ("TP")
386 version: 0x4101
387
388The version will have its LSB incremented if the keymap changes in a
389backwards-compatible way. The MSB shall always be 0x41 for this input
390device. If the MSB is not 0x41, do not use the device as described in
391this section, as it is either something else (e.g. another input device
392exported by a thinkpad driver, such as HDAPS) or its functionality has
393been changed in a non-backwards compatible way.
394
395Adding other event types for other functionalities shall be considered a
396backwards-compatible change for this input device.
397
398Thinkpad-acpi Hot Key event map (version 0x4101):
399
400ACPI Scan
401event code Key Notes
402
4030x1001 0x00 FN+F1 -
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -03004040x1002 0x01 FN+F2 IBM: battery (rare)
405 Lenovo: Screen lock
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300406
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -03004070x1003 0x02 FN+F3 Many IBM models always report
408 this hot key, even with hot keys
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300409 disabled or with Fn+F3 masked
410 off
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -0300411 IBM: screen lock
412 Lenovo: battery
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300413
4140x1004 0x03 FN+F4 Sleep button (ACPI sleep button
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200415 semantics, i.e. sleep-to-RAM).
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300416 It is always generate some kind
417 of event, either the hot key
418 event or a ACPI sleep button
419 event. The firmware may
420 refuse to generate further FN+F4
421 key presses until a S3 or S4 ACPI
422 sleep cycle is performed or some
423 time passes.
424
4250x1005 0x04 FN+F5 Radio. Enables/disables
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200426 the internal Bluetooth hardware
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300427 and W-WAN card if left in control
428 of the firmware. Does not affect
429 the WLAN card.
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -0300430 Should be used to turn on/off all
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200431 radios (Bluetooth+W-WAN+WLAN),
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -0300432 really.
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300433
4340x1006 0x05 FN+F6 -
435
4360x1007 0x06 FN+F7 Video output cycle.
437 Do you feel lucky today?
438
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -03004390x1008 0x07 FN+F8 IBM: toggle screen expand
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200440 Lenovo: configure UltraNav
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -0300441
4420x1009 0x08 FN+F9 -
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300443 .. .. ..
4440x100B 0x0A FN+F11 -
445
4460x100C 0x0B FN+F12 Sleep to disk. You are always
447 supposed to handle it yourself,
448 either through the ACPI event,
449 or through a hotkey event.
450 The firmware may refuse to
451 generate further FN+F4 key
452 press events until a S3 or S4
453 ACPI sleep cycle is performed,
454 or some time passes.
455
4560x100D 0x0C FN+BACKSPACE -
4570x100E 0x0D FN+INSERT -
4580x100F 0x0E FN+DELETE -
459
4600x1010 0x0F FN+HOME Brightness up. This key is
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -0300461 always handled by the firmware
462 in IBM ThinkPads, even when
463 unmasked. Just leave it alone.
464 For Lenovo ThinkPads with a new
465 BIOS, it has to be handled either
466 by the ACPI OSI, or by userspace.
4670x1011 0x10 FN+END Brightness down. See brightness
468 up for details.
469
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -02004700x1012 0x11 FN+PGUP ThinkLight toggle. This key is
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300471 always handled by the firmware,
472 even when unmasked.
473
4740x1013 0x12 FN+PGDOWN -
475
4760x1014 0x13 FN+SPACE Zoom key
477
4780x1015 0x14 VOLUME UP Internal mixer volume up. This
479 key is always handled by the
480 firmware, even when unmasked.
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -0300481 NOTE: Lenovo seems to be changing
482 this.
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -03004830x1016 0x15 VOLUME DOWN Internal mixer volume up. This
484 key is always handled by the
485 firmware, even when unmasked.
Henrique de Moraes Holschuhedf0e0e2007-07-18 23:45:44 -0300486 NOTE: Lenovo seems to be changing
487 this.
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -03004880x1017 0x16 MUTE Mute internal mixer. This
489 key is always handled by the
490 firmware, even when unmasked.
491
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -02004920x1018 0x17 THINKPAD ThinkPad/Access IBM/Lenovo key
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300493
4940x1019 0x18 unknown
495.. .. ..
4960x1020 0x1F unknown
497
498The ThinkPad firmware does not allow one to differentiate when most hot
499keys are pressed or released (either that, or we don't know how to, yet).
500For these keys, the driver generates a set of events for a key press and
501immediately issues the same set of events for a key release. It is
502unknown by the driver if the ThinkPad firmware triggered these events on
503hot key press or release, but the firmware will do it for either one, not
504both.
505
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300506If a key is mapped to KEY_RESERVED, it generates no input events at all.
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300507If a key is mapped to KEY_UNKNOWN, it generates an input event that
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300508includes an scan code. If a key is mapped to anything else, it will
509generate input device EV_KEY events.
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300510
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200511In addition to the EV_KEY events, thinkpad-acpi may also issue EV_SW
512events for switches:
513
Henrique de Moraes Holschuh197a2cd2008-06-03 23:36:09 -0300514SW_RFKILL_ALL T60 and later hardare rfkill rocker switch
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200515SW_TABLET_MODE Tablet ThinkPads HKEY events 0x5009 and 0x500A
516
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -0300517Non hot-key ACPI HKEY event map:
5180x5001 Lid closed
5190x5002 Lid opened
Henrique de Moraes Holschuhb3ec6f92008-02-16 02:17:55 -02005200x5009 Tablet swivel: switched to tablet mode
5210x500A Tablet swivel: switched to normal mode
Henrique de Moraes Holschuh6a38abb2007-07-18 23:45:35 -03005220x7000 Radio Switch may have changed state
523
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300524The above events are not propagated by the driver, except for legacy
525compatibility purposes when hotkey_report_mode is set to 1.
526
Henrique de Moraes Holschuha713b4d2008-01-08 13:02:52 -02005270x2304 System is waking up from suspend to undock
5280x2305 System is waking up from suspend to eject bay
5290x2404 System is waking up from hibernation to undock
5300x2405 System is waking up from hibernation to eject bay
531
532The above events are never propagated by the driver.
533
5340x3003 Bay ejection (see 0x2x05) complete, can sleep again
5350x4003 Undocked (see 0x2x04), can sleep again
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -02005360x500B Tablet pen inserted into its storage bay
Henrique de Moraes Holschuhd1edb2b2008-01-08 13:02:53 -02005370x500C Tablet pen removed from its storage bay
Henrique de Moraes Holschuh3b64b512008-01-08 13:02:51 -02005380x5010 Brightness level changed (newer Lenovo BIOSes)
539
540The above events are propagated by the driver.
541
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300542Compatibility notes:
543
544ibm-acpi and thinkpad-acpi 0.15 (mainline kernels before 2.6.23) never
545supported the input layer, and sent events over the procfs ACPI event
546interface.
547
548To avoid sending duplicate events over the input layer and the ACPI
549event interface, thinkpad-acpi 0.16 implements a module parameter
550(hotkey_report_mode), and also a sysfs device attribute with the same
551name.
552
553Make no mistake here: userspace is expected to switch to using the input
554layer interface of thinkpad-acpi, together with the ACPI netlink event
555interface in kernels 2.6.23 and later, or with the ACPI procfs event
556interface in kernels 2.6.22 and earlier.
557
558If no hotkey_report_mode module parameter is specified (or it is set to
559zero), the driver defaults to mode 1 (see below), and on kernels 2.6.22
560and earlier, also allows one to change the hotkey_report_mode through
561sysfs. In kernels 2.6.23 and later, where the netlink ACPI event
562interface is available, hotkey_report_mode cannot be changed through
563sysfs (it is read-only).
564
565If the hotkey_report_mode module parameter is set to 1 or 2, it cannot
566be changed later through sysfs (any writes will return -EPERM to signal
567that hotkey_report_mode was locked. On 2.6.23 and later, where
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200568hotkey_report_mode cannot be changed at all, writes will return -EACCES).
Henrique de Moraes Holschuhff80f132007-09-04 11:13:15 -0300569
570hotkey_report_mode set to 1 makes the driver export through the procfs
571ACPI event interface all hot key presses (which are *also* sent to the
572input layer). This is a legacy compatibility behaviour, and it is also
573the default mode of operation for the driver.
574
575hotkey_report_mode set to 2 makes the driver filter out the hot key
576presses from the procfs ACPI event interface, so these events will only
577be sent through the input layer. Userspace that has been updated to use
578the thinkpad-acpi input layer interface should set hotkey_report_mode to
5792.
580
581Hot key press events are never sent to the ACPI netlink event interface.
582Really up-to-date userspace under kernel 2.6.23 and later is to use the
583netlink interface and the input layer interface, and don't bother at all
584with hotkey_report_mode.
585
Henrique de Moraes Holschuha0416422007-04-27 22:00:16 -0300586
Henrique de Moraes Holschuhb5972792008-04-26 01:02:17 -0300587Brightness hotkey notes:
588
589These are the current sane choices for brightness key mapping in
590thinkpad-acpi:
591
592For IBM and Lenovo models *without* ACPI backlight control (the ones on
593which thinkpad-acpi will autoload its backlight interface by default,
594and on which ACPI video does not export a backlight interface):
595
5961. Don't enable or map the brightness hotkeys in thinkpad-acpi, as
597 these older firmware versions unfortunately won't respect the hotkey
598 mask for brightness keys anyway, and always reacts to them. This
599 usually work fine, unless X.org drivers are doing something to block
600 the BIOS. In that case, use (3) below. This is the default mode of
601 operation.
602
6032. Enable the hotkeys, but map them to something else that is NOT
604 KEY_BRIGHTNESS_UP/DOWN or any other keycode that would cause
605 userspace to try to change the backlight level, and use that as an
606 on-screen-display hint.
607
6083. IF AND ONLY IF X.org drivers find a way to block the firmware from
609 automatically changing the brightness, enable the hotkeys and map
610 them to KEY_BRIGHTNESS_UP and KEY_BRIGHTNESS_DOWN, and feed that to
611 something that calls xbacklight. thinkpad-acpi will not be able to
612 change brightness in that case either, so you should disable its
613 backlight interface.
614
615For Lenovo models *with* ACPI backlight control:
616
6171. Load up ACPI video and use that. ACPI video will report ACPI
618 events for brightness change keys. Do not mess with thinkpad-acpi
619 defaults in this case. thinkpad-acpi should not have anything to do
620 with backlight events in a scenario where ACPI video is loaded:
621 brightness hotkeys must be disabled, and the backlight interface is
622 to be kept disabled as well. This is the default mode of operation.
623
6242. Do *NOT* load up ACPI video, enable the hotkeys in thinkpad-acpi,
625 and map them to KEY_BRIGHTNESS_UP and KEY_BRIGHTNESS_DOWN. Process
626 these keys on userspace somehow (e.g. by calling xbacklight).
627
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000628
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -0300629Bluetooth
630---------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700631
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -0300632procfs: /proc/acpi/ibm/bluetooth
Henrique de Moraes Holschuh0e74dc22008-07-21 09:15:51 -0300633sysfs device attribute: bluetooth_enable (deprecated)
634sysfs rfkill class: switch "tpacpi_bluetooth_sw"
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -0300635
636This feature shows the presence and current state of a ThinkPad
637Bluetooth device in the internal ThinkPad CDC slot.
638
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000639If the ThinkPad supports it, the Bluetooth state is stored in NVRAM,
640so it is kept across reboots and power-off.
641
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -0300642Procfs notes:
643
644If Bluetooth is installed, the following commands can be used:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700645
646 echo enable > /proc/acpi/ibm/bluetooth
647 echo disable > /proc/acpi/ibm/bluetooth
648
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -0300649Sysfs notes:
650
651 If the Bluetooth CDC card is installed, it can be enabled /
Henrique de Moraes Holschuhcc4c24e2007-05-30 20:50:14 -0300652 disabled through the "bluetooth_enable" thinkpad-acpi device
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -0300653 attribute, and its current status can also be queried.
654
655 enable:
656 0: disables Bluetooth / Bluetooth is disabled
657 1: enables Bluetooth / Bluetooth is enabled.
658
Henrique de Moraes Holschuh0e74dc22008-07-21 09:15:51 -0300659 Note: this interface has been superseded by the generic rfkill
660 class. It has been deprecated, and it will be removed in year
661 2010.
662
663 rfkill controller switch "tpacpi_bluetooth_sw": refer to
664 Documentation/rfkill.txt for details.
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -0300665
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000666
Linus Torvalds1da177e2005-04-16 15:20:36 -0700667Video output control -- /proc/acpi/ibm/video
668--------------------------------------------
669
670This feature allows control over the devices used for video output -
671LCD, CRT or DVI (if available). The following commands are available:
672
673 echo lcd_enable > /proc/acpi/ibm/video
674 echo lcd_disable > /proc/acpi/ibm/video
675 echo crt_enable > /proc/acpi/ibm/video
676 echo crt_disable > /proc/acpi/ibm/video
677 echo dvi_enable > /proc/acpi/ibm/video
678 echo dvi_disable > /proc/acpi/ibm/video
679 echo auto_enable > /proc/acpi/ibm/video
680 echo auto_disable > /proc/acpi/ibm/video
681 echo expand_toggle > /proc/acpi/ibm/video
682 echo video_switch > /proc/acpi/ibm/video
683
684Each video output device can be enabled or disabled individually.
685Reading /proc/acpi/ibm/video shows the status of each device.
686
687Automatic video switching can be enabled or disabled. When automatic
688video switching is enabled, certain events (e.g. opening the lid,
689docking or undocking) cause the video output device to change
690automatically. While this can be useful, it also causes flickering
691and, on the X40, video corruption. By disabling automatic switching,
692the flickering or video corruption can be avoided.
693
694The video_switch command cycles through the available video outputs
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400695(it simulates the behavior of Fn-F7).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700696
697Video expansion can be toggled through this feature. This controls
698whether the display is expanded to fill the entire LCD screen when a
699mode with less than full resolution is used. Note that the current
700video expansion status cannot be determined through this feature.
701
702Note that on many models (particularly those using Radeon graphics
703chips) the X driver configures the video card in a way which prevents
704Fn-F7 from working. This also disables the video output switching
705features of this driver, as it uses the same ACPI methods as
706Fn-F7. Video switching on the console should still work.
707
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000708UPDATE: refer to https://bugs.freedesktop.org/show_bug.cgi?id=2000
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400709
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400710
Henrique de Moraes Holschuhe3065012008-04-26 01:02:24 -0300711ThinkLight control
712------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700713
Henrique de Moraes Holschuhe3065012008-04-26 01:02:24 -0300714procfs: /proc/acpi/ibm/light
Henrique de Moraes Holschuh65807cc2008-04-26 01:02:26 -0300715sysfs attributes: as per LED class, for the "tpacpi::thinklight" LED
Henrique de Moraes Holschuhe3065012008-04-26 01:02:24 -0300716
717procfs notes:
718
719The ThinkLight status can be read and set through the procfs interface. A
720few models which do not make the status available will show the ThinkLight
721status as "unknown". The available commands are:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700722
723 echo on > /proc/acpi/ibm/light
724 echo off > /proc/acpi/ibm/light
725
Henrique de Moraes Holschuhe3065012008-04-26 01:02:24 -0300726sysfs notes:
727
Henrique de Moraes Holschuh65807cc2008-04-26 01:02:26 -0300728The ThinkLight sysfs interface is documented by the LED class
729documentation, in Documentation/leds-class.txt. The ThinkLight LED name
Henrique de Moraes Holschuhe3065012008-04-26 01:02:24 -0300730is "tpacpi::thinklight".
731
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000732Due to limitations in the sysfs LED class, if the status of the ThinkLight
Henrique de Moraes Holschuhe3065012008-04-26 01:02:24 -0300733cannot be read or if it is unknown, thinkpad-acpi will report it as "off".
734It is impossible to know if the status returned through sysfs is valid.
735
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000736
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400737Docking / undocking -- /proc/acpi/ibm/dock
Linus Torvalds1da177e2005-04-16 15:20:36 -0700738------------------------------------------
739
740Docking and undocking (e.g. with the X4 UltraBase) requires some
741actions to be taken by the operating system to safely make or break
742the electrical connections with the dock.
743
744The docking feature of this driver generates the following ACPI events:
745
746 ibm/dock GDCK 00000003 00000001 -- eject request
747 ibm/dock GDCK 00000003 00000002 -- undocked
748 ibm/dock GDCK 00000000 00000003 -- docked
749
750NOTE: These events will only be generated if the laptop was docked
751when originally booted. This is due to the current lack of support for
752hot plugging of devices in the Linux ACPI framework. If the laptop was
753booted while not in the dock, the following message is shown in the
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400754logs:
755
Henrique de Moraes Holschuh643f12d2007-03-29 01:58:43 -0300756 Mar 17 01:42:34 aero kernel: thinkpad_acpi: dock device not present
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400757
758In this case, no dock-related events are generated but the dock and
759undock commands described below still work. They can be executed
760manually or triggered by Fn key combinations (see the example acpid
761configuration files included in the driver tarball package available
762on the web site).
Linus Torvalds1da177e2005-04-16 15:20:36 -0700763
764When the eject request button on the dock is pressed, the first event
765above is generated. The handler for this event should issue the
766following command:
767
768 echo undock > /proc/acpi/ibm/dock
769
770After the LED on the dock goes off, it is safe to eject the laptop.
771Note: if you pressed this key by mistake, go ahead and eject the
772laptop, then dock it back in. Otherwise, the dock may not function as
773expected.
774
775When the laptop is docked, the third event above is generated. The
776handler for this event should issue the following command to fully
777enable the dock:
778
779 echo dock > /proc/acpi/ibm/dock
780
781The contents of the /proc/acpi/ibm/dock file shows the current status
782of the dock, as provided by the ACPI framework.
783
784The docking support in this driver does not take care of enabling or
785disabling any other devices you may have attached to the dock. For
786example, a CD drive plugged into the UltraBase needs to be disabled or
787enabled separately. See the provided example acpid configuration files
788for how this can be accomplished.
789
790There is no support yet for PCI devices that may be attached to a
791docking station, e.g. in the ThinkPad Dock II. The driver currently
792does not recognize, enable or disable such devices. This means that
793the only docking stations currently supported are the X-series
794UltraBase docks and "dumb" port replicators like the Mini Dock (the
795latter don't need any ACPI support, actually).
796
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000797
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400798UltraBay eject -- /proc/acpi/ibm/bay
Linus Torvalds1da177e2005-04-16 15:20:36 -0700799------------------------------------
800
801Inserting or ejecting an UltraBay device requires some actions to be
802taken by the operating system to safely make or break the electrical
803connections with the device.
804
805This feature generates the following ACPI events:
806
807 ibm/bay MSTR 00000003 00000000 -- eject request
808 ibm/bay MSTR 00000001 00000000 -- eject lever inserted
809
810NOTE: These events will only be generated if the UltraBay was present
811when the laptop was originally booted (on the X series, the UltraBay
812is in the dock, so it may not be present if the laptop was undocked).
813This is due to the current lack of support for hot plugging of devices
814in the Linux ACPI framework. If the laptop was booted without the
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400815UltraBay, the following message is shown in the logs:
816
Henrique de Moraes Holschuh643f12d2007-03-29 01:58:43 -0300817 Mar 17 01:42:34 aero kernel: thinkpad_acpi: bay device not present
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400818
819In this case, no bay-related events are generated but the eject
Linus Torvalds1da177e2005-04-16 15:20:36 -0700820command described below still works. It can be executed manually or
821triggered by a hot key combination.
822
823Sliding the eject lever generates the first event shown above. The
824handler for this event should take whatever actions are necessary to
825shut down the device in the UltraBay (e.g. call idectl), then issue
826the following command:
827
828 echo eject > /proc/acpi/ibm/bay
829
830After the LED on the UltraBay goes off, it is safe to pull out the
831device.
832
833When the eject lever is inserted, the second event above is
834generated. The handler for this event should take whatever actions are
835necessary to enable the UltraBay device (e.g. call idectl).
836
837The contents of the /proc/acpi/ibm/bay file shows the current status
838of the UltraBay, as provided by the ACPI framework.
839
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400840EXPERIMENTAL warm eject support on the 600e/x, A22p and A3x (To use
841this feature, you need to supply the experimental=1 parameter when
842loading the module):
Linus Torvalds1da177e2005-04-16 15:20:36 -0700843
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400844These models do not have a button near the UltraBay device to request
845a hot eject but rather require the laptop to be put to sleep
846(suspend-to-ram) before the bay device is ejected or inserted).
847The sequence of steps to eject the device is as follows:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700848
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400849 echo eject > /proc/acpi/ibm/bay
850 put the ThinkPad to sleep
851 remove the drive
852 resume from sleep
853 cat /proc/acpi/ibm/bay should show that the drive was removed
854
855On the A3x, both the UltraBay 2000 and UltraBay Plus devices are
856supported. Use "eject2" instead of "eject" for the second bay.
857
858Note: the UltraBay eject support on the 600e/x, A22p and A3x is
859EXPERIMENTAL and may not work as expected. USE WITH CAUTION!
860
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000861
862CMOS/UCMS control
863-----------------
Henrique de Moraes Holschuhb6160042007-04-24 11:48:19 -0300864
865procfs: /proc/acpi/ibm/cmos
866sysfs device attribute: cmos_command
Linus Torvalds1da177e2005-04-16 15:20:36 -0700867
Henrique de Moraes Holschuhd54b7d72007-07-18 23:45:33 -0300868This feature is mostly used internally by the ACPI firmware to keep the legacy
869CMOS NVRAM bits in sync with the current machine state, and to record this
870state so that the ThinkPad will retain such settings across reboots.
871
872Some of these commands actually perform actions in some ThinkPad models, but
873this is expected to disappear more and more in newer models. As an example, in
874a T43 and in a X40, commands 12 and 13 still control the ThinkLight state for
875real, but commands 0 to 2 don't control the mixer anymore (they have been
876phased out) and just update the NVRAM.
Linus Torvalds1da177e2005-04-16 15:20:36 -0700877
Henrique de Moraes Holschuhb6160042007-04-24 11:48:19 -0300878The range of valid cmos command numbers is 0 to 21, but not all have an
879effect and the behavior varies from model to model. Here is the behavior
880on the X40 (tpb is the ThinkPad Buttons utility):
Linus Torvalds1da177e2005-04-16 15:20:36 -0700881
Henrique de Moraes Holschuhd54b7d72007-07-18 23:45:33 -0300882 0 - Related to "Volume down" key press
883 1 - Related to "Volume up" key press
884 2 - Related to "Mute on" key press
885 3 - Related to "Access IBM" key press
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200886 4 - Related to "LCD brightness up" key press
Henrique de Moraes Holschuhd54b7d72007-07-18 23:45:33 -0300887 5 - Related to "LCD brightness down" key press
888 11 - Related to "toggle screen expansion" key press/function
889 12 - Related to "ThinkLight on"
890 13 - Related to "ThinkLight off"
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -0200891 14 - Related to "ThinkLight" key press (toggle ThinkLight)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700892
Henrique de Moraes Holschuhb6160042007-04-24 11:48:19 -0300893The cmos command interface is prone to firmware split-brain problems, as
Henrique de Moraes Holschuhd54b7d72007-07-18 23:45:33 -0300894in newer ThinkPads it is just a compatibility layer. Do not use it, it is
895exported just as a debug tool.
Henrique de Moraes Holschuhb6160042007-04-24 11:48:19 -0300896
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000897
Henrique de Moraes Holschuhaf116102008-04-26 01:02:25 -0300898LED control
899-----------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700900
Henrique de Moraes Holschuhaf116102008-04-26 01:02:25 -0300901procfs: /proc/acpi/ibm/led
Henrique de Moraes Holschuh65807cc2008-04-26 01:02:26 -0300902sysfs attributes: as per LED class, see below for names
Henrique de Moraes Holschuhaf116102008-04-26 01:02:25 -0300903
904Some of the LED indicators can be controlled through this feature. On
905some older ThinkPad models, it is possible to query the status of the
906LED indicators as well. Newer ThinkPads cannot query the real status
907of the LED indicators.
908
909procfs notes:
910
911The available commands are:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700912
Henrique de Moraes Holschuh65807cc2008-04-26 01:02:26 -0300913 echo '<LED number> on' >/proc/acpi/ibm/led
914 echo '<LED number> off' >/proc/acpi/ibm/led
915 echo '<LED number> blink' >/proc/acpi/ibm/led
Linus Torvalds1da177e2005-04-16 15:20:36 -0700916
Henrique de Moraes Holschuh65807cc2008-04-26 01:02:26 -0300917The <LED number> range is 0 to 7. The set of LEDs that can be
Henrique de Moraes Holschuhaf116102008-04-26 01:02:25 -0300918controlled varies from model to model. Here is the common ThinkPad
919mapping:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700920
921 0 - power
922 1 - battery (orange)
923 2 - battery (green)
Henrique de Moraes Holschuhaf116102008-04-26 01:02:25 -0300924 3 - UltraBase/dock
Linus Torvalds1da177e2005-04-16 15:20:36 -0700925 4 - UltraBay
Henrique de Moraes Holschuhaf116102008-04-26 01:02:25 -0300926 5 - UltraBase battery slot
927 6 - (unknown)
Linus Torvalds1da177e2005-04-16 15:20:36 -0700928 7 - standby
929
930All of the above can be turned on and off and can be made to blink.
931
Henrique de Moraes Holschuhaf116102008-04-26 01:02:25 -0300932sysfs notes:
933
Henrique de Moraes Holschuh65807cc2008-04-26 01:02:26 -0300934The ThinkPad LED sysfs interface is described in detail by the LED class
Henrique de Moraes Holschuhaf116102008-04-26 01:02:25 -0300935documentation, in Documentation/leds-class.txt.
936
937The leds are named (in LED ID order, from 0 to 7):
938"tpacpi::power", "tpacpi:orange:batt", "tpacpi:green:batt",
939"tpacpi::dock_active", "tpacpi::bay_active", "tpacpi::dock_batt",
940"tpacpi::unknown_led", "tpacpi::standby".
941
Henrique de Moraes Holschuh65807cc2008-04-26 01:02:26 -0300942Due to limitations in the sysfs LED class, if the status of the LED
Henrique de Moraes Holschuhaf116102008-04-26 01:02:25 -0300943indicators cannot be read due to an error, thinkpad-acpi will report it as
944a brightness of zero (same as LED off).
945
946If the thinkpad firmware doesn't support reading the current status,
947trying to read the current LED brightness will just return whatever
948brightness was last written to that attribute.
949
950These LEDs can blink using hardware acceleration. To request that a
951ThinkPad indicator LED should blink in hardware accelerated mode, use the
952"timer" trigger, and leave the delay_on and delay_off parameters set to
953zero (to request hardware acceleration autodetection).
954
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000955
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400956ACPI sounds -- /proc/acpi/ibm/beep
957----------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -0700958
959The BEEP method is used internally by the ACPI firmware to provide
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400960audible alerts in various situations. This feature allows the same
Linus Torvalds1da177e2005-04-16 15:20:36 -0700961sounds to be triggered manually.
962
963The commands are non-negative integer numbers:
964
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400965 echo <number> >/proc/acpi/ibm/beep
Linus Torvalds1da177e2005-04-16 15:20:36 -0700966
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400967The valid <number> range is 0 to 17. Not all numbers trigger sounds
968and the sounds vary from model to model. Here is the behavior on the
969X40:
Linus Torvalds1da177e2005-04-16 15:20:36 -0700970
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400971 0 - stop a sound in progress (but use 17 to stop 16)
972 2 - two beeps, pause, third beep ("low battery")
Linus Torvalds1da177e2005-04-16 15:20:36 -0700973 3 - single beep
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400974 4 - high, followed by low-pitched beep ("unable")
Linus Torvalds1da177e2005-04-16 15:20:36 -0700975 5 - single beep
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400976 6 - very high, followed by high-pitched beep ("AC/DC")
Linus Torvalds1da177e2005-04-16 15:20:36 -0700977 7 - high-pitched beep
978 9 - three short beeps
979 10 - very long beep
980 12 - low-pitched beep
Borislav Deianov78f81cc2005-08-17 00:00:00 -0400981 15 - three high-pitched beeps repeating constantly, stop with 0
982 16 - one medium-pitched beep repeating constantly, stop with 17
983 17 - stop 16
Linus Torvalds1da177e2005-04-16 15:20:36 -0700984
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +0000985
Henrique de Moraes Holschuh2c37aa42007-04-24 11:48:16 -0300986Temperature sensors
987-------------------
988
989procfs: /proc/acpi/ibm/thermal
Henrique de Moraes Holschuh7fd40022007-09-25 06:38:03 -0300990sysfs device attributes: (hwmon "thinkpad") temp*_input
Linus Torvalds1da177e2005-04-16 15:20:36 -0700991
Henrique de Moraes Holschuh3d6f99c2007-07-18 23:45:46 -0300992Most ThinkPads include six or more separate temperature sensors but only
993expose the CPU temperature through the standard ACPI methods. This
994feature shows readings from up to eight different sensors on older
995ThinkPads, and up to sixteen different sensors on newer ThinkPads.
Henrique de Moraes Holschuh60eb0b32006-11-24 11:47:08 -0200996
997For example, on the X40, a typical output may be:
998temperatures: 42 42 45 41 36 -128 33 -128
999
Henrique de Moraes Holschuh3d6f99c2007-07-18 23:45:46 -03001000On the T43/p, a typical output may be:
Henrique de Moraes Holschuh60eb0b32006-11-24 11:47:08 -02001001temperatures: 48 48 36 52 38 -128 31 -128 48 52 48 -128 -128 -128 -128 -128
1002
1003The mapping of thermal sensors to physical locations varies depending on
1004system-board model (and thus, on ThinkPad model).
1005
1006http://thinkwiki.org/wiki/Thermal_Sensors is a public wiki page that
1007tries to track down these locations for various models.
1008
1009Most (newer?) models seem to follow this pattern:
1010
10111: CPU
10122: (depends on model)
10133: (depends on model)
10144: GPU
10155: Main battery: main sensor
10166: Bay battery: main sensor
10177: Main battery: secondary sensor
10188: Bay battery: secondary sensor
10199-15: (depends on model)
1020
1021For the R51 (source: Thomas Gruber):
10222: Mini-PCI
10233: Internal HDD
1024
1025For the T43, T43/p (source: Shmidoax/Thinkwiki.org)
1026http://thinkwiki.org/wiki/Thermal_Sensors#ThinkPad_T43.2C_T43p
10272: System board, left side (near PCMCIA slot), reported as HDAPS temp
10283: PCMCIA slot
10299: MCH (northbridge) to DRAM Bus
Henrique de Moraes Holschuhb8b26402007-07-18 23:45:28 -0300103010: Clock-generator, mini-pci card and ICH (southbridge), under Mini-PCI
1031 card, under touchpad
Henrique de Moraes Holschuh60eb0b32006-11-24 11:47:08 -0200103211: Power regulator, underside of system board, below F2 key
1033
Henrique de Moraes Holschuh88679a12006-11-24 11:47:09 -02001034The A31 has a very atypical layout for the thermal sensors
1035(source: Milos Popovic, http://thinkwiki.org/wiki/Thermal_Sensors#ThinkPad_A31)
10361: CPU
10372: Main Battery: main sensor
10383: Power Converter
10394: Bay Battery: main sensor
10405: MCH (northbridge)
10416: PCMCIA/ambient
10427: Main Battery: secondary sensor
10438: Bay Battery: secondary sensor
1044
Henrique de Moraes Holschuh60eb0b32006-11-24 11:47:08 -02001045
Henrique de Moraes Holschuh2c37aa42007-04-24 11:48:16 -03001046Procfs notes:
1047 Readings from sensors that are not available return -128.
1048 No commands can be written to this file.
1049
1050Sysfs notes:
1051 Sensors that are not available return the ENXIO error. This
1052 status may change at runtime, as there are hotplug thermal
1053 sensors, like those inside the batteries and docks.
1054
1055 thinkpad-acpi thermal sensors are reported through the hwmon
1056 subsystem, and follow all of the hwmon guidelines at
1057 Documentation/hwmon.
1058
1059
Matt LaPlanted6bc8ac2006-10-03 22:54:15 +02001060EXPERIMENTAL: Embedded controller register dump -- /proc/acpi/ibm/ecdump
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001061------------------------------------------------------------------------
1062
1063This feature is marked EXPERIMENTAL because the implementation
1064directly accesses hardware registers and may not work as expected. USE
1065WITH CAUTION! To use this feature, you need to supply the
1066experimental=1 parameter when loading the module.
1067
1068This feature dumps the values of 256 embedded controller
1069registers. Values which have changed since the last time the registers
1070were dumped are marked with a star:
1071
Henrique de Moraes Holschuh837ca6d2007-03-23 17:33:54 -03001072[root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001073EC +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f
1074EC 0x00: a7 47 87 01 fe 96 00 08 01 00 cb 00 00 00 40 00
1075EC 0x10: 00 00 ff ff f4 3c 87 09 01 ff 42 01 ff ff 0d 00
1076EC 0x20: 00 00 00 00 00 00 00 00 00 00 00 03 43 00 00 80
1077EC 0x30: 01 07 1a 00 30 04 00 00 *85 00 00 10 00 50 00 00
1078EC 0x40: 00 00 00 00 00 00 14 01 00 04 00 00 00 00 00 00
1079EC 0x50: 00 c0 02 0d 00 01 01 02 02 03 03 03 03 *bc *02 *bc
1080EC 0x60: *02 *bc *02 00 00 00 00 00 00 00 00 00 00 00 00 00
1081EC 0x70: 00 00 00 00 00 12 30 40 *24 *26 *2c *27 *20 80 *1f 80
1082EC 0x80: 00 00 00 06 *37 *0e 03 00 00 00 0e 07 00 00 00 00
1083EC 0x90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1084EC 0xa0: *ff 09 ff 09 ff ff *64 00 *00 *00 *a2 41 *ff *ff *e0 00
1085EC 0xb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1086EC 0xc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1087EC 0xd0: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1088EC 0xe0: 00 00 00 00 00 00 00 00 11 20 49 04 24 06 55 03
1089EC 0xf0: 31 55 48 54 35 38 57 57 08 2f 45 73 07 65 6c 1a
1090
1091This feature can be used to determine the register holding the fan
1092speed on some models. To do that, do the following:
1093
1094 - make sure the battery is fully charged
1095 - make sure the fan is running
1096 - run 'cat /proc/acpi/ibm/ecdump' several times, once per second or so
1097
1098The first step makes sure various charging-related values don't
1099vary. The second ensures that the fan-related values do vary, since
1100the fan speed fluctuates a bit. The third will (hopefully) mark the
1101fan register with a star:
1102
Henrique de Moraes Holschuh837ca6d2007-03-23 17:33:54 -03001103[root@x40 ibm-acpi]# cat /proc/acpi/ibm/ecdump
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001104EC +00 +01 +02 +03 +04 +05 +06 +07 +08 +09 +0a +0b +0c +0d +0e +0f
1105EC 0x00: a7 47 87 01 fe 96 00 08 01 00 cb 00 00 00 40 00
1106EC 0x10: 00 00 ff ff f4 3c 87 09 01 ff 42 01 ff ff 0d 00
1107EC 0x20: 00 00 00 00 00 00 00 00 00 00 00 03 43 00 00 80
1108EC 0x30: 01 07 1a 00 30 04 00 00 85 00 00 10 00 50 00 00
1109EC 0x40: 00 00 00 00 00 00 14 01 00 04 00 00 00 00 00 00
1110EC 0x50: 00 c0 02 0d 00 01 01 02 02 03 03 03 03 bc 02 bc
1111EC 0x60: 02 bc 02 00 00 00 00 00 00 00 00 00 00 00 00 00
1112EC 0x70: 00 00 00 00 00 12 30 40 24 27 2c 27 21 80 1f 80
1113EC 0x80: 00 00 00 06 *be 0d 03 00 00 00 0e 07 00 00 00 00
1114EC 0x90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1115EC 0xa0: ff 09 ff 09 ff ff 64 00 00 00 a2 41 ff ff e0 00
1116EC 0xb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1117EC 0xc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1118EC 0xd0: 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
1119EC 0xe0: 00 00 00 00 00 00 00 00 11 20 49 04 24 06 55 03
1120EC 0xf0: 31 55 48 54 35 38 57 57 08 2f 45 73 07 65 6c 1a
1121
1122Another set of values that varies often is the temperature
1123readings. Since temperatures don't change vary fast, you can take
1124several quick dumps to eliminate them.
1125
1126You can use a similar method to figure out the meaning of other
1127embedded controller registers - e.g. make sure nothing else changes
1128except the charging or discharging battery to determine which
1129registers contain the current battery capacity, etc. If you experiment
1130with this, do send me your results (including some complete dumps with
1131a description of the conditions when they were taken.)
1132
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +00001133
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001134LCD brightness control
1135----------------------
1136
1137procfs: /proc/acpi/ibm/brightness
1138sysfs backlight device "thinkpad_screen"
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001139
1140This feature allows software control of the LCD brightness on ThinkPad
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001141models which don't have a hardware brightness slider.
1142
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +00001143It has some limitations: the LCD backlight cannot be actually turned
1144on or off by this interface, it just controls the backlight brightness
1145level.
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001146
Henrique de Moraes Holschuha3f104c2007-10-30 17:46:20 -02001147On IBM (and some of the earlier Lenovo) ThinkPads, the backlight control
1148has eight brightness levels, ranging from 0 to 7. Some of the levels
1149may not be distinct. Later Lenovo models that implement the ACPI
1150display backlight brightness control methods have 16 levels, ranging
1151from 0 to 15.
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001152
Henrique de Moraes Holschuha3f104c2007-10-30 17:46:20 -02001153There are two interfaces to the firmware for direct brightness control,
1154EC and CMOS. To select which one should be used, use the
1155brightness_mode module parameter: brightness_mode=1 selects EC mode,
1156brightness_mode=2 selects CMOS mode, brightness_mode=3 selects both EC
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -02001157and CMOS. The driver tries to auto-detect which interface to use.
Henrique de Moraes Holschuha3f104c2007-10-30 17:46:20 -02001158
1159When display backlight brightness controls are available through the
1160standard ACPI interface, it is best to use it instead of this direct
Henrique de Moraes Holschuhe11e2112007-10-30 17:46:22 -02001161ThinkPad-specific interface. The driver will disable its native
1162backlight brightness control interface if it detects that the standard
1163ACPI interface is available in the ThinkPad.
Henrique de Moraes Holschuh24d3b772007-07-18 23:45:43 -03001164
Henrique de Moraes Holschuh87cc5372007-10-30 18:02:07 -02001165The brightness_enable module parameter can be used to control whether
1166the LCD brightness control feature will be enabled when available.
Henrique de Moraes Holschuhe11e2112007-10-30 17:46:22 -02001167brightness_enable=0 forces it to be disabled. brightness_enable=1
1168forces it to be enabled when available, even if the standard ACPI
1169interface is also available.
Henrique de Moraes Holschuh87cc5372007-10-30 18:02:07 -02001170
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001171Procfs notes:
1172
1173 The available commands are:
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001174
1175 echo up >/proc/acpi/ibm/brightness
1176 echo down >/proc/acpi/ibm/brightness
1177 echo 'level <level>' >/proc/acpi/ibm/brightness
1178
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001179Sysfs notes:
1180
Henrique de Moraes Holschuha3f104c2007-10-30 17:46:20 -02001181The interface is implemented through the backlight sysfs class, which is
1182poorly documented at this time.
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001183
Henrique de Moraes Holschuha3f104c2007-10-30 17:46:20 -02001184Locate the thinkpad_screen device under /sys/class/backlight, and inside
1185it there will be the following attributes:
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001186
1187 max_brightness:
1188 Reads the maximum brightness the hardware can be set to.
1189 The minimum is always zero.
1190
1191 actual_brightness:
1192 Reads what brightness the screen is set to at this instant.
1193
1194 brightness:
Henrique de Moraes Holschuha3f104c2007-10-30 17:46:20 -02001195 Writes request the driver to change brightness to the
1196 given value. Reads will tell you what brightness the
1197 driver is trying to set the display to when "power" is set
1198 to zero and the display has not been dimmed by a kernel
1199 power management event.
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001200
1201 power:
Henrique de Moraes Holschuha3f104c2007-10-30 17:46:20 -02001202 power management mode, where 0 is "display on", and 1 to 3
1203 will dim the display backlight to brightness level 0
1204 because thinkpad-acpi cannot really turn the backlight
1205 off. Kernel power management events can temporarily
1206 increase the current power management level, i.e. they can
1207 dim the display.
Henrique de Moraes Holschuh7d5a0152007-04-24 11:48:20 -03001208
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001209
Henrique de Moraes Holschuhb5972792008-04-26 01:02:17 -03001210WARNING:
1211
1212 Whatever you do, do NOT ever call thinkpad-acpi backlight-level change
1213 interface and the ACPI-based backlight level change interface
1214 (available on newer BIOSes, and driven by the Linux ACPI video driver)
1215 at the same time. The two will interact in bad ways, do funny things,
1216 and maybe reduce the life of the backlight lamps by needlessly kicking
1217 its level up and down at every change.
1218
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +00001219
Stefan Schmidt24f7ff02006-09-22 12:19:15 +02001220Volume control -- /proc/acpi/ibm/volume
1221---------------------------------------
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001222
1223This feature allows volume control on ThinkPad models which don't have
1224a hardware volume knob. The available commands are:
1225
1226 echo up >/proc/acpi/ibm/volume
1227 echo down >/proc/acpi/ibm/volume
1228 echo mute >/proc/acpi/ibm/volume
1229 echo 'level <level>' >/proc/acpi/ibm/volume
1230
1231The <level> number range is 0 to 15 although not all of them may be
1232distinct. The unmute the volume after the mute command, use either the
1233up or down command (the level command will not unmute the volume).
1234The current volume level and mute state is shown in the file.
1235
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +00001236The ALSA mixer interface to this feature is still missing, but patches
1237to add it exist. That problem should be addressed in the not so
1238distant future.
1239
1240
Henrique de Moraes Holschuhecf2a802007-04-27 22:00:09 -03001241Fan control and monitoring: fan speed, fan enable/disable
1242---------------------------------------------------------
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001243
1244procfs: /proc/acpi/ibm/fan
Henrique de Moraes Holschuh7fd40022007-09-25 06:38:03 -03001245sysfs device attributes: (hwmon "thinkpad") fan1_input, pwm1,
1246 pwm1_enable
1247sysfs hwmon driver attributes: fan_watchdog
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001248
Henrique de Moraes Holschuhecf2a802007-04-27 22:00:09 -03001249NOTE NOTE NOTE: fan control operations are disabled by default for
1250safety reasons. To enable them, the module parameter "fan_control=1"
1251must be given to thinkpad-acpi.
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001252
Henrique de Moraes Holschuha12095c2006-11-24 11:47:13 -02001253This feature attempts to show the current fan speed, control mode and
1254other fan data that might be available. The speed is read directly
1255from the hardware registers of the embedded controller. This is known
Henrique de Moraes Holschuhecf2a802007-04-27 22:00:09 -03001256to work on later R, T, X and Z series ThinkPads but may show a bogus
Henrique de Moraes Holschuha12095c2006-11-24 11:47:13 -02001257value on other models.
1258
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001259Fan levels:
Henrique de Moraes Holschuha12095c2006-11-24 11:47:13 -02001260
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001261Most ThinkPad fans work in "levels" at the firmware interface. Level 0
1262stops the fan. The higher the level, the higher the fan speed, although
1263adjacent levels often map to the same fan speed. 7 is the highest
1264level, where the fan reaches the maximum recommended speed.
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001265
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001266Level "auto" means the EC changes the fan level according to some
1267internal algorithm, usually based on readings from the thermal sensors.
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001268
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001269There is also a "full-speed" level, also known as "disengaged" level.
1270In this level, the EC disables the speed-locked closed-loop fan control,
1271and drives the fan as fast as it can go, which might exceed hardware
1272limits, so use this level with caution.
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001273
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001274The fan usually ramps up or down slowly from one speed to another, and
1275it is normal for the EC to take several seconds to react to fan
1276commands. The full-speed level may take up to two minutes to ramp up to
1277maximum speed, and in some ThinkPads, the tachometer readings go stale
1278while the EC is transitioning to the full-speed level.
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001279
Henrique de Moraes Holschuha12095c2006-11-24 11:47:13 -02001280WARNING WARNING WARNING: do not leave the fan disabled unless you are
1281monitoring all of the temperature sensor readings and you are ready to
1282enable it if necessary to avoid overheating.
1283
1284An enabled fan in level "auto" may stop spinning if the EC decides the
1285ThinkPad is cool enough and doesn't need the extra airflow. This is
Matt LaPlante01dd2fb2007-10-20 01:34:40 +02001286normal, and the EC will spin the fan up if the various thermal readings
Henrique de Moraes Holschuha12095c2006-11-24 11:47:13 -02001287rise too much.
1288
1289On the X40, this seems to depend on the CPU and HDD temperatures.
1290Specifically, the fan is turned on when either the CPU temperature
1291climbs to 56 degrees or the HDD temperature climbs to 46 degrees. The
1292fan is turned off when the CPU temperature drops to 49 degrees and the
1293HDD temperature drops to 41 degrees. These thresholds cannot
1294currently be controlled.
1295
Henrique de Moraes Holschuha12095c2006-11-24 11:47:13 -02001296The ThinkPad's ACPI DSDT code will reprogram the fan on its own when
1297certain conditions are met. It will override any fan programming done
Henrique de Moraes Holschuh643f12d2007-03-29 01:58:43 -03001298through thinkpad-acpi.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001299
Henrique de Moraes Holschuh643f12d2007-03-29 01:58:43 -03001300The thinkpad-acpi kernel driver can be programmed to revert the fan
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001301level to a safe setting if userspace does not issue one of the procfs
1302fan commands: "enable", "disable", "level" or "watchdog", or if there
1303are no writes to pwm1_enable (or to pwm1 *if and only if* pwm1_enable is
1304set to 1, manual mode) within a configurable amount of time of up to
1305120 seconds. This functionality is called fan safety watchdog.
Henrique de Moraes Holschuh38f996e2007-03-23 17:33:59 -03001306
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001307Note that the watchdog timer stops after it enables the fan. It will be
1308rearmed again automatically (using the same interval) when one of the
1309above mentioned fan commands is received. The fan watchdog is,
1310therefore, not suitable to protect against fan mode changes made through
1311means other than the "enable", "disable", and "level" procfs fan
1312commands, or the hwmon fan control sysfs interface.
Henrique de Moraes Holschuh38f996e2007-03-23 17:33:59 -03001313
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001314Procfs notes:
Henrique de Moraes Holschuh38f996e2007-03-23 17:33:59 -03001315
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001316The fan may be enabled or disabled with the following commands:
1317
1318 echo enable >/proc/acpi/ibm/fan
1319 echo disable >/proc/acpi/ibm/fan
1320
1321Placing a fan on level 0 is the same as disabling it. Enabling a fan
1322will try to place it in a safe level if it is too slow or disabled.
1323
1324The fan level can be controlled with the command:
1325
1326 echo 'level <level>' > /proc/acpi/ibm/fan
1327
1328Where <level> is an integer from 0 to 7, or one of the words "auto" or
1329"full-speed" (without the quotes). Not all ThinkPads support the "auto"
1330and "full-speed" levels. The driver accepts "disengaged" as an alias for
1331"full-speed", and reports it as "disengaged" for backwards
1332compatibility.
1333
1334On the X31 and X40 (and ONLY on those models), the fan speed can be
1335controlled to a certain degree. Once the fan is running, it can be
1336forced to run faster or slower with the following command:
1337
1338 echo 'speed <speed>' > /proc/acpi/ibm/fan
1339
1340The sustainable range of fan speeds on the X40 appears to be from about
13413700 to about 7350. Values outside this range either do not have any
1342effect or the fan speed eventually settles somewhere in that range. The
1343fan cannot be stopped or started with this command. This functionality
1344is incomplete, and not available through the sysfs interface.
1345
1346To program the safety watchdog, use the "watchdog" command.
1347
1348 echo 'watchdog <interval in seconds>' > /proc/acpi/ibm/fan
1349
1350If you want to disable the watchdog, use 0 as the interval.
1351
1352Sysfs notes:
1353
1354The sysfs interface follows the hwmon subsystem guidelines for the most
1355part, and the exception is the fan safety watchdog.
1356
Henrique de Moraes Holschuhb39fe582007-04-27 22:00:13 -03001357Writes to any of the sysfs attributes may return the EINVAL error if
1358that operation is not supported in a given ThinkPad or if the parameter
1359is out-of-bounds, and EPERM if it is forbidden. They may also return
1360EINTR (interrupted system call), and EIO (I/O error while trying to talk
1361to the firmware).
1362
1363Features not yet implemented by the driver return ENOSYS.
1364
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001365hwmon device attribute pwm1_enable:
1366 0: PWM offline (fan is set to full-speed mode)
1367 1: Manual PWM control (use pwm1 to set fan level)
1368 2: Hardware PWM control (EC "auto" mode)
1369 3: reserved (Software PWM control, not implemented yet)
1370
Henrique de Moraes Holschuhb39fe582007-04-27 22:00:13 -03001371 Modes 0 and 2 are not supported by all ThinkPads, and the
1372 driver is not always able to detect this. If it does know a
1373 mode is unsupported, it will return -EINVAL.
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001374
1375hwmon device attribute pwm1:
1376 Fan level, scaled from the firmware values of 0-7 to the hwmon
1377 scale of 0-255. 0 means fan stopped, 255 means highest normal
1378 speed (level 7).
1379
1380 This attribute only commands the fan if pmw1_enable is set to 1
1381 (manual PWM control).
1382
1383hwmon device attribute fan1_input:
1384 Fan tachometer reading, in RPM. May go stale on certain
1385 ThinkPads while the EC transitions the PWM to offline mode,
1386 which can take up to two minutes. May return rubbish on older
1387 ThinkPads.
1388
Henrique de Moraes Holschuh7fd40022007-09-25 06:38:03 -03001389hwmon driver attribute fan_watchdog:
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001390 Fan safety watchdog timer interval, in seconds. Minimum is
1391 1 second, maximum is 120 seconds. 0 disables the watchdog.
1392
1393To stop the fan: set pwm1 to zero, and pwm1_enable to 1.
1394
1395To start the fan in a safe mode: set pwm1_enable to 2. If that fails
Henrique de Moraes Holschuhb39fe582007-04-27 22:00:13 -03001396with EINVAL, try to set pwm1_enable to 1 and pwm1 to at least 128 (255
1397would be the safest choice, though).
Henrique de Moraes Holschuhfe98a522007-04-24 11:48:17 -03001398
Henrique de Moraes Holschuh38f996e2007-03-23 17:33:59 -03001399
Jeremy Fitzhardinge9662e082008-08-27 21:04:49 -07001400WAN
1401---
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -03001402
1403procfs: /proc/acpi/ibm/wan
Henrique de Moraes Holschuh0e74dc22008-07-21 09:15:51 -03001404sysfs device attribute: wwan_enable (deprecated)
1405sysfs rfkill class: switch "tpacpi_wwan_sw"
Stefan Schmidt28b779d2006-09-22 12:19:16 +02001406
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +00001407This feature shows the presence and current state of the built-in
1408Wireless WAN device.
1409
1410If the ThinkPad supports it, the WWAN state is stored in NVRAM,
1411so it is kept across reboots and power-off.
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -03001412
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -02001413It was tested on a Lenovo ThinkPad X60. It should probably work on other
1414ThinkPad models which come with this module installed.
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -03001415
1416Procfs notes:
1417
1418If the W-WAN card is installed, the following commands can be used:
Stefan Schmidt28b779d2006-09-22 12:19:16 +02001419
1420 echo enable > /proc/acpi/ibm/wan
1421 echo disable > /proc/acpi/ibm/wan
1422
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -03001423Sysfs notes:
1424
1425 If the W-WAN card is installed, it can be enabled /
Henrique de Moraes Holschuhcc4c24e2007-05-30 20:50:14 -03001426 disabled through the "wwan_enable" thinkpad-acpi device
Henrique de Moraes Holschuhd3a6ade2007-04-27 22:00:17 -03001427 attribute, and its current status can also be queried.
1428
1429 enable:
1430 0: disables WWAN card / WWAN card is disabled
1431 1: enables WWAN card / WWAN card is enabled.
1432
Henrique de Moraes Holschuh0e74dc22008-07-21 09:15:51 -03001433 Note: this interface has been superseded by the generic rfkill
1434 class. It has been deprecated, and it will be removed in year
1435 2010.
1436
1437 rfkill controller switch "tpacpi_wwan_sw": refer to
1438 Documentation/rfkill.txt for details.
Linus Torvalds1da177e2005-04-16 15:20:36 -07001439
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +00001440
Henrique de Moraes Holschuh0045c0a2009-01-11 03:01:03 -02001441EXPERIMENTAL: UWB
1442-----------------
1443
1444This feature is marked EXPERIMENTAL because it has not been extensively
1445tested and validated in various ThinkPad models yet. The feature may not
1446work as expected. USE WITH CAUTION! To use this feature, you need to supply
1447the experimental=1 parameter when loading the module.
1448
1449sysfs rfkill class: switch "tpacpi_uwb_sw"
1450
1451This feature exports an rfkill controller for the UWB device, if one is
1452present and enabled in the BIOS.
1453
1454Sysfs notes:
1455
1456 rfkill controller switch "tpacpi_uwb_sw": refer to
1457 Documentation/rfkill.txt for details.
1458
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +00001459
Borislav Deianov78f81cc2005-08-17 00:00:00 -04001460Multiple Commands, Module Parameters
1461------------------------------------
Linus Torvalds1da177e2005-04-16 15:20:36 -07001462
1463Multiple commands can be written to the proc files in one shot by
1464separating them with commas, for example:
1465
1466 echo enable,0xffff > /proc/acpi/ibm/hotkey
1467 echo lcd_disable,crt_enable > /proc/acpi/ibm/video
1468
Henrique de Moraes Holschuh643f12d2007-03-29 01:58:43 -03001469Commands can also be specified when loading the thinkpad-acpi module,
1470for example:
Linus Torvalds1da177e2005-04-16 15:20:36 -07001471
Henrique de Moraes Holschuh643f12d2007-03-29 01:58:43 -03001472 modprobe thinkpad_acpi hotkey=enable,0xffff video=auto_disable
Linus Torvalds1da177e2005-04-16 15:20:36 -07001473
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +00001474
Henrique de Moraes Holschuh132ce092007-04-21 11:08:30 -03001475Enabling debugging output
1476-------------------------
1477
Simon Arlott0f035b82007-10-20 01:30:25 +02001478The module takes a debug parameter which can be used to selectively
Henrique de Moraes Holschuh132ce092007-04-21 11:08:30 -03001479enable various classes of debugging output, for example:
1480
Henrique de Moraes Holschuh5f249272008-02-16 02:17:51 -02001481 modprobe thinkpad_acpi debug=0xffff
Henrique de Moraes Holschuh132ce092007-04-21 11:08:30 -03001482
1483will enable all debugging output classes. It takes a bitmask, so
1484to enable more than one output class, just add their values.
1485
Henrique de Moraes Holschuhfe08bc42007-04-21 11:08:32 -03001486 Debug bitmask Description
1487 0x0001 Initialization and probing
1488 0x0002 Removal
1489
Henrique de Moraes Holschuh132ce092007-04-21 11:08:30 -03001490There is also a kernel build option to enable more debugging
1491information, which may be necessary to debug driver problems.
Henrique de Moraes Holschuh0dcef772007-04-21 11:08:34 -03001492
Henrique de Moraes Holschuh176750d2007-04-24 11:48:13 -03001493The level of debugging information output by the driver can be changed
1494at runtime through sysfs, using the driver attribute debug_level. The
1495attribute takes the same bitmask as the debug module parameter above.
1496
Henrique de Moraes Holschuh078ac192009-04-04 04:25:44 +00001497
Henrique de Moraes Holschuh0dcef772007-04-21 11:08:34 -03001498Force loading of module
1499-----------------------
1500
1501If thinkpad-acpi refuses to detect your ThinkPad, you can try to specify
1502the module parameter force_load=1. Regardless of whether this works or
1503not, please contact ibm-acpi-devel@lists.sourceforge.net with a report.
Henrique de Moraes Holschuh176750d2007-04-24 11:48:13 -03001504
1505
1506Sysfs interface changelog:
1507
15080x000100: Initial sysfs support, as a single platform driver and
1509 device.
Henrique de Moraes Holschuh94b08712007-07-18 23:45:32 -030015100x000200: Hot key support for 32 hot keys, and radio slider switch
1511 support.
Henrique de Moraes Holschuh741553c2007-07-18 23:45:39 -030015120x010000: Hot keys are now handled by default over the input
1513 layer, the radio switch generates input event EV_RADIO,
1514 and the driver enables hot key handling by default in
1515 the firmware.
Henrique de Moraes Holschuh7fd40022007-09-25 06:38:03 -03001516
15170x020000: ABI fix: added a separate hwmon platform device and
1518 driver, which must be located by name (thinkpad)
1519 and the hwmon class for libsensors4 (lm-sensors 3)
1520 compatibility. Moved all hwmon attributes to this
1521 new platform device.
Henrique de Moraes Holschuh01e88f22008-01-08 13:02:41 -02001522
15230x020100: Marker for thinkpad-acpi with hot key NVRAM polling
1524 support. If you must, use it to know you should not
Frederik Schwarzer0211a9c2008-12-29 22:14:56 +01001525 start a userspace NVRAM poller (allows to detect when
Henrique de Moraes Holschuh01e88f22008-01-08 13:02:41 -02001526 NVRAM is compiled out by the user because it is
1527 unneeded/undesired in the first place).
15280x020101: Marker for thinkpad-acpi with hot key NVRAM polling
Henrique de Moraes Holschuhd0788cf2008-02-16 02:17:56 -02001529 and proper hotkey_mask semantics (version 8 of the
Henrique de Moraes Holschuh01e88f22008-01-08 13:02:41 -02001530 NVRAM polling patch). Some development snapshots of
1531 0.18 had an earlier version that did strange things
1532 to hotkey_mask.
Henrique de Moraes Holschuh50ebec02008-01-08 13:02:55 -02001533
15340x020200: Add poll()/select() support to the following attributes:
1535 hotkey_radio_sw, wakeup_hotunplug_complete, wakeup_reason