Backport hotkey event support for 2017 thinkpad models (rhbz 1459272)
This commit is contained in:
parent
57409267f0
commit
d324f86298
|
@ -0,0 +1,71 @@
|
|||
From 6bb84c0f9da1144e0d443798a76d5769b7d554af Mon Sep 17 00:00:00 2001
|
||||
From: Christian Kellner <christian@kellner.me>
|
||||
Date: Tue, 28 Feb 2017 17:10:56 +0100
|
||||
Subject: [PATCH 1/2] platform/x86: thinkpad_acpi: guard generic hotkey case
|
||||
|
||||
Currently when dispatching hotkeys we check if the scancode is in
|
||||
the range of 0 and TPACPI_HOTKEY_MAP_LEN, although the bottom 20
|
||||
entries in the hotkey keymap are already adaptive keycodes.
|
||||
Therefore we introduce a TP_ACPI_HOTKEYSCAN_ADAPTIVE_START and
|
||||
ensure that we are in the range 0 and ADAPTIVE_START for the generic
|
||||
keycode case.
|
||||
|
||||
Signed-off-by: Christian Kellner <ckellner@redhat.com>
|
||||
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
|
||||
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
---
|
||||
drivers/platform/x86/thinkpad_acpi.c | 12 +++++++-----
|
||||
1 file changed, 7 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
|
||||
index 1d18b32..e2b962f 100644
|
||||
--- a/drivers/platform/x86/thinkpad_acpi.c
|
||||
+++ b/drivers/platform/x86/thinkpad_acpi.c
|
||||
@@ -1922,7 +1922,9 @@ enum { /* hot key scan codes (derived from ACPI DSDT) */
|
||||
TP_ACPI_HOTKEYSCAN_UNK7,
|
||||
TP_ACPI_HOTKEYSCAN_UNK8,
|
||||
|
||||
- TP_ACPI_HOTKEYSCAN_MUTE2,
|
||||
+ /* Adaptive keyboard keycodes */
|
||||
+ TP_ACPI_HOTKEYSCAN_ADAPTIVE_START,
|
||||
+ TP_ACPI_HOTKEYSCAN_MUTE2 = TP_ACPI_HOTKEYSCAN_ADAPTIVE_START,
|
||||
TP_ACPI_HOTKEYSCAN_BRIGHTNESS_ZERO,
|
||||
TP_ACPI_HOTKEYSCAN_CLIPPING_TOOL,
|
||||
TP_ACPI_HOTKEYSCAN_CLOUD,
|
||||
@@ -3656,7 +3658,6 @@ static const int adaptive_keyboard_modes[] = {
|
||||
#define DFR_CHANGE_ROW 0x101
|
||||
#define DFR_SHOW_QUICKVIEW_ROW 0x102
|
||||
#define FIRST_ADAPTIVE_KEY 0x103
|
||||
-#define ADAPTIVE_KEY_OFFSET 0x020
|
||||
|
||||
/* press Fn key a while second, it will switch to Function Mode. Then
|
||||
* release Fn key, previous mode be restored.
|
||||
@@ -3747,12 +3748,13 @@ static bool adaptive_keyboard_hotkey_notify_hotkey(unsigned int scancode)
|
||||
default:
|
||||
if (scancode < FIRST_ADAPTIVE_KEY ||
|
||||
scancode >= FIRST_ADAPTIVE_KEY + TPACPI_HOTKEY_MAP_LEN -
|
||||
- ADAPTIVE_KEY_OFFSET) {
|
||||
+ TP_ACPI_HOTKEYSCAN_ADAPTIVE_START) {
|
||||
pr_info("Unhandled adaptive keyboard key: 0x%x\n",
|
||||
scancode);
|
||||
return false;
|
||||
}
|
||||
- keycode = hotkey_keycode_map[scancode - FIRST_ADAPTIVE_KEY + ADAPTIVE_KEY_OFFSET];
|
||||
+ keycode = hotkey_keycode_map[scancode - FIRST_ADAPTIVE_KEY +
|
||||
+ TP_ACPI_HOTKEYSCAN_ADAPTIVE_START];
|
||||
if (keycode != KEY_RESERVED) {
|
||||
mutex_lock(&tpacpi_inputdev_send_mutex);
|
||||
|
||||
@@ -3778,7 +3780,7 @@ static bool hotkey_notify_hotkey(const u32 hkey,
|
||||
*ignore_acpi_ev = false;
|
||||
|
||||
/* HKEY event 0x1001 is scancode 0x00 */
|
||||
- if (scancode > 0 && scancode <= TPACPI_HOTKEY_MAP_LEN) {
|
||||
+ if (scancode > 0 && scancode <= TP_ACPI_HOTKEYSCAN_ADAPTIVE_START) {
|
||||
scancode--;
|
||||
if (!(hotkey_source_mask & (1 << scancode))) {
|
||||
tpacpi_input_send_key_masked(scancode);
|
||||
--
|
||||
2.9.4
|
||||
|
|
@ -0,0 +1,158 @@
|
|||
From 82e71b57b1b4347126b1ffd7b2beed2bc8b795bd Mon Sep 17 00:00:00 2001
|
||||
From: Christian Kellner <christian@kellner.me>
|
||||
Date: Tue, 28 Feb 2017 17:10:57 +0100
|
||||
Subject: [PATCH 2/2] platform/x86: thinkpad_acpi: add mapping for new hotkeys
|
||||
|
||||
The T470, X270 emits new hkey events in the 0x1311 - 0x1315 range.
|
||||
According to the user manual they should launch a user selected
|
||||
favorite application (star icon, 0x1311), snipping tool (0x1312,
|
||||
currently ignored), enable/disable bluetooth (0x1314) and open they
|
||||
keyboard settings (0x1315).
|
||||
|
||||
The third nibble (0xf00) is used to differentiate between the original
|
||||
hotkeys, the adaptive keyboard codes and the new, additional ones.
|
||||
|
||||
Signed-off-by: Christian Kellner <ckellner@redhat.com>
|
||||
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
|
||||
Acked-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
|
||||
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
|
||||
---
|
||||
drivers/platform/x86/thinkpad_acpi.c | 91 +++++++++++++++++++++++++++++++-----
|
||||
1 file changed, 79 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
|
||||
index e2b962f..7b6cb0c 100644
|
||||
--- a/drivers/platform/x86/thinkpad_acpi.c
|
||||
+++ b/drivers/platform/x86/thinkpad_acpi.c
|
||||
@@ -1945,6 +1945,15 @@ enum { /* hot key scan codes (derived from ACPI DSDT) */
|
||||
TP_ACPI_HOTKEYSCAN_CAMERA_MODE,
|
||||
TP_ACPI_HOTKEYSCAN_ROTATE_DISPLAY,
|
||||
|
||||
+ /* Lenovo extended keymap, starting at 0x1300 */
|
||||
+ TP_ACPI_HOTKEYSCAN_EXTENDED_START,
|
||||
+ /* first new observed key (star, favorites) is 0x1311 */
|
||||
+ TP_ACPI_HOTKEYSCAN_STAR = 69,
|
||||
+ TP_ACPI_HOTKEYSCAN_CLIPPING_TOOL2,
|
||||
+ TP_ACPI_HOTKEYSCAN_UNK25,
|
||||
+ TP_ACPI_HOTKEYSCAN_BLUETOOTH,
|
||||
+ TP_ACPI_HOTKEYSCAN_KEYBOARD,
|
||||
+
|
||||
/* Hotkey keymap size */
|
||||
TPACPI_HOTKEY_MAP_LEN
|
||||
};
|
||||
@@ -3252,6 +3261,15 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
|
||||
KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+
|
||||
+ /* No assignment, used for newer Lenovo models */
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN
|
||||
+
|
||||
},
|
||||
|
||||
/* Generic keymap for Lenovo ThinkPads */
|
||||
@@ -3337,6 +3355,29 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
|
||||
KEY_RESERVED, /* Microphone cancellation */
|
||||
KEY_RESERVED, /* Camera mode */
|
||||
KEY_RESERVED, /* Rotate display, 0x116 */
|
||||
+
|
||||
+ /*
|
||||
+ * These are found in 2017 models (e.g. T470s, X270).
|
||||
+ * The lowest known value is 0x311, which according to
|
||||
+ * the manual should launch a user defined favorite
|
||||
+ * application.
|
||||
+ *
|
||||
+ * The offset for these is TP_ACPI_HOTKEYSCAN_EXTENDED_START,
|
||||
+ * corresponding to 0x34.
|
||||
+ */
|
||||
+
|
||||
+ /* (assignments unknown, please report if found) */
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+ KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN, KEY_UNKNOWN,
|
||||
+ KEY_UNKNOWN,
|
||||
+
|
||||
+ KEY_FAVORITES, /* Favorite app, 0x311 */
|
||||
+ KEY_RESERVED, /* Clipping tool */
|
||||
+ KEY_RESERVED,
|
||||
+ KEY_BLUETOOTH, /* Bluetooth */
|
||||
+ KEY_KEYBOARD /* Keyboard, 0x315 */
|
||||
},
|
||||
};
|
||||
|
||||
@@ -3747,8 +3788,9 @@ static bool adaptive_keyboard_hotkey_notify_hotkey(unsigned int scancode)
|
||||
|
||||
default:
|
||||
if (scancode < FIRST_ADAPTIVE_KEY ||
|
||||
- scancode >= FIRST_ADAPTIVE_KEY + TPACPI_HOTKEY_MAP_LEN -
|
||||
- TP_ACPI_HOTKEYSCAN_ADAPTIVE_START) {
|
||||
+ scancode >= FIRST_ADAPTIVE_KEY +
|
||||
+ TP_ACPI_HOTKEYSCAN_EXTENDED_START -
|
||||
+ TP_ACPI_HOTKEYSCAN_ADAPTIVE_START) {
|
||||
pr_info("Unhandled adaptive keyboard key: 0x%x\n",
|
||||
scancode);
|
||||
return false;
|
||||
@@ -3779,19 +3821,44 @@ static bool hotkey_notify_hotkey(const u32 hkey,
|
||||
*send_acpi_ev = true;
|
||||
*ignore_acpi_ev = false;
|
||||
|
||||
- /* HKEY event 0x1001 is scancode 0x00 */
|
||||
- if (scancode > 0 && scancode <= TP_ACPI_HOTKEYSCAN_ADAPTIVE_START) {
|
||||
- scancode--;
|
||||
- if (!(hotkey_source_mask & (1 << scancode))) {
|
||||
- tpacpi_input_send_key_masked(scancode);
|
||||
- *send_acpi_ev = false;
|
||||
- } else {
|
||||
- *ignore_acpi_ev = true;
|
||||
+ /*
|
||||
+ * Original events are in the 0x10XX range, the adaptive keyboard
|
||||
+ * found in 2014 X1 Carbon emits events are of 0x11XX. In 2017
|
||||
+ * models, additional keys are emitted through 0x13XX.
|
||||
+ */
|
||||
+ switch ((hkey >> 8) & 0xf) {
|
||||
+ case 0:
|
||||
+ if (scancode > 0 &&
|
||||
+ scancode <= TP_ACPI_HOTKEYSCAN_ADAPTIVE_START) {
|
||||
+ /* HKEY event 0x1001 is scancode 0x00 */
|
||||
+ scancode--;
|
||||
+ if (!(hotkey_source_mask & (1 << scancode))) {
|
||||
+ tpacpi_input_send_key_masked(scancode);
|
||||
+ *send_acpi_ev = false;
|
||||
+ } else {
|
||||
+ *ignore_acpi_ev = true;
|
||||
+ }
|
||||
+ return true;
|
||||
}
|
||||
- return true;
|
||||
- } else {
|
||||
+ break;
|
||||
+
|
||||
+ case 1:
|
||||
return adaptive_keyboard_hotkey_notify_hotkey(scancode);
|
||||
+
|
||||
+ case 3:
|
||||
+ /* Extended keycodes start at 0x300 and our offset into the map
|
||||
+ * TP_ACPI_HOTKEYSCAN_EXTENDED_START. The calculated scancode
|
||||
+ * will be positive, but might not be in the correct range.
|
||||
+ */
|
||||
+ scancode -= (0x300 - TP_ACPI_HOTKEYSCAN_EXTENDED_START);
|
||||
+ if (scancode >= TP_ACPI_HOTKEYSCAN_EXTENDED_START &&
|
||||
+ scancode < TPACPI_HOTKEY_MAP_LEN) {
|
||||
+ tpacpi_input_send_key(scancode);
|
||||
+ return true;
|
||||
+ }
|
||||
+ break;
|
||||
}
|
||||
+
|
||||
return false;
|
||||
}
|
||||
|
||||
--
|
||||
2.9.4
|
||||
|
|
@ -659,6 +659,10 @@ Patch678: net-v2-ip6_tunnel-ip6_gre-fix-setting-of-DSCP-on-encapsulated-packets.
|
|||
# As linked from http://marc.info/?l=linux-netdev&m=149336766030175&w=2
|
||||
Patch679: actual_udpencap_fix.patch
|
||||
|
||||
# rhbz 1459272
|
||||
Patch680: 0001-platform-x86-thinkpad_acpi-guard-generic-hotkey-case.patch
|
||||
Patch681: 0002-platform-x86-thinkpad_acpi-add-mapping-for-new-hotke.patch
|
||||
|
||||
# END OF PATCH DEFINITIONS
|
||||
|
||||
%endif
|
||||
|
@ -2224,6 +2228,9 @@ fi
|
|||
#
|
||||
#
|
||||
%changelog
|
||||
* Tue Jun 06 2017 Laura Abbott <labbott@redhat.com>
|
||||
- Backport hotkey event support for 2017 thinkpad models (rhbz 1459272)
|
||||
|
||||
* Tue Jun 06 2017 Laura Abbott <labbott@redhat.com>
|
||||
- Enable the vDSO for arm LPAE
|
||||
|
||||
|
|
Loading…
Reference in New Issue