Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1298040 > unrolled thread

[PATCH] surface pro 4: Add support for Surface Pro 4 Buttons

Started byWeng Xuetian <wengxt@gmail.com>
First post2015-12-24 21:30 +0100
Last post2015-12-28 03:50 +0100
Articles 6 — 3 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] surface pro 4: Add support for Surface Pro 4 Buttons Weng Xuetian <wengxt@gmail.com> - 2015-12-24 21:30 +0100
    Re: [PATCH] surface pro 4: Add support for Surface Pro 4 Buttons Andy Shevchenko <andy.shevchenko@gmail.com> - 2015-12-27 14:40 +0100
    RE: [PATCH v2] surface pro 4: Add support for Surface Pro 4 Buttons "Chen, Yu C" <yu.c.chen@intel.com> - 2015-12-28 03:50 +0100
    [PATCH v2] surface pro 4: Add support for Surface Pro 4 Buttons Weng Xuetian <wengxt@gmail.com> - 2015-12-28 03:50 +0100
      [PATCH v3] surface pro 4: Add support for Surface Pro 4 Buttons Weng Xuetian <wengxt@gmail.com> - 2015-12-28 03:50 +0100
        Re: [PATCH v3] surface pro 4: Add support for Surface Pro 4 Buttons Andy Shevchenko <andy.shevchenko@gmail.com> - 2015-12-28 03:50 +0100

#1298040 — [PATCH] surface pro 4: Add support for Surface Pro 4 Buttons

FromWeng Xuetian <wengxt@gmail.com>
Date2015-12-24 21:30 +0100
Subject[PATCH] surface pro 4: Add support for Surface Pro 4 Buttons
Message-ID<qJkGm-2Q3-1@gated-at.bofh.it>
Surface Pro 4 button is managed by a device with _HID "MSHW0040"
different from Surface Pro 3.

This commit adds MSHW0040 to id list to Support Surface Pro 4, and
rename the driver to surfacepro_button accordingly.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=109871
Signed-off-by: Weng Xuetian <wengxt@gmail.com>
---
 MAINTAINERS                               |   4 +-
 drivers/platform/x86/Kconfig              |   6 +-
 drivers/platform/x86/Makefile             |   2 +-
 drivers/platform/x86/surfacepro3_button.c | 216 -----------------------------
 drivers/platform/x86/surfacepro_button.c  | 218 ++++++++++++++++++++++++++++++
 5 files changed, 224 insertions(+), 222 deletions(-)
 delete mode 100644 drivers/platform/x86/surfacepro3_button.c
 create mode 100644 drivers/platform/x86/surfacepro_button.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 233f834..1c07436 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -7019,11 +7019,11 @@ T:	git git://git.monstr.eu/linux-2.6-microblaze.git
 S:	Supported
 F:	arch/microblaze/
 
-MICROSOFT SURFACE PRO 3 BUTTON DRIVER
+MICROSOFT SURFACE PRO SERIES BUTTON DRIVER
 M:	Chen Yu <yu.c.chen@intel.com>
 L:	platform-driver-x86@vger.kernel.org
 S:	Supported
-F:	drivers/platform/x86/surfacepro3_button.c
+F:	drivers/platform/x86/surfacepro_button.c
 
 MICROTEK X6 SCANNER
 M:	Oliver Neukum <oliver@neukum.org>
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 1089eaa..3358fb0 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -939,9 +939,9 @@ config INTEL_PMC_IPC
 	The PMC is an ARC processor which defines IPC commands for communication
 	with other entities in the CPU.
 
-config SURFACE_PRO3_BUTTON
-	tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3 tablet"
+config SURFACE_PRO_BUTTON
+	tristate "Power/home/volume buttons driver for Microsoft Surface Pro Series tablet"
 	depends on ACPI && INPUT
 	---help---
-	  This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3 tablet.
+	  This driver handles the power/home/volume buttons on the Microsoft Surface Pro Series tablet.
 endif # X86_PLATFORM_DEVICES
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index 3ca78a3..b4ece33 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
@@ -61,4 +61,4 @@ obj-$(CONFIG_INTEL_SMARTCONNECT)	+= intel-smartconnect.o
 obj-$(CONFIG_PVPANIC)           += pvpanic.o
 obj-$(CONFIG_ALIENWARE_WMI)	+= alienware-wmi.o
 obj-$(CONFIG_INTEL_PMC_IPC)	+= intel_pmc_ipc.o
-obj-$(CONFIG_SURFACE_PRO3_BUTTON)	+= surfacepro3_button.o
+obj-$(CONFIG_SURFACE_PRO_BUTTON)	+= surfacepro_button.o
diff --git a/drivers/platform/x86/surfacepro3_button.c b/drivers/platform/x86/surfacepro3_button.c
deleted file mode 100644
index f7dade3..0000000
--- a/drivers/platform/x86/surfacepro3_button.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- * power/home/volume button support for
- * Microsoft Surface Pro 3 tablet.
- *
- * Copyright (c) 2015 Intel Corporation.
- * All rights reserved.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; version 2
- * of the License.
- */
-
-#include <linux/kernel.h>
-#include <linux/module.h>
-#include <linux/init.h>
-#include <linux/types.h>
-#include <linux/input.h>
-#include <linux/acpi.h>
-#include <acpi/button.h>
-
-#define SURFACE_BUTTON_HID		"MSHW0028"
-#define SURFACE_BUTTON_OBJ_NAME		"VGBI"
-#define SURFACE_BUTTON_DEVICE_NAME	"Surface Pro 3 Buttons"
-
-#define SURFACE_BUTTON_NOTIFY_PRESS_POWER	0xc6
-#define SURFACE_BUTTON_NOTIFY_RELEASE_POWER	0xc7
-
-#define SURFACE_BUTTON_NOTIFY_PRESS_HOME	0xc4
-#define SURFACE_BUTTON_NOTIFY_RELEASE_HOME	0xc5
-
-#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP	0xc0
-#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP	0xc1
-
-#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN	0xc2
-#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN	0xc3
-
-ACPI_MODULE_NAME("surface pro 3 button");
-
-MODULE_AUTHOR("Chen Yu");
-MODULE_DESCRIPTION("Surface Pro3 Button Driver");
-MODULE_LICENSE("GPL v2");
-
-/*
- * Power button, Home button, Volume buttons support is supposed to
- * be covered by drivers/input/misc/soc_button_array.c, which is implemented
- * according to "Windows ACPI Design Guide for SoC Platforms".
- * However surface pro3 seems not to obey the specs, instead it uses
- * device VGBI(MSHW0028) for dispatching the events.
- * We choose acpi_driver rather than platform_driver/i2c_driver because
- * although VGBI has an i2c resource connected to i2c controller, it
- * is not embedded in any i2c controller's scope, thus neither platform_device
- * will be created, nor i2c_client will be enumerated, we have to use
- * acpi_driver.
- */
-static const struct acpi_device_id surface_button_device_ids[] = {
-	{SURFACE_BUTTON_HID,    0},
-	{"", 0},
-};
-MODULE_DEVICE_TABLE(acpi, surface_button_device_ids);
-
-struct surface_button {
-	unsigned int type;
-	struct input_dev *input;
-	char phys[32];			/* for input device */
-	unsigned long pushed;
-	bool suspended;
-};
-
-static void surface_button_notify(struct acpi_device *device, u32 event)
-{
-	struct surface_button *button = acpi_driver_data(device);
-	struct input_dev *input;
-	int key_code = KEY_RESERVED;
-	bool pressed = false;
-
-	switch (event) {
-	/* Power button press,release handle */
-	case SURFACE_BUTTON_NOTIFY_PRESS_POWER:
-		pressed = true;
-		/*fall through*/
-	case SURFACE_BUTTON_NOTIFY_RELEASE_POWER:
-		key_code = KEY_POWER;
-		break;
-	/* Home button press,release handle */
-	case SURFACE_BUTTON_NOTIFY_PRESS_HOME:
-		pressed = true;
-		/*fall through*/
-	case SURFACE_BUTTON_NOTIFY_RELEASE_HOME:
-		key_code = KEY_LEFTMETA;
-		break;
-	/* Volume up button press,release handle */
-	case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP:
-		pressed = true;
-		/*fall through*/
-	case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP:
-		key_code = KEY_VOLUMEUP;
-		break;
-	/* Volume down button press,release handle */
-	case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN:
-		pressed = true;
-		/*fall through*/
-	case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN:
-		key_code = KEY_VOLUMEDOWN;
-		break;
-	default:
-		dev_info_ratelimited(&device->dev,
-				  "Unsupported event [0x%x]\n", event);
-		break;
-	}
-	input = button->input;
-	if (KEY_RESERVED == key_code)
-		return;
-	if (pressed)
-		pm_wakeup_event(&device->dev, 0);
-	if (button->suspended)
-		return;
-	input_report_key(input, key_code, pressed?1:0);
-	input_sync(input);
-}
-
-#ifdef CONFIG_PM_SLEEP
-static int surface_button_suspend(struct device *dev)
-{
-	struct acpi_device *device = to_acpi_device(dev);
-	struct surface_button *button = acpi_driver_data(device);
-
-	button->suspended = true;
-	return 0;
-}
-
-static int surface_button_resume(struct device *dev)
-{
-	struct acpi_device *device = to_acpi_device(dev);
-	struct surface_button *button = acpi_driver_data(device);
-
-	button->suspended = false;
-	return 0;
-}
-#endif
-
-static int surface_button_add(struct acpi_device *device)
-{
-	struct surface_button *button;
-	struct input_dev *input;
-	const char *hid = acpi_device_hid(device);
-	char *name;
-	int error;
-
-	if (strncmp(acpi_device_bid(device), SURFACE_BUTTON_OBJ_NAME,
-	    strlen(SURFACE_BUTTON_OBJ_NAME)))
-		return -ENODEV;
-
-	button = kzalloc(sizeof(struct surface_button), GFP_KERNEL);
-	if (!button)
-		return -ENOMEM;
-
-	device->driver_data = button;
-	button->input = input = input_allocate_device();
-	if (!input) {
-		error = -ENOMEM;
-		goto err_free_button;
-	}
-
-	name = acpi_device_name(device);
-	strcpy(name, SURFACE_BUTTON_DEVICE_NAME);
-	snprintf(button->phys, sizeof(button->phys), "%s/buttons", hid);
-
-	input->name = name;
-	input->phys = button->phys;
-	input->id.bustype = BUS_HOST;
-	input->dev.parent = &device->dev;
-	input_set_capability(input, EV_KEY, KEY_POWER);
-	input_set_capability(input, EV_KEY, KEY_LEFTMETA);
-	input_set_capability(input, EV_KEY, KEY_VOLUMEUP);
-	input_set_capability(input, EV_KEY, KEY_VOLUMEDOWN);
-
-	error = input_register_device(input);
-	if (error)
-		goto err_free_input;
-	dev_info(&device->dev,
-			"%s [%s]\n", name, acpi_device_bid(device));
-	return 0;
-
- err_free_input:
-	input_free_device(input);
- err_free_button:
-	kfree(button);
-	return error;
-}
-
-static int surface_button_remove(struct acpi_device *device)
-{
-	struct surface_button *button = acpi_driver_data(device);
-
-	input_unregister_device(button->input);
-	kfree(button);
-	return 0;
-}
-
-static SIMPLE_DEV_PM_OPS(surface_button_pm,
-		surface_button_suspend, surface_button_resume);
-
-static struct acpi_driver surface_button_driver = {
-	.name = "surface_pro3_button",
-	.class = "SurfacePro3",
-	.ids = surface_button_device_ids,
-	.ops = {
-		.add = surface_button_add,
-		.remove = surface_button_remove,
-		.notify = surface_button_notify,
-	},
-	.drv.pm = &surface_button_pm,
-};
-
-module_acpi_driver(surface_button_driver);
diff --git a/drivers/platform/x86/surfacepro_button.c b/drivers/platform/x86/surfacepro_button.c
new file mode 100644
index 0000000..cda52b8
--- /dev/null
+++ b/drivers/platform/x86/surfacepro_button.c
@@ -0,0 +1,218 @@
+/*
+ * power/home/volume button support for
+ * Microsoft Surface Pro Series tablet.
+ *
+ * Copyright (c) 2015 Intel Corporation.
+ * All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; version 2
+ * of the License.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/types.h>
+#include <linux/input.h>
+#include <linux/acpi.h>
+#include <acpi/button.h>
+
+#define SURFACE_PRO3_BUTTON_HID		"MSHW0028"
+#define SURFACE_PRO4_BUTTON_HID		"MSHW0040"
+#define SURFACE_BUTTON_OBJ_NAME		"VGBI"
+#define SURFACE_BUTTON_DEVICE_NAME	"Surface Pro Series Buttons"
+
+#define SURFACE_BUTTON_NOTIFY_PRESS_POWER	0xc6
+#define SURFACE_BUTTON_NOTIFY_RELEASE_POWER	0xc7
+
+#define SURFACE_BUTTON_NOTIFY_PRESS_HOME	0xc4
+#define SURFACE_BUTTON_NOTIFY_RELEASE_HOME	0xc5
+
+#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP	0xc0
+#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP	0xc1
+
+#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN	0xc2
+#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN	0xc3
+
+ACPI_MODULE_NAME("surface pro series button");
+
+MODULE_AUTHOR("Chen Yu");
+MODULE_DESCRIPTION("Surface Pro Series Button Driver");
+MODULE_LICENSE("GPL v2");
+
+/*
+ * Power button, Home button, Volume buttons support is supposed to
+ * be covered by drivers/input/misc/soc_button_array.c, which is implemented
+ * according to "Windows ACPI Design Guide for SoC Platforms".
+ * However surface pro3 seems not to obey the specs, instead it uses
+ * device VGBI(MSHW0028) for dispatching the events.
+ * We choose acpi_driver rather than platform_driver/i2c_driver because
+ * although VGBI has an i2c resource connected to i2c controller, it
+ * is not embedded in any i2c controller's scope, thus neither platform_device
+ * will be created, nor i2c_client will be enumerated, we have to use
+ * acpi_driver.
+ */
+static const struct acpi_device_id surface_button_device_ids[] = {
+	{SURFACE_PRO3_BUTTON_HID,    0},
+	{SURFACE_PRO4_BUTTON_HID,    0},
+	{"", 0},
+};
+MODULE_DEVICE_TABLE(acpi, surface_button_device_ids);
+
+struct surface_button {
+	unsigned int type;
+	struct input_dev *input;
+	char phys[32];			/* for input device */
+	unsigned long pushed;
+	bool suspended;
+};
+
+static void surface_button_notify(struct acpi_device *device, u32 event)
+{
+	struct surface_button *button = acpi_driver_data(device);
+	struct input_dev *input;
+	int key_code = KEY_RESERVED;
+	bool pressed = false;
+
+	switch (event) {
+	/* Power button press,release handle */
+	case SURFACE_BUTTON_NOTIFY_PRESS_POWER:
+		pressed = true;
+		/*fall through*/
+	case SURFACE_BUTTON_NOTIFY_RELEASE_POWER:
+		key_code = KEY_POWER;
+		break;
+	/* Home button press,release handle */
+	case SURFACE_BUTTON_NOTIFY_PRESS_HOME:
+		pressed = true;
+		/*fall through*/
+	case SURFACE_BUTTON_NOTIFY_RELEASE_HOME:
+		key_code = KEY_LEFTMETA;
+		break;
+	/* Volume up button press,release handle */
+	case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP:
+		pressed = true;
+		/*fall through*/
+	case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP:
+		key_code = KEY_VOLUMEUP;
+		break;
+	/* Volume down button press,release handle */
+	case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN:
+		pressed = true;
+		/*fall through*/
+	case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN:
+		key_code = KEY_VOLUMEDOWN;
+		break;
+	default:
+		dev_info_ratelimited(&device->dev,
+				  "Unsupported event [0x%x]\n", event);
+		break;
+	}
+	input = button->input;
+	if (KEY_RESERVED == key_code)
+		return;
+	if (pressed)
+		pm_wakeup_event(&device->dev, 0);
+	if (button->suspended)
+		return;
+	input_report_key(input, key_code, pressed?1:0);
+	input_sync(input);
+}
+
+#ifdef CONFIG_PM_SLEEP
+static int surface_button_suspend(struct device *dev)
+{
+	struct acpi_device *device = to_acpi_device(dev);
+	struct surface_button *button = acpi_driver_data(device);
+
+	button->suspended = true;
+	return 0;
+}
+
+static int surface_button_resume(struct device *dev)
+{
+	struct acpi_device *device = to_acpi_device(dev);
+	struct surface_button *button = acpi_driver_data(device);
+
+	button->suspended = false;
+	return 0;
+}
+#endif
+
+static int surface_button_add(struct acpi_device *device)
+{
+	struct surface_button *button;
+	struct input_dev *input;
+	const char *hid = acpi_device_hid(device);
+	char *name;
+	int error;
+
+	if (strncmp(acpi_device_bid(device), SURFACE_BUTTON_OBJ_NAME,
+	    strlen(SURFACE_BUTTON_OBJ_NAME)))
+		return -ENODEV;
+
+	button = kzalloc(sizeof(struct surface_button), GFP_KERNEL);
+	if (!button)
+		return -ENOMEM;
+
+	device->driver_data = button;
+	button->input = input = input_allocate_device();
+	if (!input) {
+		error = -ENOMEM;
+		goto err_free_button;
+	}
+
+	name = acpi_device_name(device);
+	strcpy(name, SURFACE_BUTTON_DEVICE_NAME);
+	snprintf(button->phys, sizeof(button->phys), "%s/buttons", hid);
+
+	input->name = name;
+	input->phys = button->phys;
+	input->id.bustype = BUS_HOST;
+	input->dev.parent = &device->dev;
+	input_set_capability(input, EV_KEY, KEY_POWER);
+	input_set_capability(input, EV_KEY, KEY_LEFTMETA);
+	input_set_capability(input, EV_KEY, KEY_VOLUMEUP);
+	input_set_capability(input, EV_KEY, KEY_VOLUMEDOWN);
+
+	error = input_register_device(input);
+	if (error)
+		goto err_free_input;
+	dev_info(&device->dev,
+			"%s [%s]\n", name, acpi_device_bid(device));
+	return 0;
+
+ err_free_input:
+	input_free_device(input);
+ err_free_button:
+	kfree(button);
+	return error;
+}
+
+static int surface_button_remove(struct acpi_device *device)
+{
+	struct surface_button *button = acpi_driver_data(device);
+
+	input_unregister_device(button->input);
+	kfree(button);
+	return 0;
+}
+
+static SIMPLE_DEV_PM_OPS(surface_button_pm,
+		surface_button_suspend, surface_button_resume);
+
+static struct acpi_driver surface_button_driver = {
+	.name = "surface_pro_button",
+	.class = "SurfacePro",
+	.ids = surface_button_device_ids,
+	.ops = {
+		.add = surface_button_add,
+		.remove = surface_button_remove,
+		.notify = surface_button_notify,
+	},
+	.drv.pm = &surface_button_pm,
+};
+
+module_acpi_driver(surface_button_driver);
-- 
2.6.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1298395

FromAndy Shevchenko <andy.shevchenko@gmail.com>
Date2015-12-27 14:40 +0100
Message-ID<qKjIf-7Ca-25@gated-at.bofh.it>
In reply to#1298040
On Thu, Dec 24, 2015 at 10:28 PM, Weng Xuetian <wengxt@gmail.com> wrote:
> Surface Pro 4 button is managed by a device with _HID "MSHW0040"
> different from Surface Pro 3.
>
> This commit adds MSHW0040 to id list to Support Surface Pro 4, and
> rename the driver to surfacepro_button accordingly.
>

No review until you resend with a properly formatted patch, i.e. with -M -C.

> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=109871
> Signed-off-by: Weng Xuetian <wengxt@gmail.com>
> ---
>  MAINTAINERS                               |   4 +-
>  drivers/platform/x86/Kconfig              |   6 +-
>  drivers/platform/x86/Makefile             |   2 +-
>  drivers/platform/x86/surfacepro3_button.c | 216 -----------------------------
>  drivers/platform/x86/surfacepro_button.c  | 218 ++++++++++++++++++++++++++++++
>  5 files changed, 224 insertions(+), 222 deletions(-)
>  delete mode 100644 drivers/platform/x86/surfacepro3_button.c
>  create mode 100644 drivers/platform/x86/surfacepro_button.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 233f834..1c07436 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -7019,11 +7019,11 @@ T:      git git://git.monstr.eu/linux-2.6-microblaze.git
>  S:     Supported
>  F:     arch/microblaze/
>
> -MICROSOFT SURFACE PRO 3 BUTTON DRIVER
> +MICROSOFT SURFACE PRO SERIES BUTTON DRIVER
>  M:     Chen Yu <yu.c.chen@intel.com>
>  L:     platform-driver-x86@vger.kernel.org
>  S:     Supported
> -F:     drivers/platform/x86/surfacepro3_button.c
> +F:     drivers/platform/x86/surfacepro_button.c
>
>  MICROTEK X6 SCANNER
>  M:     Oliver Neukum <oliver@neukum.org>
> diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
> index 1089eaa..3358fb0 100644
> --- a/drivers/platform/x86/Kconfig
> +++ b/drivers/platform/x86/Kconfig
> @@ -939,9 +939,9 @@ config INTEL_PMC_IPC
>         The PMC is an ARC processor which defines IPC commands for communication
>         with other entities in the CPU.
>
> -config SURFACE_PRO3_BUTTON
> -       tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3 tablet"
> +config SURFACE_PRO_BUTTON
> +       tristate "Power/home/volume buttons driver for Microsoft Surface Pro Series tablet"
>         depends on ACPI && INPUT
>         ---help---
> -         This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3 tablet.
> +         This driver handles the power/home/volume buttons on the Microsoft Surface Pro Series tablet.
>  endif # X86_PLATFORM_DEVICES
> diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
> index 3ca78a3..b4ece33 100644
> --- a/drivers/platform/x86/Makefile
> +++ b/drivers/platform/x86/Makefile
> @@ -61,4 +61,4 @@ obj-$(CONFIG_INTEL_SMARTCONNECT)      += intel-smartconnect.o
>  obj-$(CONFIG_PVPANIC)           += pvpanic.o
>  obj-$(CONFIG_ALIENWARE_WMI)    += alienware-wmi.o
>  obj-$(CONFIG_INTEL_PMC_IPC)    += intel_pmc_ipc.o
> -obj-$(CONFIG_SURFACE_PRO3_BUTTON)      += surfacepro3_button.o
> +obj-$(CONFIG_SURFACE_PRO_BUTTON)       += surfacepro_button.o
> diff --git a/drivers/platform/x86/surfacepro3_button.c b/drivers/platform/x86/surfacepro3_button.c
> deleted file mode 100644
> index f7dade3..0000000
> --- a/drivers/platform/x86/surfacepro3_button.c
> +++ /dev/null
> @@ -1,216 +0,0 @@
> -/*
> - * power/home/volume button support for
> - * Microsoft Surface Pro 3 tablet.
> - *
> - * Copyright (c) 2015 Intel Corporation.
> - * All rights reserved.
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; version 2
> - * of the License.
> - */
> -
> -#include <linux/kernel.h>
> -#include <linux/module.h>
> -#include <linux/init.h>
> -#include <linux/types.h>
> -#include <linux/input.h>
> -#include <linux/acpi.h>
> -#include <acpi/button.h>
> -
> -#define SURFACE_BUTTON_HID             "MSHW0028"
> -#define SURFACE_BUTTON_OBJ_NAME                "VGBI"
> -#define SURFACE_BUTTON_DEVICE_NAME     "Surface Pro 3 Buttons"
> -
> -#define SURFACE_BUTTON_NOTIFY_PRESS_POWER      0xc6
> -#define SURFACE_BUTTON_NOTIFY_RELEASE_POWER    0xc7
> -
> -#define SURFACE_BUTTON_NOTIFY_PRESS_HOME       0xc4
> -#define SURFACE_BUTTON_NOTIFY_RELEASE_HOME     0xc5
> -
> -#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP  0xc0
> -#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP        0xc1
> -
> -#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN        0xc2
> -#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN      0xc3
> -
> -ACPI_MODULE_NAME("surface pro 3 button");
> -
> -MODULE_AUTHOR("Chen Yu");
> -MODULE_DESCRIPTION("Surface Pro3 Button Driver");
> -MODULE_LICENSE("GPL v2");
> -
> -/*
> - * Power button, Home button, Volume buttons support is supposed to
> - * be covered by drivers/input/misc/soc_button_array.c, which is implemented
> - * according to "Windows ACPI Design Guide for SoC Platforms".
> - * However surface pro3 seems not to obey the specs, instead it uses
> - * device VGBI(MSHW0028) for dispatching the events.
> - * We choose acpi_driver rather than platform_driver/i2c_driver because
> - * although VGBI has an i2c resource connected to i2c controller, it
> - * is not embedded in any i2c controller's scope, thus neither platform_device
> - * will be created, nor i2c_client will be enumerated, we have to use
> - * acpi_driver.
> - */
> -static const struct acpi_device_id surface_button_device_ids[] = {
> -       {SURFACE_BUTTON_HID,    0},
> -       {"", 0},
> -};
> -MODULE_DEVICE_TABLE(acpi, surface_button_device_ids);
> -
> -struct surface_button {
> -       unsigned int type;
> -       struct input_dev *input;
> -       char phys[32];                  /* for input device */
> -       unsigned long pushed;
> -       bool suspended;
> -};
> -
> -static void surface_button_notify(struct acpi_device *device, u32 event)
> -{
> -       struct surface_button *button = acpi_driver_data(device);
> -       struct input_dev *input;
> -       int key_code = KEY_RESERVED;
> -       bool pressed = false;
> -
> -       switch (event) {
> -       /* Power button press,release handle */
> -       case SURFACE_BUTTON_NOTIFY_PRESS_POWER:
> -               pressed = true;
> -               /*fall through*/
> -       case SURFACE_BUTTON_NOTIFY_RELEASE_POWER:
> -               key_code = KEY_POWER;
> -               break;
> -       /* Home button press,release handle */
> -       case SURFACE_BUTTON_NOTIFY_PRESS_HOME:
> -               pressed = true;
> -               /*fall through*/
> -       case SURFACE_BUTTON_NOTIFY_RELEASE_HOME:
> -               key_code = KEY_LEFTMETA;
> -               break;
> -       /* Volume up button press,release handle */
> -       case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP:
> -               pressed = true;
> -               /*fall through*/
> -       case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP:
> -               key_code = KEY_VOLUMEUP;
> -               break;
> -       /* Volume down button press,release handle */
> -       case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN:
> -               pressed = true;
> -               /*fall through*/
> -       case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN:
> -               key_code = KEY_VOLUMEDOWN;
> -               break;
> -       default:
> -               dev_info_ratelimited(&device->dev,
> -                                 "Unsupported event [0x%x]\n", event);
> -               break;
> -       }
> -       input = button->input;
> -       if (KEY_RESERVED == key_code)
> -               return;
> -       if (pressed)
> -               pm_wakeup_event(&device->dev, 0);
> -       if (button->suspended)
> -               return;
> -       input_report_key(input, key_code, pressed?1:0);
> -       input_sync(input);
> -}
> -
> -#ifdef CONFIG_PM_SLEEP
> -static int surface_button_suspend(struct device *dev)
> -{
> -       struct acpi_device *device = to_acpi_device(dev);
> -       struct surface_button *button = acpi_driver_data(device);
> -
> -       button->suspended = true;
> -       return 0;
> -}
> -
> -static int surface_button_resume(struct device *dev)
> -{
> -       struct acpi_device *device = to_acpi_device(dev);
> -       struct surface_button *button = acpi_driver_data(device);
> -
> -       button->suspended = false;
> -       return 0;
> -}
> -#endif
> -
> -static int surface_button_add(struct acpi_device *device)
> -{
> -       struct surface_button *button;
> -       struct input_dev *input;
> -       const char *hid = acpi_device_hid(device);
> -       char *name;
> -       int error;
> -
> -       if (strncmp(acpi_device_bid(device), SURFACE_BUTTON_OBJ_NAME,
> -           strlen(SURFACE_BUTTON_OBJ_NAME)))
> -               return -ENODEV;
> -
> -       button = kzalloc(sizeof(struct surface_button), GFP_KERNEL);
> -       if (!button)
> -               return -ENOMEM;
> -
> -       device->driver_data = button;
> -       button->input = input = input_allocate_device();
> -       if (!input) {
> -               error = -ENOMEM;
> -               goto err_free_button;
> -       }
> -
> -       name = acpi_device_name(device);
> -       strcpy(name, SURFACE_BUTTON_DEVICE_NAME);
> -       snprintf(button->phys, sizeof(button->phys), "%s/buttons", hid);
> -
> -       input->name = name;
> -       input->phys = button->phys;
> -       input->id.bustype = BUS_HOST;
> -       input->dev.parent = &device->dev;
> -       input_set_capability(input, EV_KEY, KEY_POWER);
> -       input_set_capability(input, EV_KEY, KEY_LEFTMETA);
> -       input_set_capability(input, EV_KEY, KEY_VOLUMEUP);
> -       input_set_capability(input, EV_KEY, KEY_VOLUMEDOWN);
> -
> -       error = input_register_device(input);
> -       if (error)
> -               goto err_free_input;
> -       dev_info(&device->dev,
> -                       "%s [%s]\n", name, acpi_device_bid(device));
> -       return 0;
> -
> - err_free_input:
> -       input_free_device(input);
> - err_free_button:
> -       kfree(button);
> -       return error;
> -}
> -
> -static int surface_button_remove(struct acpi_device *device)
> -{
> -       struct surface_button *button = acpi_driver_data(device);
> -
> -       input_unregister_device(button->input);
> -       kfree(button);
> -       return 0;
> -}
> -
> -static SIMPLE_DEV_PM_OPS(surface_button_pm,
> -               surface_button_suspend, surface_button_resume);
> -
> -static struct acpi_driver surface_button_driver = {
> -       .name = "surface_pro3_button",
> -       .class = "SurfacePro3",
> -       .ids = surface_button_device_ids,
> -       .ops = {
> -               .add = surface_button_add,
> -               .remove = surface_button_remove,
> -               .notify = surface_button_notify,
> -       },
> -       .drv.pm = &surface_button_pm,
> -};
> -
> -module_acpi_driver(surface_button_driver);
> diff --git a/drivers/platform/x86/surfacepro_button.c b/drivers/platform/x86/surfacepro_button.c
> new file mode 100644
> index 0000000..cda52b8
> --- /dev/null
> +++ b/drivers/platform/x86/surfacepro_button.c
> @@ -0,0 +1,218 @@
> +/*
> + * power/home/volume button support for
> + * Microsoft Surface Pro Series tablet.
> + *
> + * Copyright (c) 2015 Intel Corporation.
> + * All rights reserved.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License
> + * as published by the Free Software Foundation; version 2
> + * of the License.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/init.h>
> +#include <linux/types.h>
> +#include <linux/input.h>
> +#include <linux/acpi.h>
> +#include <acpi/button.h>
> +
> +#define SURFACE_PRO3_BUTTON_HID                "MSHW0028"
> +#define SURFACE_PRO4_BUTTON_HID                "MSHW0040"
> +#define SURFACE_BUTTON_OBJ_NAME                "VGBI"
> +#define SURFACE_BUTTON_DEVICE_NAME     "Surface Pro Series Buttons"
> +
> +#define SURFACE_BUTTON_NOTIFY_PRESS_POWER      0xc6
> +#define SURFACE_BUTTON_NOTIFY_RELEASE_POWER    0xc7
> +
> +#define SURFACE_BUTTON_NOTIFY_PRESS_HOME       0xc4
> +#define SURFACE_BUTTON_NOTIFY_RELEASE_HOME     0xc5
> +
> +#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP  0xc0
> +#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP        0xc1
> +
> +#define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN        0xc2
> +#define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN      0xc3
> +
> +ACPI_MODULE_NAME("surface pro series button");
> +
> +MODULE_AUTHOR("Chen Yu");
> +MODULE_DESCRIPTION("Surface Pro Series Button Driver");
> +MODULE_LICENSE("GPL v2");
> +
> +/*
> + * Power button, Home button, Volume buttons support is supposed to
> + * be covered by drivers/input/misc/soc_button_array.c, which is implemented
> + * according to "Windows ACPI Design Guide for SoC Platforms".
> + * However surface pro3 seems not to obey the specs, instead it uses
> + * device VGBI(MSHW0028) for dispatching the events.
> + * We choose acpi_driver rather than platform_driver/i2c_driver because
> + * although VGBI has an i2c resource connected to i2c controller, it
> + * is not embedded in any i2c controller's scope, thus neither platform_device
> + * will be created, nor i2c_client will be enumerated, we have to use
> + * acpi_driver.
> + */
> +static const struct acpi_device_id surface_button_device_ids[] = {
> +       {SURFACE_PRO3_BUTTON_HID,    0},
> +       {SURFACE_PRO4_BUTTON_HID,    0},
> +       {"", 0},
> +};
> +MODULE_DEVICE_TABLE(acpi, surface_button_device_ids);
> +
> +struct surface_button {
> +       unsigned int type;
> +       struct input_dev *input;
> +       char phys[32];                  /* for input device */
> +       unsigned long pushed;
> +       bool suspended;
> +};
> +
> +static void surface_button_notify(struct acpi_device *device, u32 event)
> +{
> +       struct surface_button *button = acpi_driver_data(device);
> +       struct input_dev *input;
> +       int key_code = KEY_RESERVED;
> +       bool pressed = false;
> +
> +       switch (event) {
> +       /* Power button press,release handle */
> +       case SURFACE_BUTTON_NOTIFY_PRESS_POWER:
> +               pressed = true;
> +               /*fall through*/
> +       case SURFACE_BUTTON_NOTIFY_RELEASE_POWER:
> +               key_code = KEY_POWER;
> +               break;
> +       /* Home button press,release handle */
> +       case SURFACE_BUTTON_NOTIFY_PRESS_HOME:
> +               pressed = true;
> +               /*fall through*/
> +       case SURFACE_BUTTON_NOTIFY_RELEASE_HOME:
> +               key_code = KEY_LEFTMETA;
> +               break;
> +       /* Volume up button press,release handle */
> +       case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_UP:
> +               pressed = true;
> +               /*fall through*/
> +       case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_UP:
> +               key_code = KEY_VOLUMEUP;
> +               break;
> +       /* Volume down button press,release handle */
> +       case SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN:
> +               pressed = true;
> +               /*fall through*/
> +       case SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN:
> +               key_code = KEY_VOLUMEDOWN;
> +               break;
> +       default:
> +               dev_info_ratelimited(&device->dev,
> +                                 "Unsupported event [0x%x]\n", event);
> +               break;
> +       }
> +       input = button->input;
> +       if (KEY_RESERVED == key_code)
> +               return;
> +       if (pressed)
> +               pm_wakeup_event(&device->dev, 0);
> +       if (button->suspended)
> +               return;
> +       input_report_key(input, key_code, pressed?1:0);
> +       input_sync(input);
> +}
> +
> +#ifdef CONFIG_PM_SLEEP
> +static int surface_button_suspend(struct device *dev)
> +{
> +       struct acpi_device *device = to_acpi_device(dev);
> +       struct surface_button *button = acpi_driver_data(device);
> +
> +       button->suspended = true;
> +       return 0;
> +}
> +
> +static int surface_button_resume(struct device *dev)
> +{
> +       struct acpi_device *device = to_acpi_device(dev);
> +       struct surface_button *button = acpi_driver_data(device);
> +
> +       button->suspended = false;
> +       return 0;
> +}
> +#endif
> +
> +static int surface_button_add(struct acpi_device *device)
> +{
> +       struct surface_button *button;
> +       struct input_dev *input;
> +       const char *hid = acpi_device_hid(device);
> +       char *name;
> +       int error;
> +
> +       if (strncmp(acpi_device_bid(device), SURFACE_BUTTON_OBJ_NAME,
> +           strlen(SURFACE_BUTTON_OBJ_NAME)))
> +               return -ENODEV;
> +
> +       button = kzalloc(sizeof(struct surface_button), GFP_KERNEL);
> +       if (!button)
> +               return -ENOMEM;
> +
> +       device->driver_data = button;
> +       button->input = input = input_allocate_device();
> +       if (!input) {
> +               error = -ENOMEM;
> +               goto err_free_button;
> +       }
> +
> +       name = acpi_device_name(device);
> +       strcpy(name, SURFACE_BUTTON_DEVICE_NAME);
> +       snprintf(button->phys, sizeof(button->phys), "%s/buttons", hid);
> +
> +       input->name = name;
> +       input->phys = button->phys;
> +       input->id.bustype = BUS_HOST;
> +       input->dev.parent = &device->dev;
> +       input_set_capability(input, EV_KEY, KEY_POWER);
> +       input_set_capability(input, EV_KEY, KEY_LEFTMETA);
> +       input_set_capability(input, EV_KEY, KEY_VOLUMEUP);
> +       input_set_capability(input, EV_KEY, KEY_VOLUMEDOWN);
> +
> +       error = input_register_device(input);
> +       if (error)
> +               goto err_free_input;
> +       dev_info(&device->dev,
> +                       "%s [%s]\n", name, acpi_device_bid(device));
> +       return 0;
> +
> + err_free_input:
> +       input_free_device(input);
> + err_free_button:
> +       kfree(button);
> +       return error;
> +}
> +
> +static int surface_button_remove(struct acpi_device *device)
> +{
> +       struct surface_button *button = acpi_driver_data(device);
> +
> +       input_unregister_device(button->input);
> +       kfree(button);
> +       return 0;
> +}
> +
> +static SIMPLE_DEV_PM_OPS(surface_button_pm,
> +               surface_button_suspend, surface_button_resume);
> +
> +static struct acpi_driver surface_button_driver = {
> +       .name = "surface_pro_button",
> +       .class = "SurfacePro",
> +       .ids = surface_button_device_ids,
> +       .ops = {
> +               .add = surface_button_add,
> +               .remove = surface_button_remove,
> +               .notify = surface_button_notify,
> +       },
> +       .drv.pm = &surface_button_pm,
> +};
> +
> +module_acpi_driver(surface_button_driver);
> --
> 2.6.4
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/



-- 
With Best Regards,
Andy Shevchenko
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1298409 — RE: [PATCH v2] surface pro 4: Add support for Surface Pro 4 Buttons

From"Chen, Yu C" <yu.c.chen@intel.com>
Date2015-12-28 03:50 +0100
SubjectRE: [PATCH v2] surface pro 4: Add support for Surface Pro 4 Buttons
Message-ID<qKw2K-3Io-33@gated-at.bofh.it>
In reply to#1298040
Hi,

> -----Original Message-----
> From: Weng Xuetian [mailto:wengxt@gmail.com]
> Sent: Monday, December 28, 2015 1:30 AM
> To: Chen, Yu C
> Cc: Darren Hart; linux-kernel@vger.kernel.org; platform-driver-
> x86@vger.kernel.org; Weng Xuetian
> Subject: [PATCH v2] surface pro 4: Add support for Surface Pro 4 Buttons
> 
> Surface Pro 4 button is managed by a device with _HID "MSHW0040"
> different from Surface Pro 3.
> 
s/button is/buttons are
> This commit adds MSHW0040 to id list to Support Surface Pro 4, and rename
> the driver to surfacepro_button accordingly.
> 
s/Support/support the
s/rename/renames
> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=109871
> Signed-off-by: Weng Xuetian <wengxt@gmail.com>
> ---
> v2:
>  - Reformat patch with -M -C
others look good to me, 

thanks,
yu


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1298422 — [PATCH v2] surface pro 4: Add support for Surface Pro 4 Buttons

FromWeng Xuetian <wengxt@gmail.com>
Date2015-12-28 03:50 +0100
Subject[PATCH v2] surface pro 4: Add support for Surface Pro 4 Buttons
Message-ID<qKw2K-3Io-35@gated-at.bofh.it>
In reply to#1298040
Surface Pro 4 button is managed by a device with _HID "MSHW0040"
different from Surface Pro 3.

This commit adds MSHW0040 to id list to Support Surface Pro 4, and
rename the driver to surfacepro_button accordingly.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=109871
Signed-off-by: Weng Xuetian <wengxt@gmail.com>
---
v2:
 - Reformat patch with -M -C
---
 MAINTAINERS                                            |  4 ++--
 drivers/platform/x86/Kconfig                           |  6 +++---
 drivers/platform/x86/Makefile                          |  2 +-
 .../x86/{surfacepro3_button.c => surfacepro_button.c}  | 18 ++++++++++--------
 4 files changed, 16 insertions(+), 14 deletions(-)
 rename drivers/platform/x86/{surfacepro3_button.c => surfacepro_button.c} (93%)

diff --git a/MAINTAINERS b/MAINTAINERS
index 233f834..1c07436 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -7019,11 +7019,11 @@ T:	git git://git.monstr.eu/linux-2.6-microblaze.git
 S:	Supported
 F:	arch/microblaze/
 
-MICROSOFT SURFACE PRO 3 BUTTON DRIVER
+MICROSOFT SURFACE PRO SERIES BUTTON DRIVER
 M:	Chen Yu <yu.c.chen@intel.com>
 L:	platform-driver-x86@vger.kernel.org
 S:	Supported
-F:	drivers/platform/x86/surfacepro3_button.c
+F:	drivers/platform/x86/surfacepro_button.c
 
 MICROTEK X6 SCANNER
 M:	Oliver Neukum <oliver@neukum.org>
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 1089eaa..3358fb0 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -939,9 +939,9 @@ config INTEL_PMC_IPC
 	The PMC is an ARC processor which defines IPC commands for communication
 	with other entities in the CPU.
 
-config SURFACE_PRO3_BUTTON
-	tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3 tablet"
+config SURFACE_PRO_BUTTON
+	tristate "Power/home/volume buttons driver for Microsoft Surface Pro Series tablet"
 	depends on ACPI && INPUT
 	---help---
-	  This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3 tablet.
+	  This driver handles the power/home/volume buttons on the Microsoft Surface Pro Series tablet.
 endif # X86_PLATFORM_DEVICES
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index 3ca78a3..b4ece33 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
@@ -61,4 +61,4 @@ obj-$(CONFIG_INTEL_SMARTCONNECT)	+= intel-smartconnect.o
 obj-$(CONFIG_PVPANIC)           += pvpanic.o
 obj-$(CONFIG_ALIENWARE_WMI)	+= alienware-wmi.o
 obj-$(CONFIG_INTEL_PMC_IPC)	+= intel_pmc_ipc.o
-obj-$(CONFIG_SURFACE_PRO3_BUTTON)	+= surfacepro3_button.o
+obj-$(CONFIG_SURFACE_PRO_BUTTON)	+= surfacepro_button.o
diff --git a/drivers/platform/x86/surfacepro3_button.c b/drivers/platform/x86/surfacepro_button.c
similarity index 93%
rename from drivers/platform/x86/surfacepro3_button.c
rename to drivers/platform/x86/surfacepro_button.c
index f7dade3..cda52b8 100644
--- a/drivers/platform/x86/surfacepro3_button.c
+++ b/drivers/platform/x86/surfacepro_button.c
@@ -1,6 +1,6 @@
 /*
  * power/home/volume button support for
- * Microsoft Surface Pro 3 tablet.
+ * Microsoft Surface Pro Series tablet.
  *
  * Copyright (c) 2015 Intel Corporation.
  * All rights reserved.
@@ -19,9 +19,10 @@
 #include <linux/acpi.h>
 #include <acpi/button.h>
 
-#define SURFACE_BUTTON_HID		"MSHW0028"
+#define SURFACE_PRO3_BUTTON_HID		"MSHW0028"
+#define SURFACE_PRO4_BUTTON_HID		"MSHW0040"
 #define SURFACE_BUTTON_OBJ_NAME		"VGBI"
-#define SURFACE_BUTTON_DEVICE_NAME	"Surface Pro 3 Buttons"
+#define SURFACE_BUTTON_DEVICE_NAME	"Surface Pro Series Buttons"
 
 #define SURFACE_BUTTON_NOTIFY_PRESS_POWER	0xc6
 #define SURFACE_BUTTON_NOTIFY_RELEASE_POWER	0xc7
@@ -35,10 +36,10 @@
 #define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN	0xc2
 #define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN	0xc3
 
-ACPI_MODULE_NAME("surface pro 3 button");
+ACPI_MODULE_NAME("surface pro series button");
 
 MODULE_AUTHOR("Chen Yu");
-MODULE_DESCRIPTION("Surface Pro3 Button Driver");
+MODULE_DESCRIPTION("Surface Pro Series Button Driver");
 MODULE_LICENSE("GPL v2");
 
 /*
@@ -54,7 +55,8 @@ MODULE_LICENSE("GPL v2");
  * acpi_driver.
  */
 static const struct acpi_device_id surface_button_device_ids[] = {
-	{SURFACE_BUTTON_HID,    0},
+	{SURFACE_PRO3_BUTTON_HID,    0},
+	{SURFACE_PRO4_BUTTON_HID,    0},
 	{"", 0},
 };
 MODULE_DEVICE_TABLE(acpi, surface_button_device_ids);
@@ -202,8 +204,8 @@ static SIMPLE_DEV_PM_OPS(surface_button_pm,
 		surface_button_suspend, surface_button_resume);
 
 static struct acpi_driver surface_button_driver = {
-	.name = "surface_pro3_button",
-	.class = "SurfacePro3",
+	.name = "surface_pro_button",
+	.class = "SurfacePro",
 	.ids = surface_button_device_ids,
 	.ops = {
 		.add = surface_button_add,
-- 
2.6.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1298453 — [PATCH v3] surface pro 4: Add support for Surface Pro 4 Buttons

FromWeng Xuetian <wengxt@gmail.com>
Date2015-12-28 03:50 +0100
Subject[PATCH v3] surface pro 4: Add support for Surface Pro 4 Buttons
Message-ID<qKw3b-3Io-603@gated-at.bofh.it>
In reply to#1298422
Surface Pro 4 buttons are managed by a device with _HID "MSHW0040"
different from Surface Pro 3.

This commit adds MSHW0040 to id list to support the Surface Pro 4, and
renames the driver to surfacepro_button accordingly.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=109871
Signed-off-by: Weng Xuetian <wengxt@gmail.com>
---
v3:
 - Fix commit message grammar mistakes.
v2:
 - Reformat patch with -M -C
---
 MAINTAINERS                                            |  4 ++--
 drivers/platform/x86/Kconfig                           |  6 +++---
 drivers/platform/x86/Makefile                          |  2 +-
 .../x86/{surfacepro3_button.c => surfacepro_button.c}  | 18 ++++++++++--------
 4 files changed, 16 insertions(+), 14 deletions(-)
 rename drivers/platform/x86/{surfacepro3_button.c => surfacepro_button.c} (93%)

diff --git a/MAINTAINERS b/MAINTAINERS
index 233f834..1c07436 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -7019,11 +7019,11 @@ T:	git git://git.monstr.eu/linux-2.6-microblaze.git
 S:	Supported
 F:	arch/microblaze/
 
-MICROSOFT SURFACE PRO 3 BUTTON DRIVER
+MICROSOFT SURFACE PRO SERIES BUTTON DRIVER
 M:	Chen Yu <yu.c.chen@intel.com>
 L:	platform-driver-x86@vger.kernel.org
 S:	Supported
-F:	drivers/platform/x86/surfacepro3_button.c
+F:	drivers/platform/x86/surfacepro_button.c
 
 MICROTEK X6 SCANNER
 M:	Oliver Neukum <oliver@neukum.org>
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 1089eaa..3358fb0 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -939,9 +939,9 @@ config INTEL_PMC_IPC
 	The PMC is an ARC processor which defines IPC commands for communication
 	with other entities in the CPU.
 
-config SURFACE_PRO3_BUTTON
-	tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3 tablet"
+config SURFACE_PRO_BUTTON
+	tristate "Power/home/volume buttons driver for Microsoft Surface Pro Series tablet"
 	depends on ACPI && INPUT
 	---help---
-	  This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3 tablet.
+	  This driver handles the power/home/volume buttons on the Microsoft Surface Pro Series tablet.
 endif # X86_PLATFORM_DEVICES
diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
index 3ca78a3..b4ece33 100644
--- a/drivers/platform/x86/Makefile
+++ b/drivers/platform/x86/Makefile
@@ -61,4 +61,4 @@ obj-$(CONFIG_INTEL_SMARTCONNECT)	+= intel-smartconnect.o
 obj-$(CONFIG_PVPANIC)           += pvpanic.o
 obj-$(CONFIG_ALIENWARE_WMI)	+= alienware-wmi.o
 obj-$(CONFIG_INTEL_PMC_IPC)	+= intel_pmc_ipc.o
-obj-$(CONFIG_SURFACE_PRO3_BUTTON)	+= surfacepro3_button.o
+obj-$(CONFIG_SURFACE_PRO_BUTTON)	+= surfacepro_button.o
diff --git a/drivers/platform/x86/surfacepro3_button.c b/drivers/platform/x86/surfacepro_button.c
similarity index 93%
rename from drivers/platform/x86/surfacepro3_button.c
rename to drivers/platform/x86/surfacepro_button.c
index f7dade3..cda52b8 100644
--- a/drivers/platform/x86/surfacepro3_button.c
+++ b/drivers/platform/x86/surfacepro_button.c
@@ -1,6 +1,6 @@
 /*
  * power/home/volume button support for
- * Microsoft Surface Pro 3 tablet.
+ * Microsoft Surface Pro Series tablet.
  *
  * Copyright (c) 2015 Intel Corporation.
  * All rights reserved.
@@ -19,9 +19,10 @@
 #include <linux/acpi.h>
 #include <acpi/button.h>
 
-#define SURFACE_BUTTON_HID		"MSHW0028"
+#define SURFACE_PRO3_BUTTON_HID		"MSHW0028"
+#define SURFACE_PRO4_BUTTON_HID		"MSHW0040"
 #define SURFACE_BUTTON_OBJ_NAME		"VGBI"
-#define SURFACE_BUTTON_DEVICE_NAME	"Surface Pro 3 Buttons"
+#define SURFACE_BUTTON_DEVICE_NAME	"Surface Pro Series Buttons"
 
 #define SURFACE_BUTTON_NOTIFY_PRESS_POWER	0xc6
 #define SURFACE_BUTTON_NOTIFY_RELEASE_POWER	0xc7
@@ -35,10 +36,10 @@
 #define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN	0xc2
 #define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN	0xc3
 
-ACPI_MODULE_NAME("surface pro 3 button");
+ACPI_MODULE_NAME("surface pro series button");
 
 MODULE_AUTHOR("Chen Yu");
-MODULE_DESCRIPTION("Surface Pro3 Button Driver");
+MODULE_DESCRIPTION("Surface Pro Series Button Driver");
 MODULE_LICENSE("GPL v2");
 
 /*
@@ -54,7 +55,8 @@ MODULE_LICENSE("GPL v2");
  * acpi_driver.
  */
 static const struct acpi_device_id surface_button_device_ids[] = {
-	{SURFACE_BUTTON_HID,    0},
+	{SURFACE_PRO3_BUTTON_HID,    0},
+	{SURFACE_PRO4_BUTTON_HID,    0},
 	{"", 0},
 };
 MODULE_DEVICE_TABLE(acpi, surface_button_device_ids);
@@ -202,8 +204,8 @@ static SIMPLE_DEV_PM_OPS(surface_button_pm,
 		surface_button_suspend, surface_button_resume);
 
 static struct acpi_driver surface_button_driver = {
-	.name = "surface_pro3_button",
-	.class = "SurfacePro3",
+	.name = "surface_pro_button",
+	.class = "SurfacePro",
 	.ids = surface_button_device_ids,
 	.ops = {
 		.add = surface_button_add,
-- 
2.6.4

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1298500 — Re: [PATCH v3] surface pro 4: Add support for Surface Pro 4 Buttons

FromAndy Shevchenko <andy.shevchenko@gmail.com>
Date2015-12-28 03:50 +0100
SubjectRe: [PATCH v3] surface pro 4: Add support for Surface Pro 4 Buttons
Message-ID<qKw3v-3Io-997@gated-at.bofh.it>
In reply to#1298453
On Sun, Dec 27, 2015 at 9:21 PM, Weng Xuetian <wengxt@gmail.com> wrote:
> Surface Pro 4 buttons are managed by a device with _HID "MSHW0040"
> different from Surface Pro 3.
>
> This commit adds MSHW0040 to id list to support the Surface Pro 4, and
> renames the driver to surfacepro_button accordingly.
>
> Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=109871
> Signed-off-by: Weng Xuetian <wengxt@gmail.com>

Darren, this one looks fine for me, still couple of question up to you.

First is do we really want to rename driver? (Renaming variables and
stuff like I said if fine to me)

> ---
> v3:
>  - Fix commit message grammar mistakes.
> v2:
>  - Reformat patch with -M -C
> ---
>  MAINTAINERS                                            |  4 ++--
>  drivers/platform/x86/Kconfig                           |  6 +++---
>  drivers/platform/x86/Makefile                          |  2 +-
>  .../x86/{surfacepro3_button.c => surfacepro_button.c}  | 18 ++++++++++--------
>  4 files changed, 16 insertions(+), 14 deletions(-)
>  rename drivers/platform/x86/{surfacepro3_button.c => surfacepro_button.c} (93%)
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 233f834..1c07436 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -7019,11 +7019,11 @@ T:      git git://git.monstr.eu/linux-2.6-microblaze.git
>  S:     Supported
>  F:     arch/microblaze/
>
> -MICROSOFT SURFACE PRO 3 BUTTON DRIVER
> +MICROSOFT SURFACE PRO SERIES BUTTON DRIVER
>  M:     Chen Yu <yu.c.chen@intel.com>
>  L:     platform-driver-x86@vger.kernel.org
>  S:     Supported
> -F:     drivers/platform/x86/surfacepro3_button.c
> +F:     drivers/platform/x86/surfacepro_button.c
>
>  MICROTEK X6 SCANNER
>  M:     Oliver Neukum <oliver@neukum.org>
> diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
> index 1089eaa..3358fb0 100644
> --- a/drivers/platform/x86/Kconfig
> +++ b/drivers/platform/x86/Kconfig
> @@ -939,9 +939,9 @@ config INTEL_PMC_IPC
>         The PMC is an ARC processor which defines IPC commands for communication
>         with other entities in the CPU.
>
> -config SURFACE_PRO3_BUTTON
> -       tristate "Power/home/volume buttons driver for Microsoft Surface Pro 3 tablet"
> +config SURFACE_PRO_BUTTON
> +       tristate "Power/home/volume buttons driver for Microsoft Surface Pro Series tablet"
>         depends on ACPI && INPUT
>         ---help---
> -         This driver handles the power/home/volume buttons on the Microsoft Surface Pro 3 tablet.
> +         This driver handles the power/home/volume buttons on the Microsoft Surface Pro Series tablet.
>  endif # X86_PLATFORM_DEVICES
> diff --git a/drivers/platform/x86/Makefile b/drivers/platform/x86/Makefile
> index 3ca78a3..b4ece33 100644
> --- a/drivers/platform/x86/Makefile
> +++ b/drivers/platform/x86/Makefile
> @@ -61,4 +61,4 @@ obj-$(CONFIG_INTEL_SMARTCONNECT)      += intel-smartconnect.o
>  obj-$(CONFIG_PVPANIC)           += pvpanic.o
>  obj-$(CONFIG_ALIENWARE_WMI)    += alienware-wmi.o
>  obj-$(CONFIG_INTEL_PMC_IPC)    += intel_pmc_ipc.o
> -obj-$(CONFIG_SURFACE_PRO3_BUTTON)      += surfacepro3_button.o
> +obj-$(CONFIG_SURFACE_PRO_BUTTON)       += surfacepro_button.o
> diff --git a/drivers/platform/x86/surfacepro3_button.c b/drivers/platform/x86/surfacepro_button.c
> similarity index 93%
> rename from drivers/platform/x86/surfacepro3_button.c
> rename to drivers/platform/x86/surfacepro_button.c
> index f7dade3..cda52b8 100644
> --- a/drivers/platform/x86/surfacepro3_button.c
> +++ b/drivers/platform/x86/surfacepro_button.c
> @@ -1,6 +1,6 @@
>  /*
>   * power/home/volume button support for
> - * Microsoft Surface Pro 3 tablet.
> + * Microsoft Surface Pro Series tablet.
>   *
>   * Copyright (c) 2015 Intel Corporation.
>   * All rights reserved.
> @@ -19,9 +19,10 @@
>  #include <linux/acpi.h>
>  #include <acpi/button.h>
>
> -#define SURFACE_BUTTON_HID             "MSHW0028"
> +#define SURFACE_PRO3_BUTTON_HID                "MSHW0028"
> +#define SURFACE_PRO4_BUTTON_HID                "MSHW0040"
>  #define SURFACE_BUTTON_OBJ_NAME                "VGBI"
> -#define SURFACE_BUTTON_DEVICE_NAME     "Surface Pro 3 Buttons"
> +#define SURFACE_BUTTON_DEVICE_NAME     "Surface Pro Series Buttons"
>
>  #define SURFACE_BUTTON_NOTIFY_PRESS_POWER      0xc6
>  #define SURFACE_BUTTON_NOTIFY_RELEASE_POWER    0xc7
> @@ -35,10 +36,10 @@
>  #define SURFACE_BUTTON_NOTIFY_PRESS_VOLUME_DOWN        0xc2
>  #define SURFACE_BUTTON_NOTIFY_RELEASE_VOLUME_DOWN      0xc3
>
> -ACPI_MODULE_NAME("surface pro 3 button");
> +ACPI_MODULE_NAME("surface pro series button");
>
>  MODULE_AUTHOR("Chen Yu");
> -MODULE_DESCRIPTION("Surface Pro3 Button Driver");
> +MODULE_DESCRIPTION("Surface Pro Series Button Driver");
>  MODULE_LICENSE("GPL v2");
>
>  /*
> @@ -54,7 +55,8 @@ MODULE_LICENSE("GPL v2");
>   * acpi_driver.
>   */
>  static const struct acpi_device_id surface_button_device_ids[] = {
> -       {SURFACE_BUTTON_HID,    0},
> +       {SURFACE_PRO3_BUTTON_HID,    0},
> +       {SURFACE_PRO4_BUTTON_HID,    0},
>         {"", 0},
>  };
>  MODULE_DEVICE_TABLE(acpi, surface_button_device_ids);
> @@ -202,8 +204,8 @@ static SIMPLE_DEV_PM_OPS(surface_button_pm,
>                 surface_button_suspend, surface_button_resume);
>
>  static struct acpi_driver surface_button_driver = {
> -       .name = "surface_pro3_button",
> -       .class = "SurfacePro3",
> +       .name = "surface_pro_button",
> +       .class = "SurfacePro",

So, beside the driver renaming I don't know the side effect of
renaming .class field here.

>         .ids = surface_button_device_ids,
>         .ops = {
>                 .add = surface_button_add,

-- 
With Best Regards,
Andy Shevchenko
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web