Commit e05d2ba1 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

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
Loading
Loading
Loading
Loading
+4 −6
Original line number Original line Diff line number Diff line
@@ -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


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


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


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


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


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
+2 −0
Original line number Original line Diff line number Diff line
@@ -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)
				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);
+63 −24
Original line number Original line Diff line number Diff line
@@ -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,


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 = {
	&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)
	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)
	   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);
				/* Fallback: pre-init for FN+F3,F4,F12 */
				hotkey_all_mask = 0x080cU;
			} else {
				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);
				       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;
			}
			}

			/*
			 * 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;
		}
		}
	}
	}