Commit e05d2ba1 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'platform-drivers-x86-v4.7-2' of...

Merge tag 'platform-drivers-x86-v4.7-2' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86

Pull x86 platform driver fixes from Darren Hart:
 "Minor kconfig dependency cleanup, trivial mic mute hotkey for ideapad,
  and a needed improvement in adaptive keyboard detection for thinkpad:

  platform/x86:
   - Drop duplicate dependencies on X86

  thinkpad_acpi:
   - Add support for HKEY version 0x200

  ideapad_laptop:
   - Add an event for mic mute hotkey"

* tag 'platform-drivers-x86-v4.7-2' of git://git.infradead.org/users/dvhart/linux-platform-drivers-x86:
  platform/x86: Drop duplicate dependencies on X86
  thinkpad_acpi: Add support for HKEY version 0x200
  ideapad_laptop: Add an event for mic mute hotkey
parents abd38301 25789f95
...@@ -103,7 +103,6 @@ config DELL_SMBIOS ...@@ -103,7 +103,6 @@ config DELL_SMBIOS
config DELL_LAPTOP config DELL_LAPTOP
tristate "Dell Laptop Extras" tristate "Dell Laptop Extras"
depends on X86
depends on DELL_SMBIOS depends on DELL_SMBIOS
depends on DMI depends on DMI
depends on BACKLIGHT_CLASS_DEVICE depends on BACKLIGHT_CLASS_DEVICE
...@@ -505,7 +504,7 @@ config THINKPAD_ACPI_HOTKEY_POLL ...@@ -505,7 +504,7 @@ config THINKPAD_ACPI_HOTKEY_POLL
config SENSORS_HDAPS config SENSORS_HDAPS
tristate "Thinkpad Hard Drive Active Protection System (hdaps)" tristate "Thinkpad Hard Drive Active Protection System (hdaps)"
depends on INPUT && X86 depends on INPUT
select INPUT_POLLDEV select INPUT_POLLDEV
default n default n
help help
...@@ -749,7 +748,7 @@ config TOSHIBA_WMI ...@@ -749,7 +748,7 @@ config TOSHIBA_WMI
config ACPI_CMPC config ACPI_CMPC
tristate "CMPC Laptop Extras" tristate "CMPC Laptop Extras"
depends on X86 && ACPI depends on ACPI
depends on RFKILL || RFKILL=n depends on RFKILL || RFKILL=n
select INPUT select INPUT
select BACKLIGHT_CLASS_DEVICE select BACKLIGHT_CLASS_DEVICE
...@@ -848,7 +847,7 @@ config INTEL_IMR ...@@ -848,7 +847,7 @@ config INTEL_IMR
config INTEL_PMC_CORE config INTEL_PMC_CORE
bool "Intel PMC Core driver" bool "Intel PMC Core driver"
depends on X86 && PCI depends on PCI
---help--- ---help---
The Intel Platform Controller Hub for Intel Core SoCs provides access The Intel Platform Controller Hub for Intel Core SoCs provides access
to Power Management Controller registers via a PCI interface. This to Power Management Controller registers via a PCI interface. This
...@@ -860,7 +859,7 @@ config INTEL_PMC_CORE ...@@ -860,7 +859,7 @@ config INTEL_PMC_CORE
config IBM_RTL config IBM_RTL
tristate "Device driver to enable PRTL support" tristate "Device driver to enable PRTL support"
depends on X86 && PCI depends on PCI
---help--- ---help---
Enable support for IBM Premium Real Time Mode (PRTM). Enable support for IBM Premium Real Time Mode (PRTM).
This module will allow you the enter and exit PRTM in the BIOS via This module will allow you the enter and exit PRTM in the BIOS via
...@@ -894,7 +893,6 @@ config XO15_EBOOK ...@@ -894,7 +893,6 @@ config XO15_EBOOK
config SAMSUNG_LAPTOP config SAMSUNG_LAPTOP
tristate "Samsung Laptop driver" tristate "Samsung Laptop driver"
depends on X86
depends on RFKILL || RFKILL = n depends on RFKILL || RFKILL = n
depends on ACPI_VIDEO || ACPI_VIDEO = n depends on ACPI_VIDEO || ACPI_VIDEO = n
depends on BACKLIGHT_CLASS_DEVICE depends on BACKLIGHT_CLASS_DEVICE
......
...@@ -567,6 +567,7 @@ static void ideapad_sysfs_exit(struct ideapad_private *priv) ...@@ -567,6 +567,7 @@ static void ideapad_sysfs_exit(struct ideapad_private *priv)
static const struct key_entry ideapad_keymap[] = { static const struct key_entry ideapad_keymap[] = {
{ KE_KEY, 6, { KEY_SWITCHVIDEOMODE } }, { KE_KEY, 6, { KEY_SWITCHVIDEOMODE } },
{ KE_KEY, 7, { KEY_CAMERA } }, { KE_KEY, 7, { KEY_CAMERA } },
{ KE_KEY, 8, { KEY_MICMUTE } },
{ KE_KEY, 11, { KEY_F16 } }, { KE_KEY, 11, { KEY_F16 } },
{ KE_KEY, 13, { KEY_WLAN } }, { KE_KEY, 13, { KEY_WLAN } },
{ KE_KEY, 16, { KEY_PROG1 } }, { KE_KEY, 16, { KEY_PROG1 } },
...@@ -809,6 +810,7 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data) ...@@ -809,6 +810,7 @@ static void ideapad_acpi_notify(acpi_handle handle, u32 event, void *data)
break; break;
case 13: case 13:
case 11: case 11:
case 8:
case 7: case 7:
case 6: case 6:
ideapad_input_report(priv, vpc_bit); ideapad_input_report(priv, vpc_bit);
......
...@@ -2043,6 +2043,7 @@ static int hotkey_autosleep_ack; ...@@ -2043,6 +2043,7 @@ static int hotkey_autosleep_ack;
static u32 hotkey_orig_mask; /* events the BIOS had enabled */ static u32 hotkey_orig_mask; /* events the BIOS had enabled */
static u32 hotkey_all_mask; /* all events supported in fw */ static u32 hotkey_all_mask; /* all events supported in fw */
static u32 hotkey_adaptive_all_mask; /* all adaptive events supported in fw */
static u32 hotkey_reserved_mask; /* events better left disabled */ static u32 hotkey_reserved_mask; /* events better left disabled */
static u32 hotkey_driver_mask; /* events needed by the driver */ static u32 hotkey_driver_mask; /* events needed by the driver */
static u32 hotkey_user_mask; /* events visible to userspace */ static u32 hotkey_user_mask; /* events visible to userspace */
...@@ -2742,6 +2743,17 @@ static ssize_t hotkey_all_mask_show(struct device *dev, ...@@ -2742,6 +2743,17 @@ static ssize_t hotkey_all_mask_show(struct device *dev,
static DEVICE_ATTR_RO(hotkey_all_mask); static DEVICE_ATTR_RO(hotkey_all_mask);
/* sysfs hotkey all_mask ----------------------------------------------- */
static ssize_t hotkey_adaptive_all_mask_show(struct device *dev,
struct device_attribute *attr,
char *buf)
{
return snprintf(buf, PAGE_SIZE, "0x%08x\n",
hotkey_adaptive_all_mask | hotkey_source_mask);
}
static DEVICE_ATTR_RO(hotkey_adaptive_all_mask);
/* sysfs hotkey recommended_mask --------------------------------------- */ /* sysfs hotkey recommended_mask --------------------------------------- */
static ssize_t hotkey_recommended_mask_show(struct device *dev, static ssize_t hotkey_recommended_mask_show(struct device *dev,
struct device_attribute *attr, struct device_attribute *attr,
...@@ -2985,6 +2997,7 @@ static struct attribute *hotkey_attributes[] __initdata = { ...@@ -2985,6 +2997,7 @@ static struct attribute *hotkey_attributes[] __initdata = {
&dev_attr_wakeup_hotunplug_complete.attr, &dev_attr_wakeup_hotunplug_complete.attr,
&dev_attr_hotkey_mask.attr, &dev_attr_hotkey_mask.attr,
&dev_attr_hotkey_all_mask.attr, &dev_attr_hotkey_all_mask.attr,
&dev_attr_hotkey_adaptive_all_mask.attr,
&dev_attr_hotkey_recommended_mask.attr, &dev_attr_hotkey_recommended_mask.attr,
#ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL #ifdef CONFIG_THINKPAD_ACPI_HOTKEY_POLL
&dev_attr_hotkey_source_mask.attr, &dev_attr_hotkey_source_mask.attr,
...@@ -3321,20 +3334,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm) ...@@ -3321,20 +3334,6 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
if (!tp_features.hotkey) if (!tp_features.hotkey)
return 1; return 1;
/*
* Check if we have an adaptive keyboard, like on the
* Lenovo Carbon X1 2014 (2nd Gen).
*/
if (acpi_evalf(hkey_handle, &hkeyv, "MHKV", "qd")) {
if ((hkeyv >> 8) == 2) {
tp_features.has_adaptive_kbd = true;
res = sysfs_create_group(&tpacpi_pdev->dev.kobj,
&adaptive_kbd_attr_group);
if (res)
goto err_exit;
}
}
quirks = tpacpi_check_quirks(tpacpi_hotkey_qtable, quirks = tpacpi_check_quirks(tpacpi_hotkey_qtable,
ARRAY_SIZE(tpacpi_hotkey_qtable)); ARRAY_SIZE(tpacpi_hotkey_qtable));
...@@ -3357,30 +3356,70 @@ static int __init hotkey_init(struct ibm_init_struct *iibm) ...@@ -3357,30 +3356,70 @@ static int __init hotkey_init(struct ibm_init_struct *iibm)
A30, R30, R31, T20-22, X20-21, X22-24. Detected by checking A30, R30, R31, T20-22, X20-21, X22-24. Detected by checking
for HKEY interface version 0x100 */ for HKEY interface version 0x100 */
if (acpi_evalf(hkey_handle, &hkeyv, "MHKV", "qd")) { if (acpi_evalf(hkey_handle, &hkeyv, "MHKV", "qd")) {
if ((hkeyv >> 8) != 1) { vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_HKEY,
pr_err("unknown version of the HKEY interface: 0x%x\n", "firmware HKEY interface version: 0x%x\n",
hkeyv); hkeyv);
pr_err("please report this to %s\n", TPACPI_MAIL);
} else { switch (hkeyv >> 8) {
case 1:
/* /*
* MHKV 0x100 in A31, R40, R40e, * MHKV 0x100 in A31, R40, R40e,
* T4x, X31, and later * T4x, X31, and later
*/ */
vdbg_printk(TPACPI_DBG_INIT | TPACPI_DBG_HKEY,
"firmware HKEY interface version: 0x%x\n",
hkeyv);
/* Paranoia check AND init hotkey_all_mask */ /* Paranoia check AND init hotkey_all_mask */
if (!acpi_evalf(hkey_handle, &hotkey_all_mask, if (!acpi_evalf(hkey_handle, &hotkey_all_mask,
"MHKA", "qd")) { "MHKA", "qd")) {
pr_err("missing MHKA handler, " pr_err("missing MHKA handler, please report this to %s\n",
"please report this to %s\n",
TPACPI_MAIL); TPACPI_MAIL);
/* Fallback: pre-init for FN+F3,F4,F12 */ /* Fallback: pre-init for FN+F3,F4,F12 */
hotkey_all_mask = 0x080cU; hotkey_all_mask = 0x080cU;
} else { } else {
tp_features.hotkey_mask = 1; tp_features.hotkey_mask = 1;
} }
break;
case 2:
/*
* MHKV 0x200 in X1, T460s, X260, T560, X1 Tablet (2016)
*/
/* Paranoia check AND init hotkey_all_mask */
if (!acpi_evalf(hkey_handle, &hotkey_all_mask,
"MHKA", "dd", 1)) {
pr_err("missing MHKA handler, please report this to %s\n",
TPACPI_MAIL);
/* Fallback: pre-init for FN+F3,F4,F12 */
hotkey_all_mask = 0x080cU;
} else {
tp_features.hotkey_mask = 1;
}
/*
* Check if we have an adaptive keyboard, like on the
* Lenovo Carbon X1 2014 (2nd Gen).
*/
if (acpi_evalf(hkey_handle, &hotkey_adaptive_all_mask,
"MHKA", "dd", 2)) {
if (hotkey_adaptive_all_mask != 0) {
tp_features.has_adaptive_kbd = true;
res = sysfs_create_group(
&tpacpi_pdev->dev.kobj,
&adaptive_kbd_attr_group);
if (res)
goto err_exit;
}
} else {
tp_features.has_adaptive_kbd = false;
hotkey_adaptive_all_mask = 0x0U;
}
break;
default:
pr_err("unknown version of the HKEY interface: 0x%x\n",
hkeyv);
pr_err("please report this to %s\n", TPACPI_MAIL);
break;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment