Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ACPI_IBM(4)		    Kernel Interfaces Manual		   ACPI_IBM(4)

NAME
       acpi_ibm	-- ThinkPad ACPI extras	driver

SYNOPSIS
       To  compile  this  driver  into the kernel, place the following line in
       your kernel configuration file:

	     device acpi_ibm

       Alternatively, to load the driver as a module at	boot time,  place  the
       following line in loader.conf(5):

	     acpi_ibm_load="YES"

DESCRIPTION
       The  acpi_ibm  driver provides support for hotkeys and other components
       of ThinkPad laptops.  The main purpose of this driver is	to provide  an
       interface, accessible via sysctl(8) and devd(8),	through	which applica-
       tions can determine the status of various laptop	components.

       While  the  sysctl(8)  interface	is enabled automatically after loading
       the driver, the devd(8) interface has to	be enabled explicitly,	as  it
       may  alter the default action of	certain	keys.  This is done by setting
       the events sysctl as described below.   Specifying  which  keys	should
       generate	 events	 is done by setting a bitmask, whereas each bit	repre-
       sents one key or	key combination.  This	bitmask,  accessible  via  the
       eventmask  sysctl, is set to availmask by default, a value representing
       all possible keypress events on the specific ThinkPad model.

   devd(8) Events
       Hotkey events received by devd(8) provide the following information:

	     system	"ACPI"
	     subsystem	"IBM"
	     type	The source of the event	in the	ACPI  namespace.   The
			value depends on the model.
	     notify	Event code (see	below).

       Depending  on  the ThinkPad model, event	codes may vary.	 On a ThinkPad
       T41p these are as follows:

	     0x01	Fn + F1
	     0x02	Fn + F2
	     0x03	Fn + F3	(LCD backlight)
	     0x04	Fn + F4	(Suspend to RAM)
	     0x05	Fn + F5	(Bluetooth)
	     0x06	Fn + F6
	     0x07	Fn + F7	(Screen	expand)
	     0x08	Fn + F8
	     0x09	Fn + F9
	     0x0a	Fn + F10
	     0x0b	Fn + F11
	     0x0c	Fn + F12 (Suspend to disk)
	     0x0d	Fn + Backspace
	     0x0e	Fn + Insert
	     0x0f	Fn + Delete
	     0x10	Fn + Home (Brightness up)
	     0x11	Fn + End (Brightness down)
	     0x12	Fn + PageUp (ThinkLight)
	     0x13	Fn + PageDown
	     0x14	Fn + Space (Zoom)
	     0x15	Volume Up
	     0x16	Volume Down
	     0x17	Mute
	     0x18	Access IBM Button

   led(4) Interface
       The acpi_ibm driver provides a led(4)  interface	 for  the  ThinkLight.
       The  ThinkLight	can  be	 made to blink by writing ASCII	strings	to the
       /dev/led/thinklight device.

SYSCTL VARIABLES
       The following sysctls are currently implemented:

       dev.acpi_ibm.0.initialmask
	       (read-only) Bitmask of ACPI events before the  acpi_ibm	driver
	       was loaded.

       dev.acpi_ibm.0.availmask
	       (read-only) Bitmask of all supported ACPI events.

       dev.acpi_ibm.0.events
	       Enable ACPI events and set the eventmask	to availmask.  Without
	       the  acpi_ibm driver being loaded, only the Fn+F4 button	gener-
	       ates an ACPI event.

       dev.acpi_ibm.0.eventmask
	       Sets the	ACPI events which are  reported	 to  devd(8).	Fn+F3,
	       Fn+F4  and Fn+F12 always	generate ACPI events, regardless which
	       value eventmask has.  Depending	on  the	 ThinkPad  model,  the
	       meaning	of  different  bits  in	 the eventmask may vary.  On a
	       ThinkPad	T41p this is a bitwise OR of the following:

	       1	   Fn +	F1
	       2	   Fn +	F2
	       4	   Fn +	F3 (LCD	backlight)
	       8	   Fn +	F4 (Suspend to RAM)
	       16	   Fn +	F5 (Bluetooth)
	       32	   Fn +	F6
	       64	   Fn +	F7 (Screen expand)
	       128	   Fn +	F8
	       256	   Fn +	F9
	       512	   Fn +	F10
	       1024	   Fn +	F11
	       2048	   Fn +	F12 (Suspend to	disk)
	       4096	   Fn +	Backspace
	       8192	   Fn +	Insert
	       16384	   Fn +	Delete
	       32768	   Fn +	Home (Brightness up)
	       65536	   Fn +	End (Brightness	down)
	       131072	   Fn +	PageUp (ThinkLight)
	       262144	   Fn +	PageDown
	       524288	   Fn +	Space (Zoom)
	       1048576	   Volume Up
	       2097152	   Volume Down
	       4194304	   Mute
	       8388608	   Access IBM Button

       dev.acpi_ibm.0.hotkey
	       (read-only) Status of several buttons.  Every time a button  is
	       pressed,	 the respecting	bit is toggled.	 It is a bitwise OR of
	       the following:

	       1	   Home	Button
	       2	   Search Button
	       4	   Mail	Button
	       8	   Access IBM Button
	       16	   Zoom
	       32	   Wireless LAN	Button
	       64	   Video Button
	       128	   Hibernate Button
	       256	   ThinkLight Button
	       512	   Screen Expand
	       1024	   Brightness Up/Down Button
	       2048	   Volume Up/Down/Mute Button

       dev.acpi_ibm.0.lcd_brightness
	       Current brightness level	of the display.

       dev.acpi_ibm.0.volume
	       Speaker volume.

       dev.acpi_ibm.0.mute
	       Indicates, whether the speakers are muted or not.

       dev.acpi_ibm.0.mic_mute
	       Indicates, whether the microphone led (present on  some	model)
	       is on or	not.  Note that	this does not mean that	the microphone
	       input is	muted.

       dev.acpi_ibm.0.thinklight
	       Indicates,  whether  the	ThinkLight keyboard light is activated
	       or not.

       dev.acpi_ibm.0.bluetooth
	       Toggle Bluetooth	chip activity.

       dev.acpi_ibm.0.wlan
	       (read-only) Indicates whether the WLAN chip is active or	not.

       dev.acpi_ibm.0.fan
	       Indicates whether the fan is in automatic  (1)  or  manual  (0)
	       mode.   Default	is automatic mode.  This sysctl	should be used
	       with extreme precaution,	since disabling	automatic fan  control
	       might overheat the ThinkPad and lead to permanent damage	if the
	       fan_level is not	set accordingly.

       dev.acpi_ibm.0.fan_level
	       Indicates at what speed the fan should run when being in	manual
	       mode.  Valid values range from 0	(off) to 7 (max) and 8.	 Level
	       8 is used by the	driver to set the fan in unthrottled mode.  In
	       this mode, the fan is set to spin freely	and will quickly reach
	       a very high speed.  Use this mode only if absolutely necessary,
	       e.g., if	the system has reached its critical temperature	and it
	       is  about to shut down.	The resulting speed differs from model
	       to model.  On a T41p this is as follows:

	       0	   off
	       1, 2	   ~3000 RPM
	       3, 4, 5	   ~3600 RPM
	       6, 7	   ~4300 RPM
	       8	   ~6400 RPM (Full-speed, unthrottled)

       dev.acpi_ibm.0.fan_speed
	       (read-only) Fan speed  in  rounds  per  minute.	 A  few	 older
	       ThinkPads  report  the fan speed	in levels ranging from 0 (off)
	       to 7 (max).

       dev.acpi_ibm.0.thermal
	       (read-only) Shows the readings of up to eight different temper-
	       ature sensors.  Most ThinkPads include six or more  temperature
	       sensors	 but   only   expose   the   CPU  temperature  through
	       acpi_thermal(4).	 Some ThinkPads	have the below	sensor	layout
	       which might vary	depending on the specific model:

	       1.   CPU
	       2.   Mini PCI Module
	       3.   HDD
	       4.   GPU
	       5.   Built-in battery
	       6.   UltraBay battery
	       7.   Built-in battery
	       8.   UltraBay battery

       dev.acpi_ibm.0.handlerevents
	       devd(8)	events	handled	 by  acpi_ibm when events is set to 1.
	       Events are specified as a whitespace-separated  list  of	 event
	       code in hexadecimal or decimal form.  Note that the event maybe
	       handled	twice  (e.g., Brightness up/down) if ACPI BIOS already
	       handled the event.

       Defaults	for these sysctls can be set in	sysctl.conf(5).

FILES
       /dev/led/thinklight  ThinkLight led(4) device node

EXAMPLES
       The following can be added to devd.conf(5)  in  order  to  pass	button
       events to a /usr/local/sbin/acpi_oem_exec.sh script:

	     notify 10 {
		     match "system"	     "ACPI";
		     match "subsystem"	     "IBM";
		     action "/usr/local/sbin/acpi_oem_exec.sh $notify ibm";
	     };

       A possible /usr/local/sbin/acpi_oem_exec.sh script might	look like:

	     #!/bin/sh
	     #
	     if	[ "$1" = "" -o "$2" = "" ]
	     then
		     echo "usage: $0 notify oem_name"
		     exit 1
	     fi
	     NOTIFY=`echo $1`
	     LOGGER="logger"
	     CALC="bc"
	     BC_PRECOMMANDS="scale=2"
	     ECHO="echo"
	     CUT="cut"
	     MAX_LCD_BRIGHTNESS=7
	     MAX_VOLUME=14
	     OEM=$2
	     DISPLAY_PIPE=/tmp/acpi_${OEM}_display

	     case ${NOTIFY} in
		     0x05)
			     LEVEL=`sysctl -n dev.acpi_${OEM}.0.bluetooth`
			     if	[ "$LEVEL" = "1" ]
			     then
				     sysctl dev.acpi_${OEM}.0.bluetooth=0
				     MESSAGE="bluetooth	disabled"
			     else
				     sysctl dev.acpi_${OEM}.0.bluetooth=1
				     MESSAGE="bluetooth	enabled"
			     fi
			     ;;
		     0x10|0x11)
			     LEVEL=`sysctl -n dev.acpi_${OEM}.0.lcd_brightness`
			     PERCENT=`${ECHO} "${BC_PRECOMMANDS} ; \
				      ${LEVEL} / ${MAX_LCD_BRIGHTNESS} * 100" |\
				      ${CALC} |	${CUT} -d . -f 1`
			     MESSAGE="brightness level ${PERCENT}%"
			     ;;
		     0x12)
			     LEVEL=`sysctl -n dev.acpi_${OEM}.0.thinklight`
			     if	[ "$LEVEL" = "1" ]
			     then
				     MESSAGE="thinklight enabled"
			     else
				     MESSAGE="thinklight disabled"
			     fi
			     ;;
		     0x15|0x16)
			     LEVEL=`sysctl -n dev.acpi_${OEM}.0.volume`
			     PERCENT=`${ECHO} "${BC_PRECOMMANDS} ; \
				     ${LEVEL} /	${MAX_VOLUME} *	100" | \
				      ${CALC} |	${CUT} -d . -f 1`
			     MESSAGE="volume level ${PERCENT}%"
			     ;;
		     0x17)
			     LEVEL=`sysctl -n dev.acpi_${OEM}.0.mute`
			     if	[ "$LEVEL" = "1" ]
			     then
				     MESSAGE="volume muted"
			     else
				     MESSAGE="volume unmuted"
			     fi
			     ;;
		     0x1b)
			     LEVEL=`sysctl -n dev.acpi_ibm.0.mic_led`
			     if	[ $LEVEL -eq 0 ]; then
				     sysctl dev.acpi_ibm.0.mic_led=1
				     mixer rec.volume=0
			     fi
			     if	[ $LEVEL -eq 1 ]; then
				     sysctl dev.acpi_ibm.0.mic_led=0
				     mixer rec.volume=30%
			     fi
			     ;;
		     *)
			     ;;
	     esac
	     ${LOGGER} ${MESSAGE}
	     if	[ -p ${DISPLAY_PIPE} ]
	     then
		     ${ECHO} ${MESSAGE}	>> ${DISPLAY_PIPE} &
	     fi
	     exit 0

       The  following  example	specify	that event code	0x04 (Suspend to RAM),
       0x10  (Brightness  up)  and  0x11  (Brightness  down)  are  handled  by
       acpi_ibm.

	     sysctl dev.acpi_ibm.0.handlerevents='0x04 0x10 0x11'

       in sysctl.conf(5):

	     dev.acpi_ibm.0.handlerevents=0x04\	0x10\ 0x11

SEE ALSO
       acpi(4),	led(4),	sysctl.conf(5),	devd(8), sysctl(8)

HISTORY
       The acpi_ibm device driver first	appeared in FreeBSD 6.0.

AUTHORS
       The    acpi_ibm	  driver    was	   written    by   Takanori   Watanabe
       <takawata@FreeBSD.org> and later	mostly rewritten  by  Markus  Brueffer
       <markus@FreeBSD.org>.   This  manual  page  was	written	 by  Christian
       Brueffer	     <brueffer@FreeBSD.org>	 and	  Markus      Brueffer
       <markus@FreeBSD.org>.

FreeBSD	13.2			March 13, 2022			   ACPI_IBM(4)

NAME | SYNOPSIS | DESCRIPTION | SYSCTL VARIABLES | FILES | EXAMPLES | SEE ALSO | HISTORY | AUTHORS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=acpi_ibm&sektion=4&manpath=FreeBSD+14.0-RELEASE+and+Ports>

home | help