Update v5.8 patches

Changes:
 - SAM:
   - Fix typos in kernel doc.

 - GPE:
   - Add support for 15" Intel-based Surface Laptop 3

 - misc:
   - Turn-off typecover backlight when suspending.

Links:
 - SAM: 414658f8c2
 - GPE: 35fc41f3f0
 - kernel: 71cb82a8d5
This commit is contained in:
Maximilian Luz 2020-11-13 22:33:31 +01:00
parent 89fc3c6ddc
commit c6afddc621
No known key found for this signature in database
GPG key ID: 70EC0937F6C26F02
4 changed files with 267 additions and 22 deletions

View file

@ -1,4 +1,4 @@
From fae166412b1c31270f47033e6146719132cd0255 Mon Sep 17 00:00:00 2001 From 78f9fcb6d6cfeebf5764f19c788b6ec75996575c Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com> From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 16 Aug 2020 23:39:56 +0200 Date: Sun, 16 Aug 2020 23:39:56 +0200
Subject: [PATCH] platform/x86: Add Driver to set up lid GPEs on MS Surface Subject: [PATCH] platform/x86: Add Driver to set up lid GPEs on MS Surface
@ -33,8 +33,8 @@ Patchset: surface-gpe
--- ---
drivers/platform/x86/Kconfig | 9 + drivers/platform/x86/Kconfig | 9 +
drivers/platform/x86/Makefile | 1 + drivers/platform/x86/Makefile | 1 +
drivers/platform/x86/surface_gpe.c | 309 +++++++++++++++++++++++++++++ drivers/platform/x86/surface_gpe.c | 321 +++++++++++++++++++++++++++++
3 files changed, 319 insertions(+) 3 files changed, 331 insertions(+)
create mode 100644 drivers/platform/x86/surface_gpe.c create mode 100644 drivers/platform/x86/surface_gpe.c
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
@ -71,10 +71,10 @@ index 2b85852a1a87..a64ce216719a 100644
obj-$(CONFIG_MSI_LAPTOP) += msi-laptop.o obj-$(CONFIG_MSI_LAPTOP) += msi-laptop.o
diff --git a/drivers/platform/x86/surface_gpe.c b/drivers/platform/x86/surface_gpe.c diff --git a/drivers/platform/x86/surface_gpe.c b/drivers/platform/x86/surface_gpe.c
new file mode 100644 new file mode 100644
index 000000000000..88b952ee9b8b index 000000000000..573dc52f568f
--- /dev/null --- /dev/null
+++ b/drivers/platform/x86/surface_gpe.c +++ b/drivers/platform/x86/surface_gpe.c
@@ -0,0 +1,309 @@ @@ -0,0 +1,321 @@
+// SPDX-License-Identifier: GPL-2.0-or-later +// SPDX-License-Identifier: GPL-2.0-or-later
+/* +/*
+ * Surface GPE/Lid driver to enable wakeup from suspend via the lid by + * Surface GPE/Lid driver to enable wakeup from suspend via the lid by
@ -223,6 +223,18 @@ index 000000000000..88b952ee9b8b
+ }, + },
+ .driver_data = (void *)lid_device_props_l4D, + .driver_data = (void *)lid_device_props_l4D,
+ }, + },
+ {
+ .ident = "Surface Laptop 3 (Intel 15\")",
+ .matches = {
+ /*
+ * We match for SKU here due to different vairants: The
+ * AMD (15") version does not rely on GPEs.
+ */
+ DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
+ DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "Surface_Laptop_3_1872"),
+ },
+ .driver_data = (void *)lid_device_props_l4D,
+ },
+ { } + { }
+}; +};
+ +

View file

@ -1,4 +1,4 @@
From c55292610c890ec39f40734413a0a4d737b5d700 Mon Sep 17 00:00:00 2001 From 943f0c3060ec5fef53123a22dada6aa0bbd5b0e2 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com> From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 25 Jul 2020 17:19:53 +0200 Date: Sat, 25 Jul 2020 17:19:53 +0200
Subject: [PATCH] i2c: acpi: Implement RawBytes read access Subject: [PATCH] i2c: acpi: Implement RawBytes read access
@ -109,7 +109,7 @@ index bbf8dd491d24..72f7305ab3fc 100644
-- --
2.29.2 2.29.2
From 7ec30997f8d15e3e62c9ad5d38bd8ad84a3b7328 Mon Sep 17 00:00:00 2001 From dd11b91122c87c1d92f3fb0b6c745ec12c39de92 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com> From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sun, 6 Sep 2020 04:01:19 +0200 Date: Sun, 6 Sep 2020 04:01:19 +0200
Subject: [PATCH] platform/x86: Add driver for Surface Book 1 dGPU switch Subject: [PATCH] platform/x86: Add driver for Surface Book 1 dGPU switch

View file

@ -1,4 +1,4 @@
From 26efb765b5fa98ad3022fb93be3ed85e57e999d8 Mon Sep 17 00:00:00 2001 From ef00777fa69ff655ce11b70ccb321774ec82659d Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com> From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Thu, 29 Oct 2020 22:04:38 +0100 Date: Thu, 29 Oct 2020 22:04:38 +0100
Subject: [PATCH] PCI: Allow D3cold for hot-plug ports on Surface Books Subject: [PATCH] PCI: Allow D3cold for hot-plug ports on Surface Books
@ -83,7 +83,7 @@ index c9338f914a0e..94371684783e 100644
-- --
2.29.2 2.29.2
From 6a10f2a3c026fa6178dfd812a66fc321c395a946 Mon Sep 17 00:00:00 2001 From 901ceb17f1b911bb545fa41285344bb7573fb326 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com> From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Mon, 9 Nov 2020 14:23:00 +0100 Date: Mon, 9 Nov 2020 14:23:00 +0100
Subject: [PATCH] PCI: Run platform power transition on initial D0 entry Subject: [PATCH] PCI: Run platform power transition on initial D0 entry
@ -143,7 +143,7 @@ index 94371684783e..56c564c698bd 100644
-- --
2.29.2 2.29.2
From 2b003cf04cb97c27f26845f1a3f3454d8c877982 Mon Sep 17 00:00:00 2001 From e025027564ad4c665df448213db6041640b0eb5e Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com> From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Sat, 31 Oct 2020 20:46:33 +0100 Date: Sat, 31 Oct 2020 20:46:33 +0100
Subject: [PATCH] PCI: Add sysfs attribute for PCI device power state Subject: [PATCH] PCI: Add sysfs attribute for PCI device power state
@ -216,7 +216,7 @@ index 6d78df981d41..17f186ce8e87 100644
-- --
2.29.2 2.29.2
From 359390681494f1aa49f0ca5fc1b4f2a14ffd3d5d Mon Sep 17 00:00:00 2001 From f87195e108325927ad44baf3ed464d3c878c85c0 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com> From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Mon, 17 Aug 2020 01:23:20 +0200 Date: Mon, 17 Aug 2020 01:23:20 +0200
Subject: [PATCH] misc: surface_sam: Add file2alias support for Surface SAM Subject: [PATCH] misc: surface_sam: Add file2alias support for Surface SAM
@ -318,7 +318,7 @@ index 9599e2a3f1e6..079672e0747a 100644
-- --
2.29.2 2.29.2
From c3a8945b91ccdf99fc7eea0c31b8cb88f7a81a7a Mon Sep 17 00:00:00 2001 From 7debd8e51563a4742e06c56857891a13227211b5 Mon Sep 17 00:00:00 2001
From: Maximilian Luz <luzmaximilian@gmail.com> From: Maximilian Luz <luzmaximilian@gmail.com>
Date: Mon, 17 Aug 2020 01:44:30 +0200 Date: Mon, 17 Aug 2020 01:44:30 +0200
Subject: [PATCH] misc: Add support for Surface System Aggregator Module Subject: [PATCH] misc: Add support for Surface System Aggregator Module
@ -485,7 +485,7 @@ index 000000000000..a1117d57036a
+ :export: + :export:
diff --git a/Documentation/driver-api/surface_aggregator/client.rst b/Documentation/driver-api/surface_aggregator/client.rst diff --git a/Documentation/driver-api/surface_aggregator/client.rst b/Documentation/driver-api/surface_aggregator/client.rst
new file mode 100644 new file mode 100644
index 000000000000..41c17bb63bef index 000000000000..f1275bf53837
--- /dev/null --- /dev/null
+++ b/Documentation/driver-api/surface_aggregator/client.rst +++ b/Documentation/driver-api/surface_aggregator/client.rst
@@ -0,0 +1,394 @@ @@ -0,0 +1,394 @@
@ -548,7 +548,7 @@ index 000000000000..41c17bb63bef
+|ssam_client_link|). It is important to do this, as it, first, guarantees +|ssam_client_link|). It is important to do this, as it, first, guarantees
+that the returned controller is valid for use in the client driver for as +that the returned controller is valid for use in the client driver for as
+long as this driver is bound to its device, i.e. that the driver gets +long as this driver is bound to its device, i.e. that the driver gets
+un-bound before the controller ever becomes invalid, and, second, as it +unbound before the controller ever becomes invalid, and, second, as it
+ensures correct suspend/resume ordering. This setup should be done in the +ensures correct suspend/resume ordering. This setup should be done in the
+driver's probe function, and may be used to defer probing in case the SSAM +driver's probe function, and may be used to defer probing in case the SSAM
+subsystem is not ready yet, for example: +subsystem is not ready yet, for example:
@ -573,7 +573,7 @@ index 000000000000..41c17bb63bef
+lifetime be guaranteed via |ssam_controller_get| and |ssam_controller_put|. +lifetime be guaranteed via |ssam_controller_get| and |ssam_controller_put|.
+Note that none of these functions, however, guarantee that the controller +Note that none of these functions, however, guarantee that the controller
+will not be shut down or suspended. These functions essentially only operate +will not be shut down or suspended. These functions essentially only operate
+on the reference, i.e. only guarantee a bare minimum of accessability +on the reference, i.e. only guarantee a bare minimum of accessibility
+without any guarantees at all on practical operability. +without any guarantees at all on practical operability.
+ +
+ +
@ -709,7 +709,7 @@ index 000000000000..41c17bb63bef
+ * ssam_request_sync_onstack(ctrl, &rqst, &resp, sizeof(arg_le)); + * ssam_request_sync_onstack(ctrl, &rqst, &resp, sizeof(arg_le));
+ * + *
+ * to perform the request, allocating the message buffer directly + * to perform the request, allocating the message buffer directly
+ * on the stack as opposed to via kzalloc(. + * on the stack as opposed to via kzalloc().
+ */ + */
+ +
+ /* + /*
@ -757,12 +757,12 @@ index 000000000000..41c17bb63bef
+ +
+- :c:func:`SSAM_DEFINE_SYNC_REQUEST_N` for requests without return value and +- :c:func:`SSAM_DEFINE_SYNC_REQUEST_N` for requests without return value and
+ without argument. + without argument.
+- :c:func:`SSAM_DEFINE_SYNC_REQUEST_R` for equests with return value but no +- :c:func:`SSAM_DEFINE_SYNC_REQUEST_R` for requests with return value but no
+ argument. + argument.
+- :c:func:`SSAM_DEFINE_SYNC_REQUEST_W` for requests without return value but +- :c:func:`SSAM_DEFINE_SYNC_REQUEST_W` for requests without return value but
+ with argument. + with argument.
+ +
+Refer to their respecitve documentation for more details. For each one of +Refer to their respective documentation for more details. For each one of
+these macros, a special variant is provided, which targets request types +these macros, a special variant is provided, which targets request types
+applicable to multiple instances of the same device type: +applicable to multiple instances of the same device type:
+ +
@ -885,7 +885,7 @@ index 000000000000..41c17bb63bef
+with the same flag and it is considered a bug to do otherwise. +with the same flag and it is considered a bug to do otherwise.
diff --git a/Documentation/driver-api/surface_aggregator/clients/cdev.rst b/Documentation/driver-api/surface_aggregator/clients/cdev.rst diff --git a/Documentation/driver-api/surface_aggregator/clients/cdev.rst b/Documentation/driver-api/surface_aggregator/clients/cdev.rst
new file mode 100644 new file mode 100644
index 000000000000..63b5afcb89b5 index 000000000000..720c9c03aa0e
--- /dev/null --- /dev/null
+++ b/Documentation/driver-api/surface_aggregator/clients/cdev.rst +++ b/Documentation/driver-api/surface_aggregator/clients/cdev.rst
@@ -0,0 +1,85 @@ @@ -0,0 +1,85 @@
@ -901,7 +901,7 @@ index 000000000000..63b5afcb89b5
+============================== +==============================
+ +
+The ``surface_aggregator_cdev`` module provides a misc-device for the SSAM +The ``surface_aggregator_cdev`` module provides a misc-device for the SSAM
+controller to allow for a (more or less) direct connection from userspace to +controller to allow for a (more or less) direct connection from user-space to
+the SAM EC. It is intended to be used for development and debugging, and +the SAM EC. It is intended to be used for development and debugging, and
+therefore should not be used or relied upon in any other way. Note that this +therefore should not be used or relied upon in any other way. Note that this
+module is not loaded automatically, but instead must be loaded manually. +module is not loaded automatically, but instead must be loaded manually.
@ -1928,7 +1928,7 @@ index 000000000000..6c020b87ad62
+API and interface options for other kernel drivers. +API and interface options for other kernel drivers.
diff --git a/Documentation/driver-api/surface_aggregator/overview.rst b/Documentation/driver-api/surface_aggregator/overview.rst diff --git a/Documentation/driver-api/surface_aggregator/overview.rst b/Documentation/driver-api/surface_aggregator/overview.rst
new file mode 100644 new file mode 100644
index 000000000000..06d49ce001e7 index 000000000000..b4ef7e25748c
--- /dev/null --- /dev/null
+++ b/Documentation/driver-api/surface_aggregator/overview.rst +++ b/Documentation/driver-api/surface_aggregator/overview.rst
@@ -0,0 +1,76 @@ @@ -0,0 +1,76 @@
@ -1999,7 +1999,7 @@ index 000000000000..06d49ce001e7
+ +
+As already elaborated above, the Surface Serial Hub (SSH) is the +As already elaborated above, the Surface Serial Hub (SSH) is the
+communication interface for SAM on 5th- and all later-generation Surface +communication interface for SAM on 5th- and all later-generation Surface
+devices. On the highest level, communication can be sparated into two main +devices. On the highest level, communication can be separated into two main
+types: Requests, messages sent from host to EC that may trigger a direct +types: Requests, messages sent from host to EC that may trigger a direct
+response from the EC (explicitly associated with the request), and events +response from the EC (explicitly associated with the request), and events
+(sometimes also referred to as notifications), sent from EC to host without +(sometimes also referred to as notifications), sent from EC to host without

View file

@ -0,0 +1,233 @@
From 133572dce9b3d521bd9fdd62418b0738c9ad161c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
Date: Thu, 5 Nov 2020 13:09:45 +0100
Subject: [PATCH] hid/multitouch: Turn off Type Cover keyboard backlight when
suspending
The Type Cover for Microsoft Surface devices supports a special usb
control request to disable or enable the built-in keyboard backlight.
On Windows, this request happens when putting the device into suspend or
resuming it, without it the backlight of the Type Cover will remain
enabled for some time even though the computer is suspended, which looks
weird to the user.
So add support for this special usb control request to hid-multitouch,
which is the driver that's handling the Type Cover.
The reason we have to use a pm_notifier for this instead of the usual
suspend/resume methods is that those won't get called in case the usb
device is already autosuspended.
Also, if the device is autosuspended, we have to briefly autoresume it
in order to send the request. Doing that should be fine, the usb-core
driver does something similar during suspend inside choose_wakeup().
To make sure we don't send that request to every device but only to
devices which support it, add a new quirk
MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER to hid-multitouch. For now this quirk
is only enabled for the usb id of the Surface Pro 2017 Type Cover, which
is where I confirmed that it's working.
Patchset: surface-typecover
---
drivers/hid/hid-multitouch.c | 100 ++++++++++++++++++++++++++++++++++-
1 file changed, 98 insertions(+), 2 deletions(-)
diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
index 99f041afd5c0..dbdd170c77c7 100644
--- a/drivers/hid/hid-multitouch.c
+++ b/drivers/hid/hid-multitouch.c
@@ -34,7 +34,10 @@
#include <linux/device.h>
#include <linux/hid.h>
#include <linux/module.h>
+#include <linux/pm_runtime.h>
#include <linux/slab.h>
+#include <linux/suspend.h>
+#include <linux/usb.h>
#include <linux/input/mt.h>
#include <linux/jiffies.h>
#include <linux/string.h>
@@ -47,6 +50,7 @@ MODULE_DESCRIPTION("HID multitouch panels");
MODULE_LICENSE("GPL");
#include "hid-ids.h"
+#include "usbhid/usbhid.h"
/* quirks to control the device */
#define MT_QUIRK_NOT_SEEN_MEANS_UP BIT(0)
@@ -70,12 +74,15 @@ MODULE_LICENSE("GPL");
#define MT_QUIRK_WIN8_PTP_BUTTONS BIT(18)
#define MT_QUIRK_SEPARATE_APP_REPORT BIT(19)
#define MT_QUIRK_FORCE_MULTI_INPUT BIT(20)
+#define MT_QUIRK_HAS_TYPE_COVER_BACKLIGHT BIT(21)
#define MT_INPUTMODE_TOUCHSCREEN 0x02
#define MT_INPUTMODE_TOUCHPAD 0x03
#define MT_BUTTONTYPE_CLICKPAD 0
+#define MS_TYPE_COVER_FEATURE_REPORT_USAGE 0xff050086
+
enum latency_mode {
HID_LATENCY_NORMAL = 0,
HID_LATENCY_HIGH = 1,
@@ -167,6 +174,8 @@ struct mt_device {
struct list_head applications;
struct list_head reports;
+
+ struct notifier_block pm_notifier;
};
static void mt_post_parse_default_settings(struct mt_device *td,
@@ -208,6 +217,7 @@ static void mt_post_parse(struct mt_device *td, struct mt_application *app);
#define MT_CLS_GOOGLE 0x0111
#define MT_CLS_RAZER_BLADE_STEALTH 0x0112
#define MT_CLS_SMART_TECH 0x0113
+#define MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER 0x0114
#define MT_DEFAULT_MAXCONTACT 10
#define MT_MAX_MAXCONTACT 250
@@ -367,6 +377,16 @@ static const struct mt_class mt_classes[] = {
MT_QUIRK_CONTACT_CNT_ACCURATE |
MT_QUIRK_SEPARATE_APP_REPORT,
},
+ { .name = MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER,
+ .quirks = MT_QUIRK_HAS_TYPE_COVER_BACKLIGHT |
+ MT_QUIRK_ALWAYS_VALID |
+ MT_QUIRK_IGNORE_DUPLICATES |
+ MT_QUIRK_HOVERING |
+ MT_QUIRK_CONTACT_CNT_ACCURATE |
+ MT_QUIRK_STICKY_FINGERS |
+ MT_QUIRK_WIN8_PTP_BUTTONS,
+ .export_all_inputs = true
+ },
{ }
};
@@ -1673,6 +1693,69 @@ static void mt_expired_timeout(struct timer_list *t)
clear_bit(MT_IO_FLAGS_RUNNING, &td->mt_io_flags);
}
+static void get_type_cover_backlight_field(struct hid_device *hdev,
+ struct hid_field **field)
+{
+ struct hid_report_enum *rep_enum;
+ struct hid_report *rep;
+ struct hid_field *cur_field;
+ int i, j;
+
+ rep_enum = &hdev->report_enum[HID_FEATURE_REPORT];
+ list_for_each_entry(rep, &rep_enum->report_list, list) {
+ for (i = 0; i < rep->maxfield; i++) {
+ cur_field = rep->field[i];
+
+ for (j = 0; j < cur_field->maxusage; j++) {
+ if (cur_field->usage[j].hid
+ == MS_TYPE_COVER_FEATURE_REPORT_USAGE) {
+ *field = cur_field;
+ return;
+ }
+ }
+ }
+ }
+}
+
+static void update_keyboard_backlight(struct hid_device *hdev, bool enabled)
+{
+ struct usb_device *udev = hid_to_usb_dev(hdev);
+ struct hid_field *field = NULL;
+
+ /* Wake up the device in case it's already suspended */
+ pm_runtime_get_sync(&udev->dev);
+
+ get_type_cover_backlight_field(hdev, &field);
+ if (!field) {
+ hid_err(hdev, "couldn't find backlight field\n");
+ goto out;
+ }
+
+ field->value[field->index] = enabled ? 0x01ff00ff : 0x00ff00ff;
+ hid_hw_request(hdev, field->report, HID_REQ_SET_REPORT);
+
+out:
+ pm_runtime_put_sync(&udev->dev);
+}
+
+static int mt_pm_notifier(struct notifier_block *notifier,
+ unsigned long pm_event,
+ void *unused)
+{
+ struct mt_device *td =
+ container_of(notifier, struct mt_device, pm_notifier);
+ struct hid_device *hdev = td->hdev;
+
+ if (td->mtclass.quirks & MT_QUIRK_HAS_TYPE_COVER_BACKLIGHT) {
+ if (pm_event == PM_SUSPEND_PREPARE)
+ update_keyboard_backlight(hdev, 0);
+ else if (pm_event == PM_POST_SUSPEND)
+ update_keyboard_backlight(hdev, 1);
+ }
+
+ return NOTIFY_DONE;
+}
+
static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
{
int ret, i;
@@ -1696,6 +1779,9 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
td->inputmode_value = MT_INPUTMODE_TOUCHSCREEN;
hid_set_drvdata(hdev, td);
+ td->pm_notifier.notifier_call = mt_pm_notifier;
+ register_pm_notifier(&td->pm_notifier);
+
INIT_LIST_HEAD(&td->applications);
INIT_LIST_HEAD(&td->reports);
@@ -1725,15 +1811,19 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
timer_setup(&td->release_timer, mt_expired_timeout, 0);
ret = hid_parse(hdev);
- if (ret != 0)
+ if (ret != 0) {
+ unregister_pm_notifier(&td->pm_notifier);
return ret;
+ }
if (mtclass->quirks & MT_QUIRK_FIX_CONST_CONTACT_ID)
mt_fix_const_fields(hdev, HID_DG_CONTACTID);
ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
- if (ret)
+ if (ret) {
+ unregister_pm_notifier(&td->pm_notifier);
return ret;
+ }
ret = sysfs_create_group(&hdev->dev.kobj, &mt_attribute_group);
if (ret)
@@ -1769,6 +1859,7 @@ static void mt_remove(struct hid_device *hdev)
{
struct mt_device *td = hid_get_drvdata(hdev);
+ unregister_pm_notifier(&td->pm_notifier);
del_timer_sync(&td->release_timer);
sysfs_remove_group(&hdev->dev.kobj, &mt_attribute_group);
@@ -2110,6 +2201,11 @@ static const struct hid_device_id mt_devices[] = {
MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
USB_DEVICE_ID_XIROKU_CSR2) },
+ /* Microsoft Surface type cover */
+ { .driver_data = MT_CLS_WIN_8_MS_SURFACE_TYPE_COVER,
+ HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY,
+ USB_VENDOR_ID_MICROSOFT, 0x09c0) },
+
/* Google MT devices */
{ .driver_data = MT_CLS_GOOGLE,
HID_DEVICE(HID_BUS_ANY, HID_GROUP_ANY, USB_VENDOR_ID_GOOGLE,
--
2.29.2