summaryrefslogtreecommitdiffstats
path: root/drivers/platform/x86/thinkpad_acpi.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-02-19 10:56:51 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2015-02-19 10:56:51 -0800
commit6ed3e57fd2ffe63385e0073fe3cde8bf91b4c9fa (patch)
tree0eb9265c6c04ee0fa3d7bd773ca8d98bf2fb69b2 /drivers/platform/x86/thinkpad_acpi.c
parentb11a2783974791d37e44abbb48d41e8c120b5126 (diff)
parentc57c0fa4bc9c2ad023674ef478c25719abaace7d (diff)
downloadop-kernel-dev-6ed3e57fd2ffe63385e0073fe3cde8bf91b4c9fa.zip
op-kernel-dev-6ed3e57fd2ffe63385e0073fe3cde8bf91b4c9fa.tar.gz
Merge tag 'platform-drivers-x86-v3.20-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86
Pull platform driver update from Darren Hart: "This includes a significant update to the toshiba_acpi driver, bringing it to feature parity with the Windows driver, followed by some needed cleanups. The other changes are mostly minor updates, quirks, sparse fixes, or cleanups. Details: - toshiba_acpi: Add support for missing features from the Windows driver, bump the sysfs version, and clean up the driver. - thinkpad_acpi: BIOS string versions, unhandled hkey events. - msamsung-laptop: Add native backlight quirk, enable better lid handling. - intel_scu_ipc: Read resources from PCI configuration - other: Fix sparse warnings, general cleanups" * tag 'platform-drivers-x86-v3.20-1' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86: (34 commits) toshiba_acpi: Cleanup GPL header toshiba_acpi: Cleanup comment blocks and capitalization toshiba_acpi: Make use of DEVICE_ATTR_{RO, RW} macros toshiba_acpi: Drop the toshiba_ prefix from sysfs function names toshiba_acpi: Move sysfs function and struct declarations further down Documentation/ABI: Add file describing the sysfs entries for toshiba_acpi toshiba_acpi: Clean file according to coding style toshiba_acpi: Bump version number to 0.21 toshiba_acpi: Add support to enable/disable USB 3 toshiba_acpi: Add support for Panel Power ON toshiba_acpi: Add support for Keyboard functions mode toshiba_acpi: Add fan entry to sysfs toshiba_acpi: Add version entry to sysfs thinkpad_acpi: support new BIOS version string pattern thinkpad_acpi: unhandled hkey event toshiba_acpi: Make toshiba_eco_mode_available more robust classmate-laptop: Fix sparse warning (0 as NULL) Sony-laptop: Fix sparse warning (make undeclared var static) thinkpad_acpi.c: Fix sparse warning (make undeclared var static) samsung-laptop.c: Prefer kstrtoint over single variable sscanf ...
Diffstat (limited to 'drivers/platform/x86/thinkpad_acpi.c')
-rw-r--r--drivers/platform/x86/thinkpad_acpi.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index c3d11fa..3b8ceee 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -196,6 +196,7 @@ enum tpacpi_hkey_event_t {
/* Key-related user-interface events */
TP_HKEY_EV_KEY_NUMLOCK = 0x6000, /* NumLock key pressed */
TP_HKEY_EV_KEY_FN = 0x6005, /* Fn key pressed? E420 */
+ TP_HKEY_EV_KEY_FN_ESC = 0x6060, /* Fn+Esc key pressed X240 */
/* Thermal events */
TP_HKEY_EV_ALARM_BAT_HOT = 0x6011, /* battery too hot */
@@ -3456,7 +3457,7 @@ enum ADAPTIVE_KEY_MODE {
LAYFLAT_MODE
};
-const int adaptive_keyboard_modes[] = {
+static const int adaptive_keyboard_modes[] = {
HOME_MODE,
/* WEB_BROWSER_MODE = 2,
WEB_CONFERENCE_MODE = 3, */
@@ -3712,6 +3713,7 @@ static bool hotkey_notify_6xxx(const u32 hkey,
case TP_HKEY_EV_KEY_NUMLOCK:
case TP_HKEY_EV_KEY_FN:
+ case TP_HKEY_EV_KEY_FN_ESC:
/* key press events, we just ignore them as long as the EC
* is still reporting them in the normal keyboard stream */
*send_acpi_ev = false;
@@ -8883,17 +8885,31 @@ static bool __pure __init tpacpi_is_fw_digit(const char c)
return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z');
}
-/* Most models: xxyTkkWW (#.##c); Ancient 570/600 and -SL lacks (#.##c) */
static bool __pure __init tpacpi_is_valid_fw_id(const char * const s,
const char t)
{
- return s && strlen(s) >= 8 &&
+ /*
+ * Most models: xxyTkkWW (#.##c)
+ * Ancient 570/600 and -SL lacks (#.##c)
+ */
+ if (s && strlen(s) >= 8 &&
tpacpi_is_fw_digit(s[0]) &&
tpacpi_is_fw_digit(s[1]) &&
s[2] == t &&
(s[3] == 'T' || s[3] == 'N') &&
tpacpi_is_fw_digit(s[4]) &&
- tpacpi_is_fw_digit(s[5]);
+ tpacpi_is_fw_digit(s[5]))
+ return true;
+
+ /* New models: xxxyTkkW (#.##c); T550 and some others */
+ return s && strlen(s) >= 8 &&
+ tpacpi_is_fw_digit(s[0]) &&
+ tpacpi_is_fw_digit(s[1]) &&
+ tpacpi_is_fw_digit(s[2]) &&
+ s[3] == t &&
+ (s[4] == 'T' || s[4] == 'N') &&
+ tpacpi_is_fw_digit(s[5]) &&
+ tpacpi_is_fw_digit(s[6]);
}
/* returns 0 - probe ok, or < 0 - probe error.
OpenPOWER on IntegriCloud