Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 32fb6c17 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6: (140 commits)
  ACPI: processor: use .notify method instead of installing handler directly
  ACPI: button: use .notify method instead of installing handler directly
  ACPI: support acpi_device_ops .notify methods
  toshiba-acpi: remove MAINTAINERS entry
  ACPI: battery: asynchronous init
  acer-wmi: Update copyright notice & documentation
  acer-wmi: Cleanup the failure cleanup handling
  acer-wmi: Blacklist Acer Aspire One
  video: build fix
  thinkpad-acpi: rework brightness support
  thinkpad-acpi: enhanced debugging messages for the fan subdriver
  thinkpad-acpi: enhanced debugging messages for the hotkey subdriver
  thinkpad-acpi: enhanced debugging messages for rfkill subdrivers
  thinkpad-acpi: restrict access to some firmware LEDs
  thinkpad-acpi: remove HKEY disable functionality
  thinkpad-acpi: add new debug helpers and warn of deprecated atts
  thinkpad-acpi: add missing log levels
  thinkpad-acpi: cleanup debug helpers
  thinkpad-acpi: documentation cleanup
  thinkpad-acpi: drop ibm-acpi alias
  ...
parents 45e36c16 7ec0a729
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -260,6 +260,22 @@ and is between 256 and 4096 characters. It is defined in the file
			to assume that this machine's pmtimer latches its value
			and always returns good values.

	acpi_enforce_resources=	[ACPI]
			{ strict | lax | no }
			Check for resource conflicts between native drivers
			and ACPI OperationRegions (SystemIO and SystemMemory
			only). IO ports and memory declared in ACPI might be
			used by the ACPI subsystem in arbitrary AML code and
			can interfere with legacy drivers.
			strict (default): access to resources claimed by ACPI
			is denied; legacy drivers trying to access reserved
			resources will fail to bind to device using them.
			lax: access to resources claimed by ACPI is allowed;
			legacy drivers trying to access reserved resources
			will bind successfully but a warning message is logged.
			no: ACPI OperationRegions are not marked as reserved,
			no further checks are performed.

	agp=		[AGP]
			{ off | try_unsupported }
			off: disable AGP support
+7 −3
Original line number Diff line number Diff line
Acer Laptop WMI Extras Driver
http://code.google.com/p/aceracpi
Version 0.2
18th August 2008
Version 0.3
4th April 2009

Copyright 2007-2008 Carlos Corbacho <carlos@strangeworlds.co.uk>
Copyright 2007-2009 Carlos Corbacho <carlos@strangeworlds.co.uk>

acer-wmi is a driver to allow you to control various parts of your Acer laptop
hardware under Linux which are exposed via ACPI-WMI.
@@ -36,6 +36,10 @@ not possible in kernel space from a 64 bit OS.
Supported Hardware
******************

NOTE: The Acer Aspire One is not supported hardware. It cannot work with
acer-wmi until Acer fix their ACPI-WMI implementation on them, so has been
blacklisted until that happens.

Please see the website for the current list of known working hardare:

http://code.google.com/p/aceracpi/wiki/SupportedHardware
+97 −47
Original line number Diff line number Diff line
@@ -20,7 +20,8 @@ moved to the drivers/misc tree and renamed to thinkpad-acpi for kernel
kernel 2.6.29 and release 0.22.

The driver is named "thinkpad-acpi".  In some places, like module
names, "thinkpad_acpi" is used because of userspace issues.
names and log messages, "thinkpad_acpi" is used because of userspace
issues.

"tpacpi" is used as a shorthand where "thinkpad-acpi" would be too
long due to length limitations on some Linux kernel versions.
@@ -37,7 +38,7 @@ detailed description):
	- ThinkLight on and off
	- limited docking and undocking
	- UltraBay eject
	- CMOS control
	- CMOS/UCMS control
	- LED control
	- ACPI sounds
	- temperature sensors
@@ -46,6 +47,7 @@ detailed description):
	- Volume control
	- Fan control and monitoring: fan speed, fan enable/disable
	- WAN enable and disable
	- UWB enable and disable

A compatibility table by model and feature is maintained on the web
site, http://ibm-acpi.sf.net/. I appreciate any success or failure
@@ -53,7 +55,7 @@ reports, especially if they add to or correct the compatibility table.
Please include the following information in your report:

	- ThinkPad model name
	- a copy of your DSDT, from /proc/acpi/dsdt
	- a copy of your ACPI tables, using the "acpidump" utility
	- a copy of the output of dmidecode, with serial numbers
	  and UUIDs masked off
	- which driver features work and which don't
@@ -66,17 +68,18 @@ Installation
------------

If you are compiling this driver as included in the Linux kernel
sources, simply enable the CONFIG_THINKPAD_ACPI option, and optionally
enable the CONFIG_THINKPAD_ACPI_BAY option if you want the
thinkpad-specific bay functionality.
sources, look for the CONFIG_THINKPAD_ACPI Kconfig option.
It is located on the menu path: "Device Drivers" -> "X86 Platform
Specific Device Drivers" -> "ThinkPad ACPI Laptop Extras".


Features
--------

The driver exports two different interfaces to userspace, which can be
used to access the features it provides.  One is a legacy procfs-based
interface, which will be removed at some time in the distant future.
The other is a new sysfs-based interface which is not complete yet.
interface, which will be removed at some time in the future.  The other
is a new sysfs-based interface which is not complete yet.

The procfs interface creates the /proc/acpi/ibm directory.  There is a
file under that directory for each feature it supports.  The procfs
@@ -111,15 +114,17 @@ The version of thinkpad-acpi's sysfs interface is exported by the driver
as a driver attribute (see below).

Sysfs driver attributes are on the driver's sysfs attribute space,
for 2.6.23 this is /sys/bus/platform/drivers/thinkpad_acpi/ and
for 2.6.23+ this is /sys/bus/platform/drivers/thinkpad_acpi/ and
/sys/bus/platform/drivers/thinkpad_hwmon/

Sysfs device attributes are on the thinkpad_acpi device sysfs attribute
space, for 2.6.23 this is /sys/devices/platform/thinkpad_acpi/.
space, for 2.6.23+ this is /sys/devices/platform/thinkpad_acpi/.

Sysfs device attributes for the sensors and fan are on the
thinkpad_hwmon device's sysfs attribute space, but you should locate it
looking for a hwmon device with the name attribute of "thinkpad".
looking for a hwmon device with the name attribute of "thinkpad", or
better yet, through libsensors.


Driver version
--------------
@@ -129,6 +134,7 @@ sysfs driver attribute: version

The driver name and version. No commands can be written to this file.


Sysfs interface version
-----------------------

@@ -160,6 +166,7 @@ expect that an attribute might not be there, and deal with it properly
(an attribute not being there *is* a valid way to make it clear that a
feature is not available in sysfs).


Hot keys
--------

@@ -172,17 +179,14 @@ system. Enabling the hotkey functionality of thinkpad-acpi signals the
firmware that such a driver is present, and modifies how the ThinkPad
firmware will behave in many situations.

The driver enables the hot key feature automatically when loaded.  The
feature can later be disabled and enabled back at runtime.  The driver
will also restore the hot key feature to its previous state and mask
when it is unloaded.
The driver enables the HKEY ("hot key") event reporting automatically
when loaded, and disables it when it is removed.

When the hotkey feature is enabled and the hot key mask is set (see
below), the driver will report HKEY events in the following format:
The driver will report HKEY events in the following format:

	ibm/hotkey HKEY 00000080 0000xxxx

Some of these events refer to hot key presses, but not all.
Some of these events refer to hot key presses, but not all of them.

The driver will generate events over the input layer for hot keys and
radio switches, and over the ACPI netlink layer for other events.  The
@@ -214,13 +218,17 @@ procfs notes:

The following commands can be written to the /proc/acpi/ibm/hotkey file:

	echo enable > /proc/acpi/ibm/hotkey -- enable the hot keys feature
	echo disable > /proc/acpi/ibm/hotkey -- disable the hot keys feature
	echo 0xffffffff > /proc/acpi/ibm/hotkey -- enable all hot keys
	echo 0 > /proc/acpi/ibm/hotkey -- disable all possible hot keys
	... any other 8-hex-digit mask ...
	echo reset > /proc/acpi/ibm/hotkey -- restore the original mask

The following commands have been deprecated and will cause the kernel
to log a warning:

	echo enable > /proc/acpi/ibm/hotkey -- does nothing
	echo disable > /proc/acpi/ibm/hotkey -- returns an error

The procfs interface does not support NVRAM polling control.  So as to
maintain maximum bug-to-bug compatibility, it does not report any masks,
nor does it allow one to manipulate the hot key mask when the firmware
@@ -229,12 +237,9 @@ does not support masks at all, even if NVRAM polling is in use.
sysfs notes:

	hotkey_bios_enabled:
		Returns the status of the hot keys feature when
		thinkpad-acpi was loaded.  Upon module unload, the hot
		key feature status will be restored to this value.
		DEPRECATED, WILL BE REMOVED SOON.

		0: hot keys were disabled
		1: hot keys were enabled (unusual)
		Returns 0.

	hotkey_bios_mask:
		Returns the hot keys mask when thinkpad-acpi was loaded.
@@ -242,13 +247,10 @@ sysfs notes:
		to this value.

	hotkey_enable:
		Enables/disables the hot keys feature in the ACPI
		firmware, and reports current status of the hot keys
		feature.  Has no effect on the NVRAM hot key polling
		functionality.
		DEPRECATED, WILL BE REMOVED SOON.

		0: disables the hot keys feature / feature disabled
		1: enables the hot keys feature / feature enabled
		0: returns -EPERM
		1: does nothing

	hotkey_mask:
		bit mask to enable driver-handling (and depending on
@@ -618,6 +620,7 @@ For Lenovo models *with* ACPI backlight control:
   and map them to KEY_BRIGHTNESS_UP and KEY_BRIGHTNESS_DOWN.  Process
   these keys on userspace somehow (e.g. by calling xbacklight).


Bluetooth
---------

@@ -628,6 +631,9 @@ sysfs rfkill class: switch "tpacpi_bluetooth_sw"
This feature shows the presence and current state of a ThinkPad
Bluetooth device in the internal ThinkPad CDC slot.

If the ThinkPad supports it, the Bluetooth state is stored in NVRAM,
so it is kept across reboots and power-off.

Procfs notes:

If Bluetooth is installed, the following commands can be used:
@@ -652,6 +658,7 @@ Sysfs notes:
	rfkill controller switch "tpacpi_bluetooth_sw": refer to
	Documentation/rfkill.txt for details.


Video output control -- /proc/acpi/ibm/video
--------------------------------------------

@@ -693,11 +700,8 @@ Fn-F7 from working. This also disables the video output switching
features of this driver, as it uses the same ACPI methods as
Fn-F7. Video switching on the console should still work.

UPDATE: There's now a patch for the X.org Radeon driver which
addresses this issue. Some people are reporting success with the patch
while others are still having problems. For more information:
UPDATE: refer to https://bugs.freedesktop.org/show_bug.cgi?id=2000

https://bugs.freedesktop.org/show_bug.cgi?id=2000

ThinkLight control
------------------
@@ -720,10 +724,11 @@ The ThinkLight sysfs interface is documented by the LED class
documentation, in Documentation/leds-class.txt.  The ThinkLight LED name
is "tpacpi::thinklight".

Due to limitations in the sysfs LED class, if the status of the thinklight
Due to limitations in the sysfs LED class, if the status of the ThinkLight
cannot be read or if it is unknown, thinkpad-acpi will report it as "off".
It is impossible to know if the status returned through sysfs is valid.


Docking / undocking -- /proc/acpi/ibm/dock
------------------------------------------

@@ -784,6 +789,7 @@ the only docking stations currently supported are the X-series
UltraBase docks and "dumb" port replicators like the Mini Dock (the
latter don't need any ACPI support, actually).


UltraBay eject -- /proc/acpi/ibm/bay
------------------------------------

@@ -847,8 +853,9 @@ supported. Use "eject2" instead of "eject" for the second bay.
Note: the UltraBay eject support on the 600e/x, A22p and A3x is
EXPERIMENTAL and may not work as expected. USE WITH CAUTION!

CMOS control
------------

CMOS/UCMS control
-----------------

procfs: /proc/acpi/ibm/cmos
sysfs device attribute: cmos_command
@@ -882,6 +889,7 @@ The cmos command interface is prone to firmware split-brain problems, as
in newer ThinkPads it is just a compatibility layer.  Do not use it, it is
exported just as a debug tool.


LED control
-----------

@@ -893,6 +901,17 @@ some older ThinkPad models, it is possible to query the status of the
LED indicators as well.  Newer ThinkPads cannot query the real status
of the LED indicators.

Because misuse of the LEDs could induce an unaware user to perform
dangerous actions (like undocking or ejecting a bay device while the
buses are still active), or mask an important alarm (such as a nearly
empty battery, or a broken battery), access to most LEDs is
restricted.

Unrestricted access to all LEDs requires that thinkpad-acpi be
compiled with the CONFIG_THINKPAD_ACPI_UNSAFE_LEDS option enabled.
Distributions must never enable this option.  Individual users that
are aware of the consequences are welcome to enabling it.

procfs notes:

The available commands are:
@@ -939,6 +958,7 @@ ThinkPad indicator LED should blink in hardware accelerated mode, use the
"timer" trigger, and leave the delay_on and delay_off parameters set to
zero (to request hardware acceleration autodetection).


ACPI sounds -- /proc/acpi/ibm/beep
----------------------------------

@@ -968,6 +988,7 @@ X40:
	16 - one medium-pitched beep repeating constantly, stop with 17
	17 - stop 16


Temperature sensors
-------------------

@@ -1115,6 +1136,7 @@ registers contain the current battery capacity, etc. If you experiment
with this, do send me your results (including some complete dumps with
a description of the conditions when they were taken.)


LCD brightness control
----------------------

@@ -1124,10 +1146,9 @@ sysfs backlight device "thinkpad_screen"
This feature allows software control of the LCD brightness on ThinkPad
models which don't have a hardware brightness slider.

It has some limitations: the LCD backlight cannot be actually turned on or
off by this interface, and in many ThinkPad models, the "dim while on
battery" functionality will be enabled by the BIOS when this interface is
used, and cannot be controlled.
It has some limitations: the LCD backlight cannot be actually turned
on or off by this interface, it just controls the backlight brightness
level.

On IBM (and some of the earlier Lenovo) ThinkPads, the backlight control
has eight brightness levels, ranging from 0 to 7.  Some of the levels
@@ -1136,10 +1157,15 @@ display backlight brightness control methods have 16 levels, ranging
from 0 to 15.

There are two interfaces to the firmware for direct brightness control,
EC and CMOS.  To select which one should be used, use the
EC and UCMS (or CMOS).  To select which one should be used, use the
brightness_mode module parameter: brightness_mode=1 selects EC mode,
brightness_mode=2 selects CMOS mode, brightness_mode=3 selects both EC
and CMOS.  The driver tries to auto-detect which interface to use.
brightness_mode=2 selects UCMS mode, brightness_mode=3 selects EC
mode with NVRAM backing (so that brightness changes are remembered
across shutdown/reboot).

The driver tries to select which interface to use from a table of
defaults for each ThinkPad model.  If it makes a wrong choice, please
report this as a bug, so that we can fix it.

When display backlight brightness controls are available through the
standard ACPI interface, it is best to use it instead of this direct
@@ -1201,6 +1227,7 @@ WARNING:
    and maybe reduce the life of the backlight lamps by needlessly kicking
    its level up and down at every change.


Volume control -- /proc/acpi/ibm/volume
---------------------------------------

@@ -1217,6 +1244,11 @@ distinct. The unmute the volume after the mute command, use either the
up or down command (the level command will not unmute the volume).
The current volume level and mute state is shown in the file.

The ALSA mixer interface to this feature is still missing, but patches
to add it exist.  That problem should be addressed in the not so
distant future.


Fan control and monitoring: fan speed, fan enable/disable
---------------------------------------------------------

@@ -1383,8 +1415,11 @@ procfs: /proc/acpi/ibm/wan
sysfs device attribute: wwan_enable (deprecated)
sysfs rfkill class: switch "tpacpi_wwan_sw"

This feature shows the presence and current state of a W-WAN (Sierra
Wireless EV-DO) device.
This feature shows the presence and current state of the built-in
Wireless WAN device.

If the ThinkPad supports it, the WWAN state is stored in NVRAM,
so it is kept across reboots and power-off.

It was tested on a Lenovo ThinkPad X60. It should probably work on other
ThinkPad models which come with this module installed.
@@ -1413,6 +1448,7 @@ Sysfs notes:
	rfkill controller switch "tpacpi_wwan_sw": refer to
	Documentation/rfkill.txt for details.


EXPERIMENTAL: UWB
-----------------

@@ -1431,6 +1467,7 @@ Sysfs notes:
	rfkill controller switch "tpacpi_uwb_sw": refer to
	Documentation/rfkill.txt for details.


Multiple Commands, Module Parameters
------------------------------------

@@ -1445,6 +1482,7 @@ for example:

	modprobe thinkpad_acpi hotkey=enable,0xffff video=auto_disable


Enabling debugging output
-------------------------

@@ -1457,8 +1495,15 @@ will enable all debugging output classes. It takes a bitmask, so
to enable more than one output class, just add their values.

	Debug bitmask		Description
	0x8000			Disclose PID of userspace programs
				accessing some functions of the driver
	0x0001			Initialization and probing
	0x0002			Removal
	0x0004			RF Transmitter control (RFKILL)
				(bluetooth, WWAN, UWB...)
	0x0008			HKEY event interface, hotkeys
	0x0010			Fan control
	0x0020			Backlight brightness

There is also a kernel build option to enable more debugging
information, which may be necessary to debug driver problems.
@@ -1467,6 +1512,7 @@ The level of debugging information output by the driver can be changed
at runtime through sysfs, using the driver attribute debug_level.  The
attribute takes the same bitmask as the debug module parameter above.


Force loading of module
-----------------------

@@ -1505,3 +1551,7 @@ Sysfs interface changelog:

0x020200:	Add poll()/select() support to the following attributes:
		hotkey_radio_sw, wakeup_hotunplug_complete, wakeup_reason

0x020300:	hotkey enable/disable support removed, attributes
		hotkey_bios_enabled and hotkey_enable deprecated and
		marked for removal.
+6 −4
Original line number Diff line number Diff line
@@ -1422,6 +1422,11 @@ P: Doug Warzecha
M:	Douglas_Warzecha@dell.com
S:	Maintained

DELL WMI EXTRAS DRIVER
P:	Matthew Garrett
M:	mjg59@srcf.ucam.org
S:	Maintained

DEVICE NUMBER REGISTRY
P:	Torben Mathiasen
M:	device@lanana.org
@@ -4401,10 +4406,7 @@ T: quilt http://svn.sourceforge.jp/svnroot/tomoyo/trunk/2.2.x/tomoyo-lsm/patches
S:	Maintained

TOSHIBA ACPI EXTRAS DRIVER
P:	John Belmonte
M:	toshiba_acpi@memebeam.org
W:	http://memebeam.org/toys/ToshibaAcpiDriver
S:	Maintained
S:	Orphan

TOSHIBA SMM DRIVER
P:	Jonathan Buzzard
+60 −5
Original line number Diff line number Diff line
@@ -229,6 +229,35 @@ static void __cpuinit acpi_register_lapic(int id, u8 enabled)
	generic_processor_info(id, ver);
}

static int __init
acpi_parse_x2apic(struct acpi_subtable_header *header, const unsigned long end)
{
	struct acpi_madt_local_x2apic *processor = NULL;

	processor = (struct acpi_madt_local_x2apic *)header;

	if (BAD_MADT_ENTRY(processor, end))
		return -EINVAL;

	acpi_table_print_madt_entry(header);

#ifdef CONFIG_X86_X2APIC
	/*
	 * We need to register disabled CPU as well to permit
	 * counting disabled CPUs. This allows us to size
	 * cpus_possible_map more accurately, to permit
	 * to not preallocating memory for all NR_CPUS
	 * when we use CPU hotplug.
	 */
	acpi_register_lapic(processor->local_apic_id,	/* APIC ID */
			    processor->lapic_flags & ACPI_MADT_ENABLED);
#else
	printk(KERN_WARNING PREFIX "x2apic entry ignored\n");
#endif

	return 0;
}

static int __init
acpi_parse_lapic(struct acpi_subtable_header * header, const unsigned long end)
{
@@ -288,6 +317,25 @@ acpi_parse_lapic_addr_ovr(struct acpi_subtable_header * header,
	return 0;
}

static int __init
acpi_parse_x2apic_nmi(struct acpi_subtable_header *header,
		      const unsigned long end)
{
	struct acpi_madt_local_x2apic_nmi *x2apic_nmi = NULL;

	x2apic_nmi = (struct acpi_madt_local_x2apic_nmi *)header;

	if (BAD_MADT_ENTRY(x2apic_nmi, end))
		return -EINVAL;

	acpi_table_print_madt_entry(header);

	if (x2apic_nmi->lint != 1)
		printk(KERN_WARNING PREFIX "NMI not connected to LINT 1!\n");

	return 0;
}

static int __init
acpi_parse_lapic_nmi(struct acpi_subtable_header * header, const unsigned long end)
{
@@ -793,6 +841,7 @@ static int __init early_acpi_parse_madt_lapic_addr_ovr(void)
static int __init acpi_parse_madt_lapic_entries(void)
{
	int count;
	int x2count = 0;

	if (!cpu_has_apic)
		return -ENODEV;
@@ -816,22 +865,28 @@ static int __init acpi_parse_madt_lapic_entries(void)
	count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_SAPIC,
				      acpi_parse_sapic, MAX_APICS);

	if (!count)
	if (!count) {
		x2count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_X2APIC,
						acpi_parse_x2apic, MAX_APICS);
		count = acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC,
					      acpi_parse_lapic, MAX_APICS);
	if (!count) {
	}
	if (!count && !x2count) {
		printk(KERN_ERR PREFIX "No LAPIC entries present\n");
		/* TBD: Cleanup to allow fallback to MPS */
		return -ENODEV;
	} else if (count < 0) {
	} else if (count < 0 || x2count < 0) {
		printk(KERN_ERR PREFIX "Error parsing LAPIC entry\n");
		/* TBD: Cleanup to allow fallback to MPS */
		return count;
	}

	x2count =
	    acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_X2APIC_NMI,
				  acpi_parse_x2apic_nmi, 0);
	count =
	    acpi_table_parse_madt(ACPI_MADT_TYPE_LOCAL_APIC_NMI, acpi_parse_lapic_nmi, 0);
	if (count < 0) {
	if (count < 0 || x2count < 0) {
		printk(KERN_ERR PREFIX "Error parsing LAPIC NMI entry\n");
		/* TBD: Cleanup to allow fallback to MPS */
		return count;
@@ -1470,7 +1525,7 @@ static int __init dmi_ignore_irq0_timer_override(const struct dmi_system_id *d)

/*
 * If your system is blacklisted here, but you find that acpi=force
 * works for you, please contact acpi-devel@sourceforge.net
 * works for you, please contact linux-acpi@vger.kernel.org
 */
static struct dmi_system_id __initdata acpi_dmi_table[] = {
	/*
Loading