1.\" Copyright (c) 2005 Christian Brueffer 2.\" Copyright (c) 2005 Markus Brueffer 3.\" All rights reserved. 4.\" 5.\" Redistribution and use in source and binary forms, with or without 6.\" modification, are permitted provided that the following conditions 7.\" are met: 8.\" 1. Redistributions of source code must retain the above copyright 9.\" notice, this list of conditions and the following disclaimer. 10.\" 2. Redistributions in binary form must reproduce the above copyright 11.\" notice, this list of conditions and the following disclaimer in the 12.\" documentation and/or other materials provided with the distribution. 13.\" 14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24.\" SUCH DAMAGE. 25.\" 26.\" $FreeBSD$ 27.\" $DragonFly: src/share/man/man4/acpi_thinkpad.4,v 1.4 2008/08/28 20:30:46 swildner Exp $ 28.\" 29.Dd August 28, 2008 30.Dt ACPI_THINKPAD 4 31.Os 32.Sh NAME 33.Nm acpi_thinkpad 34.Nd "ACPI extras driver for IBM/Lenovo Thinkpad laptops" 35.Sh SYNOPSIS 36To compile this driver into the kernel, 37place the following line in your 38kernel configuration file: 39.Bd -ragged -offset indent 40.Cd "device acpi_thinkpad" 41.Ed 42.Pp 43Alternatively, to load the driver as a 44module at boot time, place the following line in 45.Xr loader.conf 5 : 46.Bd -literal -offset indent 47acpi_thinkpad_load="YES" 48.Ed 49.Sh DESCRIPTION 50The 51.Nm 52driver provides support for hotkeys and other components of IBM/Lenovo 53Thinkpad laptops. 54The main purpose of this driver is to provide an interface, 55accessible via 56.Xr sysctl 8 , 57.\" and 58.\" .Xr devd 8 , 59through which applications can determine the status of 60various laptop components. 61.\" .Pp 62.\" While the 63.\" .Xr sysctl 8 64.\" interface is enabled automatically after loading the driver, the 65.\" .Xr devd 8 66.\" interface has to be enabled explicitly, as it may alter the default action of 67.\" certain keys. 68.\" This is done by setting the 69.\" .Va events 70.\" sysctl as described below. 71.\" Specifying which keys should generate events is done by setting a bitmask, 72.\" whereas each bit represents one key or key combination. 73.\" This bitmask, accessible via the 74.\" .Va eventmask 75.\" sysctl, is set to 76.\" .Va availmask 77.\" by default, a value representing all possible keypress events on the specific 78.\" ThinkPad model. 79.\" .Ss Xr devd 8 Ss Events 80.\" Hotkey events received by 81.\" .Xr devd 8 82.\" provide the following information: 83.\" .Pp 84.\" .Bl -tag -width "subsystem" -offset indent -compact 85.\" .It system 86.\" .Qq Li ACPI 87.\" .It subsystem 88.\" .Qq Li IBM 89.\" .It type 90.\" The source of the event in the ACPI namespace. 91.\" The value depends on the model. 92.\" .It notify 93.\" Event code (see below). 94.\" .El 95.\" .Pp 96.\" Depending on the ThinkPad model, event codes may vary. 97.\" On a ThinkPad T41p these are as follows: 98.\" .Pp 99.\" .Bl -tag -width "subsystem" -offset indent -compact 100.\" .It Li 0x01 101.\" Fn + F1 102.\" .It Li 0x02 103.\" Fn + F2 104.\" .It Li 0x03 105.\" Fn + F3 (LCD backlight) 106.\" .It Li 0x04 107.\" Fn + F4 (Suspend to RAM) 108.\" .It Li 0x05 109.\" Fn + F5 (Bluetooth) 110.\" .It Li 0x06 111.\" Fn + F6 112.\" .It Li 0x07 113.\" Fn + F7 (Screen expand) 114.\" .It Li 0x08 115.\" Fn + F8 116.\" .It Li 0x09 117.\" Fn + F9 118.\" .It Li 0x0a 119.\" Fn + F10 120.\" .It Li 0x0b 121.\" Fn + F11 122.\" .It Li 0x0c 123.\" Fn + F12 (Suspend to disk) 124.\" .It Li 0x0d 125.\" Fn + Backspace 126.\" .It Li 0x0e 127.\" Fn + Insert 128.\" .It Li 0x0f 129.\" Fn + Delete 130.\" .It Li 0x10 131.\" Fn + Home (Brightness up) 132.\" .It Li 0x11 133.\" Fn + End (Brightness down) 134.\" .It Li 0x12 135.\" Fn + PageUp (ThinkLight) 136.\" .It Li 0x13 137.\" Fn + PageDown 138.\" .It Li 0x14 139.\" Fn + Space (Zoom) 140.\" .It Li 0x15 141.\" Volume Up 142.\" .It Li 0x16 143.\" Volume Down 144.\" .It Li 0x17 145.\" Mute 146.\" .It Li 0x18 147.\" Access IBM Button 148.\" .El 149.\" .Ss Xr led 4 Ss Interface 150.\" The 151.\" .Nm 152.\" driver provides a 153.\" .Xr led 4 154.\" interface for the ThinkLight. 155.\" The ThinkLight can be made to blink by writing 156.\" .Tn ASCII 157.\" strings to the 158.\" .Pa /dev/led/thinklight 159.\" device. 160.Sh SYSCTL VARIABLES 161The following sysctls are currently implemented: 162.Bl -tag -width indent 163.It Va dev.acpi_thinkpad.0.initialmask 164(read-only) 165Bitmask of ACPI events before the 166.Nm 167driver was loaded. 168.It Va dev.acpi_thinkpad.0.availmask 169(read-only) 170Bitmask of all supported ACPI events. 171.It Va dev.acpi_thinkpad.0.events 172Enable ACPI events and set the 173.Va eventmask 174to 175.Va availmask . 176Without the 177.Nm 178driver being loaded, only the Fn+F4 button generates an ACPI event. 179.It Va dev.acpi_thinkpad.0.eventmask 180Sets the ACPI events which are reported to 181.Xr devd 8 182(not yet available in 183.Dx ) . 184Fn+F3, Fn+F4 and Fn+F12 always generate ACPI events, regardless which value 185.Va eventmask 186has. 187Depending on the ThinkPad model, the meaning of different bits in the 188.Va eventmask 189may vary. 190On a ThinkPad T41p this is a bitwise OR of the following: 191.Pp 192.Bl -tag -width indent-two -compact 193.It Li 1 194Fn + F1 195.It Li 2 196Fn + F2 197.It Li 4 198Fn + F3 (LCD backlight) 199.It Li 8 200Fn + F4 (Suspend to RAM) 201.It Li 16 202Fn + F5 (Bluetooth) 203.It Li 32 204Fn + F6 205.It Li 64 206Fn + F7 (Screen expand) 207.It Li 128 208Fn + F8 209.It Li 256 210Fn + F9 211.It Li 512 212Fn + F10 213.It Li 1024 214Fn + F11 215.It Li 2048 216Fn + F12 (Suspend to disk) 217.It Li 4096 218Fn + Backspace 219.It Li 8192 220Fn + Insert 221.It Li 16384 222Fn + Delete 223.It Li 32768 224Fn + Home (Brightness up) 225.It Li 65536 226Fn + End (Brightness down) 227.It Li 131072 228Fn + PageUp (ThinkLight) 229.It Li 262144 230Fn + PageDown 231.It Li 524288 232Fn + Space (Zoom) 233.It Li 1048576 234Volume Up 235.It Li 2097152 236Volume Down 237.It Li 4194304 238Mute 239.It Li 8388608 240Access IBM Button 241.El 242.It Va dev.acpi_thinkpad.0.hotkey 243(read-only) 244Status of several buttons. 245Every time a button is pressed, the respecting bit is toggled. 246It is a bitwise OR of the following: 247.Pp 248.Bl -tag -width indent-two -compact 249.It Li 1 250Home Button 251.It Li 2 252Search Button 253.It Li 4 254Mail Button 255.It Li 8 256Access IBM Button 257.It Li 16 258Zoom 259.It Li 32 260Wireless LAN Button 261.It Li 64 262Video Button 263.It Li 128 264Hibernate Button 265.It Li 256 266ThinkLight Button 267.It Li 512 268Screen Expand 269.It Li 1024 270Brightness Up/Down Button 271.It Li 2048 272Volume Up/Down/Mute Button 273.El 274.It Va dev.acpi_thinkpad.0.lcd_brightness 275Current brightness level of the display. 276.It Va dev.acpi_thinkpad.0.volume 277Speaker volume. 278.It Va dev.acpi_thinkpad.0.mute 279Indicates, whether the speakers are muted or not. 280.It Va dev.acpi_thinkpad.0.thinklight 281Indicates, whether the ThinkLight keyboard light is activated or not. 282.It Va dev.acpi_thinkpad.0.bluetooth 283Toggle Bluetooth chip activity. 284.It Va dev.acpi_thinkpad.0.wlan 285(read-only) 286Indicates whether the WLAN chip is active or not. 287.It Va dev.acpi_thinkpad.0.fan 288Indicates whether the fan is in automatic (1) or manual (0) mode. 289Default is automatic mode. 290This sysctl should be used with extreme precaution, since disabling automatic 291fan control might overheat the ThinkPad and lead to permanent damage if the 292.Va fan_level 293is not set accordingly. 294.It Va dev.acpi_thinkpad.0.fan_level 295Indicates at what speed the fan should run when being in manual mode. 296Values are ranging from 0 (off) to 7 (max). 297The resulting speed differs from model to model. 298On a T41p this is as follows: 299.Pp 300.Bl -tag -width indent-two -compact 301.It Li 0 302off 303.It Li 1, 2 304~3000 RPM 305.It Li 3, 4, 5 306~3600 RPM 307.It Li 6, 7 308~4300 RPM 309.El 310.It Va hw.sensors.acpi_thinkpad0.tempX 311Show the readings of up to eight different temperature sensors. 312Most ThinkPads include six or more temperature sensors but 313only expose the CPU temperature through 314.Xr acpi_thermal 4 . 315Some ThinkPads have the below sensor layout which might vary depending on the 316specific model: 317.Pp 318.Bl -enum -compact 319.It 320CPU 321.It 322Mini PCI Module 323.It 324HDD 325.It 326GPU 327.It 328Built-in battery 329.It 330UltraBay battery 331.It 332Built-in battery 333.It 334UltraBay battery 335.El 336.It Va hw.sensors.acpi_thinkpad0.fan0 337Fan speed in rounds per minute. 338.\" A few older ThinkPads report the fan speed in levels ranging from 0 (off) 339.\" to 7 (max). 340.El 341.Pp 342Defaults for these sysctls can be set in 343.Xr sysctl.conf 5 . 344Sensors can be monitored by 345.Xr sensorsd 8 . 346.\" .Sh FILES 347.\" .Bl -tag -width ".Pa /dev/led/thinklight" 348.\" .It Pa /dev/led/thinklight 349.\" ThinkLight 350.\" .Xr led 4 351.\" device node 352.\" .El 353.\" .Sh EXAMPLES 354.\" The following can be added to 355.\" .Xr devd.conf 5 356.\" in order to pass button events to a 357.\" .Pa /usr/local/sbin/acpi_oem_exec.sh 358.\" script: 359.\" .Bd -literal -offset indent 360.\" notify 10 { 361.\" match "system" "ACPI"; 362.\" match "subsystem" "IBM"; 363.\" action "/usr/local/sbin/acpi_oem_exec.sh $notify ibm"; 364.\" }; 365.\" .Ed 366.\" .Pp 367.\" A possible 368.\" .Pa /usr/local/sbin/acpi_oem_exec.sh 369.\" script might look like: 370.\" .Bd -literal -offset indent 371.\" #!/bin/sh 372.\" # 373.\" if [ "$1" = "" -o "$2" = "" ] 374.\" then 375.\" echo "usage: $0 notify oem_name" 376.\" exit 1 377.\" fi 378.\" NOTIFY=`echo $1` 379.\" LOGGER="logger" 380.\" CALC="bc" 381.\" BC_PRECOMMANDS="scale=2" 382.\" ECHO="echo" 383.\" CUT="cut" 384.\" MAX_LCD_BRIGHTNESS=7 385.\" MAX_VOLUME=14 386.\" OEM=$2 387.\" DISPLAY_PIPE=/tmp/acpi_${OEM}_display 388.\" 389.\" case ${NOTIFY} in 390.\" 0x05) 391.\" LEVEL=`sysctl -n dev.acpi_${OEM}.0.bluetooth` 392.\" if [ "$LEVEL" = "1" ] 393.\" then 394.\" sysctl dev.acpi_${OEM}.0.bluetooth=0 395.\" MESSAGE="bluetooth disabled" 396.\" else 397.\" sysctl dev.acpi_${OEM}.0.bluetooth=1 398.\" MESSAGE="bluetooth enabled" 399.\" fi 400.\" ;; 401.\" 0x10|0x11) 402.\" LEVEL=`sysctl -n dev.acpi_${OEM}.0.lcd_brightness` 403.\" PERCENT=`${ECHO} "${BC_PRECOMMANDS} ; \\ 404.\" ${LEVEL} / ${MAX_LCD_BRIGHTNESS} * 100" |\\ 405.\" ${CALC} | ${CUT} -d . -f 1` 406.\" MESSAGE="brightness level ${PERCENT}%" 407.\" ;; 408.\" 0x12) 409.\" LEVEL=`sysctl -n dev.acpi_${OEM}.0.thinklight` 410.\" if [ "$LEVEL" = "1" ] 411.\" then 412.\" MESSAGE="thinklight enabled" 413.\" else 414.\" MESSAGE="thinklight disabled" 415.\" fi 416.\" ;; 417.\" 0x15|0x16) 418.\" LEVEL=`sysctl -n dev.acpi_${OEM}.0.volume` 419.\" PERCENT=`${ECHO} "${BC_PRECOMMANDS} ; \\ 420.\" ${LEVEL} / ${MAX_VOLUME} * 100" | \\ 421.\" ${CALC} | ${CUT} -d . -f 1` 422.\" MESSAGE="volume level ${PERCENT}%" 423.\" ;; 424.\" 0x17) 425.\" LEVEL=`sysctl -n dev.acpi_${OEM}.0.mute` 426.\" if [ "$LEVEL" = "1" ] 427.\" then 428.\" MESSAGE="volume muted" 429.\" else 430.\" MESSAGE="volume unmuted" 431.\" fi 432.\" ;; 433.\" *) 434.\" ;; 435.\" esac 436.\" ${LOGGER} ${MESSAGE} 437.\" if [ -p ${DISPLAY_PIPE} ] 438.\" then 439.\" ${ECHO} ${MESSAGE} >> ${DISPLAY_PIPE} & 440.\" fi 441.\" exit 0 442.\" .Ed 443.Sh SEE ALSO 444.Xr acpi 4 , 445.\" .Xr led 4 , 446.Xr sysctl.conf 5 , 447.\" .Xr devd 8 , 448.Xr sensorsd 8 , 449.Xr sysctl 8 450.Sh HISTORY 451The 452.Nm 453device driver first appeared in 454.Fx 6.0 455and was imported into 456.Dx 2.1 . 457.Sh AUTHORS 458.An -nosplit 459The 460.Nm 461driver was written by 462.An Takanori Watanabe Aq takawata@FreeBSD.org 463and later mostly rewritten by 464.An Markus Brueffer Aq markus@FreeBSD.org . 465This manual page was written by 466.An Christian Brueffer Aq brueffer@FreeBSD.org 467and 468.An Markus Brueffer Aq markus@FreeBSD.org . 469