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:
parent
89fc3c6ddc
commit
c6afddc621
|
@ -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>
|
||||
Date: Sun, 16 Aug 2020 23:39:56 +0200
|
||||
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/Makefile | 1 +
|
||||
drivers/platform/x86/surface_gpe.c | 309 +++++++++++++++++++++++++++++
|
||||
3 files changed, 319 insertions(+)
|
||||
drivers/platform/x86/surface_gpe.c | 321 +++++++++++++++++++++++++++++
|
||||
3 files changed, 331 insertions(+)
|
||||
create mode 100644 drivers/platform/x86/surface_gpe.c
|
||||
|
||||
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
|
||||
diff --git a/drivers/platform/x86/surface_gpe.c b/drivers/platform/x86/surface_gpe.c
|
||||
new file mode 100644
|
||||
index 000000000000..88b952ee9b8b
|
||||
index 000000000000..573dc52f568f
|
||||
--- /dev/null
|
||||
+++ b/drivers/platform/x86/surface_gpe.c
|
||||
@@ -0,0 +1,309 @@
|
||||
@@ -0,0 +1,321 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
+/*
|
||||
+ * 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,
|
||||
+ },
|
||||
+ {
|
||||
+ .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,
|
||||
+ },
|
||||
+ { }
|
||||
+};
|
||||
+
|
||||
|
|
|
@ -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>
|
||||
Date: Sat, 25 Jul 2020 17:19:53 +0200
|
||||
Subject: [PATCH] i2c: acpi: Implement RawBytes read access
|
||||
|
@ -109,7 +109,7 @@ index bbf8dd491d24..72f7305ab3fc 100644
|
|||
--
|
||||
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>
|
||||
Date: Sun, 6 Sep 2020 04:01:19 +0200
|
||||
Subject: [PATCH] platform/x86: Add driver for Surface Book 1 dGPU switch
|
||||
|
|
|
@ -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>
|
||||
Date: Thu, 29 Oct 2020 22:04:38 +0100
|
||||
Subject: [PATCH] PCI: Allow D3cold for hot-plug ports on Surface Books
|
||||
|
@ -83,7 +83,7 @@ index c9338f914a0e..94371684783e 100644
|
|||
--
|
||||
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>
|
||||
Date: Mon, 9 Nov 2020 14:23:00 +0100
|
||||
Subject: [PATCH] PCI: Run platform power transition on initial D0 entry
|
||||
|
@ -143,7 +143,7 @@ index 94371684783e..56c564c698bd 100644
|
|||
--
|
||||
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>
|
||||
Date: Sat, 31 Oct 2020 20:46:33 +0100
|
||||
Subject: [PATCH] PCI: Add sysfs attribute for PCI device power state
|
||||
|
@ -216,7 +216,7 @@ index 6d78df981d41..17f186ce8e87 100644
|
|||
--
|
||||
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>
|
||||
Date: Mon, 17 Aug 2020 01:23:20 +0200
|
||||
Subject: [PATCH] misc: surface_sam: Add file2alias support for Surface SAM
|
||||
|
@ -318,7 +318,7 @@ index 9599e2a3f1e6..079672e0747a 100644
|
|||
--
|
||||
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>
|
||||
Date: Mon, 17 Aug 2020 01:44:30 +0200
|
||||
Subject: [PATCH] misc: Add support for Surface System Aggregator Module
|
||||
|
@ -485,7 +485,7 @@ index 000000000000..a1117d57036a
|
|||
+ :export:
|
||||
diff --git a/Documentation/driver-api/surface_aggregator/client.rst b/Documentation/driver-api/surface_aggregator/client.rst
|
||||
new file mode 100644
|
||||
index 000000000000..41c17bb63bef
|
||||
index 000000000000..f1275bf53837
|
||||
--- /dev/null
|
||||
+++ b/Documentation/driver-api/surface_aggregator/client.rst
|
||||
@@ -0,0 +1,394 @@
|
||||
|
@ -548,7 +548,7 @@ index 000000000000..41c17bb63bef
|
|||
+|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
|
||||
+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
|
||||
+driver's probe function, and may be used to defer probing in case the SSAM
|
||||
+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|.
|
||||
+Note that none of these functions, however, guarantee that the controller
|
||||
+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.
|
||||
+
|
||||
+
|
||||
|
@ -709,7 +709,7 @@ index 000000000000..41c17bb63bef
|
|||
+ * ssam_request_sync_onstack(ctrl, &rqst, &resp, sizeof(arg_le));
|
||||
+ *
|
||||
+ * 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
|
||||
+ 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.
|
||||
+- :c:func:`SSAM_DEFINE_SYNC_REQUEST_W` for requests without return value but
|
||||
+ 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
|
||||
+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.
|
||||
diff --git a/Documentation/driver-api/surface_aggregator/clients/cdev.rst b/Documentation/driver-api/surface_aggregator/clients/cdev.rst
|
||||
new file mode 100644
|
||||
index 000000000000..63b5afcb89b5
|
||||
index 000000000000..720c9c03aa0e
|
||||
--- /dev/null
|
||||
+++ b/Documentation/driver-api/surface_aggregator/clients/cdev.rst
|
||||
@@ -0,0 +1,85 @@
|
||||
|
@ -901,7 +901,7 @@ index 000000000000..63b5afcb89b5
|
|||
+==============================
|
||||
+
|
||||
+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
|
||||
+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.
|
||||
|
@ -1928,7 +1928,7 @@ index 000000000000..6c020b87ad62
|
|||
+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
|
||||
new file mode 100644
|
||||
index 000000000000..06d49ce001e7
|
||||
index 000000000000..b4ef7e25748c
|
||||
--- /dev/null
|
||||
+++ b/Documentation/driver-api/surface_aggregator/overview.rst
|
||||
@@ -0,0 +1,76 @@
|
||||
|
@ -1999,7 +1999,7 @@ index 000000000000..06d49ce001e7
|
|||
+
|
||||
+As already elaborated above, the Surface Serial Hub (SSH) is the
|
||||
+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
|
||||
+response from the EC (explicitly associated with the request), and events
|
||||
+(sometimes also referred to as notifications), sent from EC to host without
|
||||
|
|
233
patches/5.8/0007-surface-typecover.patch
Normal file
233
patches/5.8/0007-surface-typecover.patch
Normal 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
|
||||
|
Loading…
Reference in a new issue