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

Commit 76e0134f 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: (32 commits)
  ACPI: i2c-scmi: don't use acpi_device_uid()
  ACPI: simplify building device HID/CID list
  ACPI: remove acpi_device_uid() and related stuff
  ACPI: remove acpi_device.flags.hardware_id
  ACPI: remove acpi_device.flags.compatible_ids
  ACPI: maintain a single list of _HID and _CID IDs
  ACPI: make sure every acpi_device has an ID
  ACPI: use acpi_device_hid() when possible
  ACPI: fix synthetic HID for \_SB_
  ACPI: handle re-enumeration, when acpi_devices might already exist
  ACPI: factor out device type and status checking
  ACPI: add acpi_bus_get_status_handle()
  ACPI: use acpi_walk_namespace() to enumerate devices
  ACPI: identify device tree root by null parent pointer, not ACPI_BUS_TYPE
  ACPI: enumerate namespace before adding functional fixed hardware devices
  ACPI: convert acpi_bus_scan() to operate on an acpi_handle
  ACPI: add acpi_bus_get_parent() and remove "parent" arguments
  ACPI: remove unnecessary argument checking
  ACPI: remove redundant "type" arguments
  ACPI: remove acpi_device_set_context() "type" argument
  ...
parents bfebb140 e96c9284
Loading
Loading
Loading
Loading
+27 −21
Original line number Diff line number Diff line
@@ -199,18 +199,22 @@ kind to allow it (and it often doesn't!).

Not all bits in the mask can be modified.  Not all bits that can be
modified do anything.  Not all hot keys can be individually controlled
by the mask.  Some models do not support the mask at all, and in those
models, hot keys cannot be controlled individually.  The behaviour of
the mask is, therefore, highly dependent on the ThinkPad model.
by the mask.  Some models do not support the mask at all.  The behaviour
of the mask is, therefore, highly dependent on the ThinkPad model.

The driver will filter out any unmasked hotkeys, so even if the firmware
doesn't allow disabling an specific hotkey, the driver will not report
events for unmasked hotkeys.

Note that unmasking some keys prevents their default behavior.  For
example, if Fn+F5 is unmasked, that key will no longer enable/disable
Bluetooth by itself.
Bluetooth by itself in firmware.

Note also that not all Fn key combinations are supported through ACPI.
For example, on the X40, the brightness, volume and "Access IBM" buttons
do not generate ACPI events even with this driver.  They *can* be used
through the "ThinkPad Buttons" utility, see http://www.nongnu.org/tpb/
Note also that not all Fn key combinations are supported through ACPI
depending on the ThinkPad model and firmware version.  On those
ThinkPads, it is still possible to support some extra hotkeys by
polling the "CMOS NVRAM" at least 10 times per second.  The driver
attempts to enables this functionality automatically when required.

procfs notes:

@@ -255,18 +259,11 @@ sysfs notes:
		1: does nothing

	hotkey_mask:
		bit mask to enable driver-handling (and depending on
		bit mask to enable reporting (and depending on
		the firmware, ACPI event generation) for each hot key
		(see above).  Returns the current status of the hot keys
		mask, and allows one to modify it.

		Note: when NVRAM polling is active, the firmware mask
		will be different from the value returned by
		hotkey_mask.  The driver will retain enabled bits for
		hotkeys that are under NVRAM polling even if the
		firmware refuses them, and will not set these bits on
		the firmware hot key mask.

	hotkey_all_mask:
		bit mask that should enable event reporting for all
		supported hot keys, when echoed to hotkey_mask above.
@@ -279,7 +276,8 @@ sysfs notes:
		bit mask that should enable event reporting for all
		supported hot keys, except those which are always
		handled by the firmware anyway.  Echo it to
		hotkey_mask above, to use.
		hotkey_mask above, to use.  This is the default mask
		used by the driver.

	hotkey_source_mask:
		bit mask that selects which hot keys will the driver
@@ -287,9 +285,10 @@ sysfs notes:
		based on the capabilities reported by the ACPI firmware,
		but it can be overridden at runtime.

		Hot keys whose bits are set in both hotkey_source_mask
		and also on hotkey_mask are polled for in NVRAM.  Only a
		few hot keys are available through CMOS NVRAM polling.
		Hot keys whose bits are set in hotkey_source_mask are
		polled for in NVRAM, and reported as hotkey events if
		enabled in hotkey_mask.  Only a few hot keys are
		available through CMOS NVRAM polling.

		Warning: when in NVRAM mode, the volume up/down/mute
		keys are synthesized according to changes in the mixer,
@@ -525,6 +524,7 @@ compatibility purposes when hotkey_report_mode is set to 1.
0x2305		System is waking up from suspend to eject bay
0x2404		System is waking up from hibernation to undock
0x2405		System is waking up from hibernation to eject bay
0x5010		Brightness level changed/control event

The above events are never propagated by the driver.

@@ -532,7 +532,6 @@ The above events are never propagated by the driver.
0x4003		Undocked (see 0x2x04), can sleep again
0x500B		Tablet pen inserted into its storage bay
0x500C		Tablet pen removed from its storage bay
0x5010		Brightness level changed (newer Lenovo BIOSes)

The above events are propagated by the driver.

@@ -621,6 +620,8 @@ For Lenovo models *with* ACPI backlight control:
2. Do *NOT* load up ACPI video, enable the hotkeys in thinkpad-acpi,
   and map them to KEY_BRIGHTNESS_UP and KEY_BRIGHTNESS_DOWN.  Process
   these keys on userspace somehow (e.g. by calling xbacklight).
   The driver will do this automatically if it detects that ACPI video
   has been disabled.


Bluetooth
@@ -1459,3 +1460,8 @@ Sysfs interface changelog:
0x020400:	Marker for 16 LEDs support.  Also, LEDs that are known
		to not exist in a given model are not registered with
		the LED sysfs class anymore.

0x020500:	Updated hotkey driver, hotkey_mask is always available
		and it is always able to disable hot keys.  Very old
		thinkpads are properly supported.  hotkey_bios_mask
		is deprecated and marked for removal.
+22 −27
Original line number Diff line number Diff line
@@ -94,36 +94,33 @@ int acpi_bus_get_device(acpi_handle handle, struct acpi_device **device)

EXPORT_SYMBOL(acpi_bus_get_device);

int acpi_bus_get_status(struct acpi_device *device)
acpi_status acpi_bus_get_status_handle(acpi_handle handle,
				       unsigned long long *sta)
{
	acpi_status status = AE_OK;
	unsigned long long sta = 0;
	acpi_status status;

	status = acpi_evaluate_integer(handle, "_STA", NULL, sta);
	if (ACPI_SUCCESS(status))
		return AE_OK;

	if (!device)
		return -EINVAL;
	if (status == AE_NOT_FOUND) {
		*sta = ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED |
		       ACPI_STA_DEVICE_UI      | ACPI_STA_DEVICE_FUNCTIONING;
		return AE_OK;
	}
	return status;
}

	/*
	 * Evaluate _STA if present.
	 */
	if (device->flags.dynamic_status) {
		status =
		    acpi_evaluate_integer(device->handle, "_STA", NULL, &sta);
int acpi_bus_get_status(struct acpi_device *device)
{
	acpi_status status;
	unsigned long long sta;

	status = acpi_bus_get_status_handle(device->handle, &sta);
	if (ACPI_FAILURE(status))
		return -ENODEV;
		STRUCT_TO_INT(device->status) = (int)sta;
	}

	/*
	 * According to ACPI spec some device can be present and functional
	 * even if the parent is not present but functional.
	 * In such conditions the child device should not inherit the status
	 * from the parent.
	 */
	else
		STRUCT_TO_INT(device->status) =
		    ACPI_STA_DEVICE_PRESENT | ACPI_STA_DEVICE_ENABLED |
		    ACPI_STA_DEVICE_UI      | ACPI_STA_DEVICE_FUNCTIONING;
	STRUCT_TO_INT(device->status) = (int) sta;

	if (device->status.functional && !device->status.present) {
		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]: "
@@ -135,10 +132,8 @@ int acpi_bus_get_status(struct acpi_device *device)
	ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Device [%s] status [%08x]\n",
			  device->pnp.bus_id,
			  (u32) STRUCT_TO_INT(device->status)));

	return 0;
}

EXPORT_SYMBOL(acpi_bus_get_status);

void acpi_bus_private_data_handler(acpi_handle handle,
+272 −433

File changed.

Preview size limit exceeded, changes collapsed.

+2 −3
Original line number Diff line number Diff line
@@ -369,9 +369,8 @@ static int acpi_smbus_cmi_add(struct acpi_device *device)
		goto err;

	snprintf(smbus_cmi->adapter.name, sizeof(smbus_cmi->adapter.name),
		"SMBus CMI adapter %s (%s)",
		acpi_device_name(device),
		acpi_device_uid(device));
		"SMBus CMI adapter %s",
		acpi_device_name(device));
	smbus_cmi->adapter.owner = THIS_MODULE;
	smbus_cmi->adapter.algo = &acpi_smbus_cmi_algorithm;
	smbus_cmi->adapter.algo_data = smbus_cmi;
+0 −1
Original line number Diff line number Diff line
@@ -406,7 +406,6 @@ static acpi_status __init ibm_find_acpi_device(acpi_handle handle,
			__func__, status);
		return retval;
	}
	info->hardware_id.string[sizeof(info->hardware_id.length) - 1] = '\0';

	if (info->current_status && (info->valid & ACPI_VALID_HID) &&
			(!strcmp(info->hardware_id.string, IBM_HARDWARE_ID1) ||
Loading