浏览代码

Update v6.1 patches

Changes:
 - Update IPTS
   - Remove usages of C11 for compatibility with older (Android) kernels
   - Remove sensor reset during shutdown
   - Fix compiling resources.c on Android-x86 kernel
   - Split out HID behaviour for different EDS versions into different
     files
   - Fix kernel-doc comments
   - Add missing docs for members of the device info struct
   - Drop Intel copyright
   - Rename doorbell mode to poll mode
   - Disable the HID interface when the hardware is shutting down
   See https://github.com/linux-surface/kernel/pull/142 for details
 - Rebase onto v6.1.39

Links:
 - kernel: https://github.com/linux-surface/kernel/commit/c3c93f10b2fa50f949858c46c77769eb056c0ba2
 - IPTS: https://github.com/linux-surface/intel-precise-touch/commit/56765da3f87d87c5e5cf09e928abe0f579525e5e
Maximilian Luz 1 年之前
父节点
当前提交
26897a2bb7

+ 1 - 1
patches/6.1/0001-surface3-oemb.patch

@@ -1,4 +1,4 @@
-From cb0b2a6ca381cf822c5b9f2b0560fb727110a37e Mon Sep 17 00:00:00 2001
+From ad7d754bbad7249436869686ab22a4fd3fb969ff Mon Sep 17 00:00:00 2001
 From: Tsuchiya Yuto <kitakar@gmail.com>
 From: Tsuchiya Yuto <kitakar@gmail.com>
 Date: Sun, 18 Oct 2020 16:42:44 +0900
 Date: Sun, 18 Oct 2020 16:42:44 +0900
 Subject: [PATCH] (surface3-oemb) add DMI matches for Surface 3 with broken DMI
 Subject: [PATCH] (surface3-oemb) add DMI matches for Surface 3 with broken DMI

+ 3 - 3
patches/6.1/0002-mwifiex.patch

@@ -1,4 +1,4 @@
-From 4f67daf187ec659e53e2b7280a182bd0c8330bd6 Mon Sep 17 00:00:00 2001
+From 768db3f72da53f37ca081ac5054683d613f30107 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Tue, 3 Nov 2020 13:28:04 +0100
 Date: Tue, 3 Nov 2020 13:28:04 +0100
 Subject: [PATCH] mwifiex: Add quirk resetting the PCI bridge on MS Surface
 Subject: [PATCH] mwifiex: Add quirk resetting the PCI bridge on MS Surface
@@ -165,7 +165,7 @@ index d6ff964aec5b..5d30ae39d65e 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From e60b07ce034ee3a78c89941736cb66ab36dba544 Mon Sep 17 00:00:00 2001
+From 0c587da4e0905ce3ef387582d2fbf4d52915a6d1 Mon Sep 17 00:00:00 2001
 From: Tsuchiya Yuto <kitakar@gmail.com>
 From: Tsuchiya Yuto <kitakar@gmail.com>
 Date: Sun, 4 Oct 2020 00:11:49 +0900
 Date: Sun, 4 Oct 2020 00:11:49 +0900
 Subject: [PATCH] mwifiex: pcie: disable bridge_d3 for Surface gen4+
 Subject: [PATCH] mwifiex: pcie: disable bridge_d3 for Surface gen4+
@@ -320,7 +320,7 @@ index 5d30ae39d65e..c14eb56eb911 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 21f8dda328cc2088c294d17af70fe0e404e93800 Mon Sep 17 00:00:00 2001
+From 3a15683fd9b27ae45e843f0057d072728d69c10a Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Thu, 25 Mar 2021 11:33:02 +0100
 Date: Thu, 25 Mar 2021 11:33:02 +0100
 Subject: [PATCH] Bluetooth: btusb: Lower passive lescan interval on Marvell
 Subject: [PATCH] Bluetooth: btusb: Lower passive lescan interval on Marvell

+ 2 - 2
patches/6.1/0003-ath10k.patch

@@ -1,4 +1,4 @@
-From ebff70d98972c3dc4c56e90a9b8a1e6697df12a9 Mon Sep 17 00:00:00 2001
+From c28b29f1bfc17394be89ac062d5c9d23291b0fca Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sat, 27 Feb 2021 00:45:52 +0100
 Date: Sat, 27 Feb 2021 00:45:52 +0100
 Subject: [PATCH] ath10k: Add module parameters to override board files
 Subject: [PATCH] ath10k: Add module parameters to override board files
@@ -20,7 +20,7 @@ Patchset: ath10k
  1 file changed, 58 insertions(+)
  1 file changed, 58 insertions(+)
 
 
 diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
 diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c
-index 5eb131ab916f..67f074a126d1 100644
+index 6cdb225b7eac..19c036751fb1 100644
 --- a/drivers/net/wireless/ath/ath10k/core.c
 --- a/drivers/net/wireless/ath/ath10k/core.c
 +++ b/drivers/net/wireless/ath/ath10k/core.c
 +++ b/drivers/net/wireless/ath/ath10k/core.c
 @@ -38,6 +38,9 @@ static bool fw_diag_log;
 @@ -38,6 +38,9 @@ static bool fw_diag_log;

+ 1260 - 5
patches/6.1/0004-ipts.patch

@@ -1,4 +1,4 @@
-From 777708fc9546fc4dda6420fd1f0e1c5d9be0002b Mon Sep 17 00:00:00 2001
+From a65b63950cd0b194805341e942974a502409fea1 Mon Sep 17 00:00:00 2001
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 Date: Thu, 30 Jul 2020 13:21:53 +0200
 Date: Thu, 30 Jul 2020 13:21:53 +0200
 Subject: [PATCH] misc: mei: Add missing IPTS device IDs
 Subject: [PATCH] misc: mei: Add missing IPTS device IDs
@@ -36,7 +36,7 @@ index 5bf0d50d55a0..c13864512229 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 8025172921d92c95ad5a547f963b0d361fd5120a Mon Sep 17 00:00:00 2001
+From 9586561bea522433c4f4809eddd054852446ca39 Mon Sep 17 00:00:00 2001
 From: Liban Hannan <liban.p@gmail.com>
 From: Liban Hannan <liban.p@gmail.com>
 Date: Tue, 12 Apr 2022 23:31:12 +0100
 Date: Tue, 12 Apr 2022 23:31:12 +0100
 Subject: [PATCH] iommu: ipts: use IOMMU passthrough mode for IPTS
 Subject: [PATCH] iommu: ipts: use IOMMU passthrough mode for IPTS
@@ -136,7 +136,7 @@ index d4b5d20bd6dd..3965979c7bd4 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 41bc9dfdd57757e09e9090f28afdafe91b9aef83 Mon Sep 17 00:00:00 2001
+From 3125857449c9287908163b9ee5e96b92dc46f081 Mon Sep 17 00:00:00 2001
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 Date: Sun, 11 Dec 2022 12:00:59 +0100
 Date: Sun, 11 Dec 2022 12:00:59 +0100
 Subject: [PATCH] hid: Add support for Intel Precise Touch and Stylus
 Subject: [PATCH] hid: Add support for Intel Precise Touch and Stylus
@@ -195,7 +195,7 @@ Patchset: ipts
  create mode 100644 drivers/hid/ipts/thread.h
  create mode 100644 drivers/hid/ipts/thread.h
 
 
 diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
 diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 185a077d59cd..1523ccdf73b5 100644
+index c1873ccc7248..af7ab503de74 100644
 --- a/drivers/hid/Kconfig
 --- a/drivers/hid/Kconfig
 +++ b/drivers/hid/Kconfig
 +++ b/drivers/hid/Kconfig
 @@ -1290,4 +1290,6 @@ source "drivers/hid/amd-sfh-hid/Kconfig"
 @@ -1290,4 +1290,6 @@ source "drivers/hid/amd-sfh-hid/Kconfig"
@@ -2986,7 +2986,7 @@ index 000000000000..a314843599fc
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 482417af2c4b856bef455f380c31c00b5545027d Mon Sep 17 00:00:00 2001
+From a40dd52ad93466143a211a442226c9d30aa968eb Mon Sep 17 00:00:00 2001
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 Date: Fri, 28 Apr 2023 15:41:12 +0200
 Date: Fri, 28 Apr 2023 15:41:12 +0200
 Subject: [PATCH] Update IPTS from module repo
 Subject: [PATCH] Update IPTS from module repo
@@ -3178,3 +3178,1258 @@ index 6cbb24a8a054..e0c400f420b9 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
+From 6d826fa0bc6b7741f479b960e6a1ba09a291fa93 Mon Sep 17 00:00:00 2001
+From: Dorian Stoll <dorian.stoll@tmsp.io>
+Date: Mon, 17 Jul 2023 18:10:43 +0200
+Subject: [PATCH] Update IPTS from module repo
+
+Changes:
+* Remove usages of C11 for compatibility with older (Android) kernels
+* Remove sensor reset during shutdown
+* Fix compiling resources.c on Android-x86 kernel
+* Split out HID behaviour for different EDS versions into different files
+* Fix kernel-doc comments
+* Add missing docs for members of the device info struct
+* Drop Intel copyright
+* Rename doorbell mode to poll mode
+* Disable the HID interface when the hardware is shutting down.
+
+Based on https://github.com/linux-surface/intel-precise-touch/commit/56765da3f87d87c5e5cf09e928abe0f579525e5e
+
+Signed-off-by: Dorian Stoll <dorian.stoll@tmsp.io>
+Patchset: ipts
+---
+ drivers/hid/ipts/Makefile      |   2 +
+ drivers/hid/ipts/cmd.c         |   1 -
+ drivers/hid/ipts/cmd.h         |   7 +-
+ drivers/hid/ipts/context.h     |   3 +-
+ drivers/hid/ipts/control.c     |  25 ++---
+ drivers/hid/ipts/control.h     |  25 +++--
+ drivers/hid/ipts/desc.h        |   1 -
+ drivers/hid/ipts/eds1.c        | 103 ++++++++++++++++++
+ drivers/hid/ipts/eds1.h        |  35 +++++++
+ drivers/hid/ipts/eds2.c        | 144 ++++++++++++++++++++++++++
+ drivers/hid/ipts/eds2.h        |  35 +++++++
+ drivers/hid/ipts/hid.c         | 184 ++++++---------------------------
+ drivers/hid/ipts/hid.h         |   4 +-
+ drivers/hid/ipts/main.c        |   1 -
+ drivers/hid/ipts/mei.c         |   1 -
+ drivers/hid/ipts/mei.h         |   7 +-
+ drivers/hid/ipts/receiver.c    |  15 +--
+ drivers/hid/ipts/receiver.h    |   1 -
+ drivers/hid/ipts/resources.c   |   6 +-
+ drivers/hid/ipts/resources.h   |   1 -
+ drivers/hid/ipts/spec-device.h |  31 +++---
+ drivers/hid/ipts/spec-hid.h    |   1 -
+ drivers/hid/ipts/thread.c      |   1 -
+ drivers/hid/ipts/thread.h      |   7 +-
+ 24 files changed, 413 insertions(+), 228 deletions(-)
+ create mode 100644 drivers/hid/ipts/eds1.c
+ create mode 100644 drivers/hid/ipts/eds1.h
+ create mode 100644 drivers/hid/ipts/eds2.c
+ create mode 100644 drivers/hid/ipts/eds2.h
+
+diff --git a/drivers/hid/ipts/Makefile b/drivers/hid/ipts/Makefile
+index 0fe655bccdc0..883896f68e6a 100644
+--- a/drivers/hid/ipts/Makefile
++++ b/drivers/hid/ipts/Makefile
+@@ -6,6 +6,8 @@
+ obj-$(CONFIG_HID_IPTS) += ipts.o
+ ipts-objs := cmd.o
+ ipts-objs += control.o
++ipts-objs += eds1.o
++ipts-objs += eds2.o
+ ipts-objs += hid.o
+ ipts-objs += main.o
+ ipts-objs += mei.o
+diff --git a/drivers/hid/ipts/cmd.c b/drivers/hid/ipts/cmd.c
+index 7fd69271ccd5..63a4934bbc5f 100644
+--- a/drivers/hid/ipts/cmd.c
++++ b/drivers/hid/ipts/cmd.c
+@@ -1,6 +1,5 @@
+ // SPDX-License-Identifier: GPL-2.0-or-later
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+diff --git a/drivers/hid/ipts/cmd.h b/drivers/hid/ipts/cmd.h
+index 924758ffee67..2b4079075b64 100644
+--- a/drivers/hid/ipts/cmd.h
++++ b/drivers/hid/ipts/cmd.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+@@ -19,7 +18,7 @@
+  */
+ #define IPTS_CMD_DEFAULT_TIMEOUT 1000
+ 
+-/*
++/**
+  * ipts_cmd_recv_timeout() - Receives a response to a command.
+  * @ipts: The IPTS driver context.
+  * @code: The type of the command / response.
+@@ -33,7 +32,7 @@
+ int ipts_cmd_recv_timeout(struct ipts_context *ipts, enum ipts_command_code code,
+ 			  struct ipts_response *rsp, u64 timeout);
+ 
+-/*
++/**
+  * ipts_cmd_recv() - Receives a response to a command.
+  * @ipts: The IPTS driver context.
+  * @code: The type of the command / response.
+@@ -47,7 +46,7 @@ static inline int ipts_cmd_recv(struct ipts_context *ipts, enum ipts_command_cod
+ 	return ipts_cmd_recv_timeout(ipts, code, rsp, IPTS_CMD_DEFAULT_TIMEOUT);
+ }
+ 
+-/*
++/**
+  * ipts_cmd_send() - Executes a command on the device.
+  * @ipts: The IPTS driver context.
+  * @code: The type of the command to execute.
+diff --git a/drivers/hid/ipts/context.h b/drivers/hid/ipts/context.h
+index 3450a95e66ee..ba33259f1f7c 100644
+--- a/drivers/hid/ipts/context.h
++++ b/drivers/hid/ipts/context.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+@@ -41,7 +40,9 @@ struct ipts_context {
+ 	struct ipts_buffer feature_report;
+ 	struct ipts_buffer descriptor;
+ 
++	bool hid_active;
+ 	struct hid_device *hid;
++
+ 	struct ipts_device_info info;
+ 	struct ipts_resources resources;
+ 
+diff --git a/drivers/hid/ipts/control.c b/drivers/hid/ipts/control.c
+index 2f61500b5119..5360842d260b 100644
+--- a/drivers/hid/ipts/control.c
++++ b/drivers/hid/ipts/control.c
+@@ -1,6 +1,5 @@
+ // SPDX-License-Identifier: GPL-2.0-or-later
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+@@ -88,6 +87,7 @@ static int ipts_control_set_mode(struct ipts_context *ipts, enum ipts_mode mode)
+ 
+ static int ipts_control_set_mem_window(struct ipts_context *ipts, struct ipts_resources *res)
+ {
++	int i = 0;
+ 	int ret = 0;
+ 	struct ipts_mem_window cmd = { 0 };
+ 	struct ipts_response rsp = { 0 };
+@@ -98,7 +98,7 @@ static int ipts_control_set_mem_window(struct ipts_context *ipts, struct ipts_re
+ 	if (!res)
+ 		return -EFAULT;
+ 
+-	for (int i = 0; i < IPTS_BUFFERS; i++) {
++	for (i = 0; i < IPTS_BUFFERS; i++) {
+ 		cmd.data_addr_lower[i] = lower_32_bits(res->data[i].dma_address);
+ 		cmd.data_addr_upper[i] = upper_32_bits(res->data[i].dma_address);
+ 		cmd.feedback_addr_lower[i] = lower_32_bits(res->feedback[i].dma_address);
+@@ -342,12 +342,6 @@ int ipts_control_hid2me_feedback(struct ipts_context *ipts, enum ipts_feedback_c
+ 	return ipts_control_send_feedback(ipts, IPTS_HID2ME_BUFFER);
+ }
+ 
+-static inline int ipts_control_reset_sensor(struct ipts_context *ipts)
+-{
+-	return ipts_control_hid2me_feedback(ipts, IPTS_FEEDBACK_CMD_TYPE_SOFT_RESET,
+-					    IPTS_FEEDBACK_DATA_TYPE_VENDOR, NULL, 0);
+-}
+-
+ int ipts_control_start(struct ipts_context *ipts)
+ {
+ 	int ret = 0;
+@@ -389,9 +383,9 @@ int ipts_control_start(struct ipts_context *ipts)
+ 		}
+ 
+ 		/*
+-		 * Newer devices can be directly initialized in doorbell mode.
++		 * Newer devices can be directly initialized in polling mode.
+ 		 */
+-		ipts->mode = IPTS_MODE_DOORBELL;
++		ipts->mode = IPTS_MODE_POLL;
+ 	}
+ 
+ 	ret = ipts_control_set_mode(ipts, ipts->mode);
+@@ -418,6 +412,8 @@ int ipts_control_start(struct ipts_context *ipts)
+ 		return ret;
+ 	}
+ 
++	ipts_hid_enable(ipts);
++
+ 	ret = ipts_hid_init(ipts, info);
+ 	if (ret) {
+ 		dev_err(ipts->dev, "Failed to initialize HID device: %d\n", ret);
+@@ -434,6 +430,7 @@ static int _ipts_control_stop(struct ipts_context *ipts)
+ 	if (!ipts)
+ 		return -EFAULT;
+ 
++	ipts_hid_disable(ipts);
+ 	dev_info(ipts->dev, "Stopping IPTS\n");
+ 
+ 	ret = ipts_receiver_stop(ipts);
+@@ -442,12 +439,6 @@ static int _ipts_control_stop(struct ipts_context *ipts)
+ 		return ret;
+ 	}
+ 
+-	ret = ipts_control_reset_sensor(ipts);
+-	if (ret) {
+-		dev_err(ipts->dev, "Failed to reset sensor: %d\n", ret);
+-		return ret;
+-	}
+-
+ 	ret = ipts_resources_free(&ipts->resources);
+ 	if (ret) {
+ 		dev_err(ipts->dev, "Failed to free resources: %d\n", ret);
+@@ -483,7 +474,7 @@ int ipts_control_restart(struct ipts_context *ipts)
+ 		return ret;
+ 
+ 	/*
+-	 * Give the sensor some time to come back from resetting
++	 * Wait a second to give the sensor time to fully shut down.
+ 	 */
+ 	msleep(1000);
+ 
+diff --git a/drivers/hid/ipts/control.h b/drivers/hid/ipts/control.h
+index 744bb92d682a..26629c5144ed 100644
+--- a/drivers/hid/ipts/control.h
++++ b/drivers/hid/ipts/control.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+@@ -15,7 +14,7 @@
+ #include "spec-data.h"
+ #include "spec-device.h"
+ 
+-/*
++/**
+  * ipts_control_request_flush() - Stop the data flow.
+  * @ipts: The IPTS driver context.
+  *
+@@ -26,7 +25,7 @@
+  */
+ int ipts_control_request_flush(struct ipts_context *ipts);
+ 
+-/*
++/**
+  * ipts_control_wait_flush() - Wait until data flow has been stopped.
+  * @ipts: The IPTS driver context.
+  *
+@@ -34,7 +33,7 @@ int ipts_control_request_flush(struct ipts_context *ipts);
+  */
+ int ipts_control_wait_flush(struct ipts_context *ipts);
+ 
+-/*
++/**
+  * ipts_control_wait_flush() - Notify the device that the driver can receive new data.
+  * @ipts: The IPTS driver context.
+  *
+@@ -42,19 +41,19 @@ int ipts_control_wait_flush(struct ipts_context *ipts);
+  */
+ int ipts_control_request_data(struct ipts_context *ipts);
+ 
+-/*
++/**
+  * ipts_control_wait_data() - Wait until new data is available.
+  * @ipts: The IPTS driver context.
+  * @block: Whether to block execution until data is available.
+  *
+- * In doorbell mode, this function will never return while the data flow is active. Instead,
+- * the doorbell will be incremented when new data is available.
++ * In poll mode, this function will never return while the data flow is active. Instead,
++ * the poll will be incremented when new data is available.
+  *
+  * Returns: 0 on success, <0 on error, -EAGAIN if no data is available.
+  */
+ int ipts_control_wait_data(struct ipts_context *ipts, bool block);
+ 
+-/*
++/**
+  * ipts_control_send_feedback() - Submits a feedback buffer to the device.
+  * @ipts: The IPTS driver context.
+  * @buffer: The ID of the buffer containing feedback data.
+@@ -63,7 +62,7 @@ int ipts_control_wait_data(struct ipts_context *ipts, bool block);
+  */
+ int ipts_control_send_feedback(struct ipts_context *ipts, u32 buffer);
+ 
+-/*
++/**
+  * ipts_control_hid2me_feedback() - Sends HID2ME feedback, a special type of feedback.
+  * @ipts: The IPTS driver context.
+  * @cmd: The command that will be run on the device.
+@@ -80,7 +79,7 @@ int ipts_control_send_feedback(struct ipts_context *ipts, u32 buffer);
+ int ipts_control_hid2me_feedback(struct ipts_context *ipts, enum ipts_feedback_cmd_type cmd,
+ 				 enum ipts_feedback_data_type type, void *data, size_t size);
+ 
+-/*
++/**
+  * ipts_control_refill_buffer() - Acknowledges that data in a buffer has been processed.
+  * @ipts: The IPTS driver context.
+  * @buffer: The buffer that has been processed and can be refilled.
+@@ -100,7 +99,7 @@ static inline int ipts_control_refill_buffer(struct ipts_context *ipts, u32 buff
+ 	return ipts_control_send_feedback(ipts, buffer);
+ }
+ 
+-/*
++/**
+  * ipts_control_start() - Initialized the device and starts the data flow.
+  * @ipts: The IPTS driver context.
+  *
+@@ -108,7 +107,7 @@ static inline int ipts_control_refill_buffer(struct ipts_context *ipts, u32 buff
+  */
+ int ipts_control_start(struct ipts_context *ipts);
+ 
+-/*
++/**
+  * ipts_control_stop() - Stops the data flow and resets the device.
+  * @ipts: The IPTS driver context.
+  *
+@@ -116,7 +115,7 @@ int ipts_control_start(struct ipts_context *ipts);
+  */
+ int ipts_control_stop(struct ipts_context *ipts);
+ 
+-/*
++/**
+  * ipts_control_restart() - Stops the device and starts it again.
+  * @ipts: The IPTS driver context.
+  *
+diff --git a/drivers/hid/ipts/desc.h b/drivers/hid/ipts/desc.h
+index c058974a03a1..307438c7c80c 100644
+--- a/drivers/hid/ipts/desc.h
++++ b/drivers/hid/ipts/desc.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2022-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+diff --git a/drivers/hid/ipts/eds1.c b/drivers/hid/ipts/eds1.c
+new file mode 100644
+index 000000000000..ecbb3a8bdaf6
+--- /dev/null
++++ b/drivers/hid/ipts/eds1.c
+@@ -0,0 +1,103 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * Copyright (c) 2023 Dorian Stoll
++ *
++ * Linux driver for Intel Precise Touch & Stylus
++ */
++
++#include <linux/err.h>
++#include <linux/gfp.h>
++#include <linux/hid.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++
++#include "context.h"
++#include "control.h"
++#include "desc.h"
++#include "spec-device.h"
++
++int ipts_eds1_get_descriptor(struct ipts_context *ipts, u8 **desc_buffer, size_t *desc_size)
++{
++	size_t size = 0;
++	u8 *buffer = NULL;
++
++	if (!ipts)
++		return -EFAULT;
++
++	if (!desc_buffer)
++		return -EFAULT;
++
++	if (!desc_size)
++		return -EFAULT;
++
++	size = sizeof(ipts_singletouch_descriptor) + sizeof(ipts_fallback_descriptor);
++
++	buffer = kzalloc(size, GFP_KERNEL);
++	if (!buffer)
++		return -ENOMEM;
++
++	memcpy(buffer, ipts_singletouch_descriptor, sizeof(ipts_singletouch_descriptor));
++	memcpy(&buffer[sizeof(ipts_singletouch_descriptor)], ipts_fallback_descriptor,
++	       sizeof(ipts_fallback_descriptor));
++
++	*desc_size = size;
++	*desc_buffer = buffer;
++
++	return 0;
++}
++
++static int ipts_eds1_switch_mode(struct ipts_context *ipts, enum ipts_mode mode)
++{
++	int ret = 0;
++
++	if (!ipts)
++		return -EFAULT;
++
++	if (ipts->mode == mode)
++		return 0;
++
++	ipts->mode = mode;
++
++	ret = ipts_control_restart(ipts);
++	if (ret)
++		dev_err(ipts->dev, "Failed to switch modes: %d\n", ret);
++
++	return ret;
++}
++
++int ipts_eds1_raw_request(struct ipts_context *ipts, u8 *buffer, size_t size, u8 report_id,
++			  enum hid_report_type report_type, enum hid_class_request request_type)
++{
++	int ret = 0;
++
++	if (!ipts)
++		return -EFAULT;
++
++	if (!buffer)
++		return -EFAULT;
++
++	if (report_id != IPTS_HID_REPORT_SET_MODE)
++		return -EIO;
++
++	if (report_type != HID_FEATURE_REPORT)
++		return -EIO;
++
++	if (size != 2)
++		return -EINVAL;
++
++	/*
++	 * Implement mode switching report for older devices without native HID support.
++	 */
++
++	if (request_type == HID_REQ_GET_REPORT) {
++		memset(buffer, 0, size);
++		buffer[0] = report_id;
++		buffer[1] = ipts->mode;
++	} else if (request_type == HID_REQ_SET_REPORT) {
++		return ipts_eds1_switch_mode(ipts, buffer[1]);
++	} else {
++		return -EIO;
++	}
++
++	return ret;
++}
+diff --git a/drivers/hid/ipts/eds1.h b/drivers/hid/ipts/eds1.h
+new file mode 100644
+index 000000000000..eeeb6575e3e8
+--- /dev/null
++++ b/drivers/hid/ipts/eds1.h
+@@ -0,0 +1,35 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * Copyright (c) 2023 Dorian Stoll
++ *
++ * Linux driver for Intel Precise Touch & Stylus
++ */
++
++#include <linux/hid.h>
++#include <linux/types.h>
++
++#include "context.h"
++
++/**
++ * ipts_eds1_get_descriptor() - Assembles the HID descriptor of the device.
++ * @ipts: The IPTS driver context.
++ * @desc_buffer: A pointer to the location where the address of the allocated buffer is stored.
++ * @desc_size: A pointer to the location where the size of the allocated buffer is stored.
++ *
++ * Returns: 0 on success, <0 on error.
++ */
++int ipts_eds1_get_descriptor(struct ipts_context *ipts, u8 **desc_buffer, size_t *desc_size);
++
++/**
++ * ipts_eds1_raw_request() - Executes an output or feature report on the device.
++ * @ipts: The IPTS driver context.
++ * @buffer: The buffer containing the report.
++ * @size: The size of the buffer.
++ * @report_id: The HID report ID.
++ * @report_type: Whether this report is an output or a feature report.
++ * @request_type: Whether this report requests or sends data.
++ *
++ * Returns: 0 on success, <0 on error.
++ */
++int ipts_eds1_raw_request(struct ipts_context *ipts, u8 *buffer, size_t size, u8 report_id,
++			  enum hid_report_type report_type, enum hid_class_request request_type);
+diff --git a/drivers/hid/ipts/eds2.c b/drivers/hid/ipts/eds2.c
+new file mode 100644
+index 000000000000..e835b460aa79
+--- /dev/null
++++ b/drivers/hid/ipts/eds2.c
+@@ -0,0 +1,144 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * Copyright (c) 2023 Dorian Stoll
++ *
++ * Linux driver for Intel Precise Touch & Stylus
++ */
++
++#include <linux/completion.h>
++#include <linux/err.h>
++#include <linux/gfp.h>
++#include <linux/mutex.h>
++#include <linux/slab.h>
++#include <linux/types.h>
++
++#include "context.h"
++#include "control.h"
++#include "desc.h"
++#include "spec-data.h"
++
++int ipts_eds2_get_descriptor(struct ipts_context *ipts, u8 **desc_buffer, size_t *desc_size)
++{
++	size_t size = 0;
++	u8 *buffer = NULL;
++
++	if (!ipts)
++		return -EFAULT;
++
++	if (!desc_buffer)
++		return -EFAULT;
++
++	if (!desc_size)
++		return -EFAULT;
++
++	size = sizeof(ipts_singletouch_descriptor) + ipts->descriptor.size;
++
++	buffer = kzalloc(size, GFP_KERNEL);
++	if (!*buffer)
++		return -ENOMEM;
++
++	memcpy(buffer, ipts_singletouch_descriptor, sizeof(ipts_singletouch_descriptor));
++	memcpy(&buffer[sizeof(ipts_singletouch_descriptor)], ipts->descriptor.address,
++	       ipts->descriptor.size);
++
++	*desc_size = size;
++	*desc_buffer = buffer;
++
++	return 0;
++}
++
++static int ipts_eds2_get_feature(struct ipts_context *ipts, u8 *buffer, size_t size, u8 report_id,
++				 enum ipts_feedback_data_type type)
++{
++	int ret = 0;
++
++	if (!ipts)
++		return -EFAULT;
++
++	if (!buffer)
++		return -EFAULT;
++
++	mutex_lock(&ipts->feature_lock);
++
++	memset(buffer, 0, size);
++	buffer[0] = report_id;
++
++	memset(&ipts->feature_report, 0, sizeof(ipts->feature_report));
++	reinit_completion(&ipts->feature_event);
++
++	ret = ipts_control_hid2me_feedback(ipts, IPTS_FEEDBACK_CMD_TYPE_NONE, type, buffer, size);
++	if (ret) {
++		dev_err(ipts->dev, "Failed to send hid2me feedback: %d\n", ret);
++		goto out;
++	}
++
++	ret = wait_for_completion_timeout(&ipts->feature_event, msecs_to_jiffies(5000));
++	if (ret == 0) {
++		dev_warn(ipts->dev, "GET_FEATURES timed out!\n");
++		ret = -EIO;
++		goto out;
++	}
++
++	if (!ipts->feature_report.address) {
++		ret = -EFAULT;
++		goto out;
++	}
++
++	if (ipts->feature_report.size > size) {
++		ret = -ETOOSMALL;
++		goto out;
++	}
++
++	ret = ipts->feature_report.size;
++	memcpy(buffer, ipts->feature_report.address, ipts->feature_report.size);
++
++out:
++	mutex_unlock(&ipts->feature_lock);
++	return ret;
++}
++
++static int ipts_eds2_set_feature(struct ipts_context *ipts, u8 *buffer, size_t size, u8 report_id,
++				 enum ipts_feedback_data_type type)
++{
++	int ret = 0;
++
++	if (!ipts)
++		return -EFAULT;
++
++	if (!buffer)
++		return -EFAULT;
++
++	buffer[0] = report_id;
++
++	ret = ipts_control_hid2me_feedback(ipts, IPTS_FEEDBACK_CMD_TYPE_NONE, type, buffer, size);
++	if (ret)
++		dev_err(ipts->dev, "Failed to send hid2me feedback: %d\n", ret);
++
++	return ret;
++}
++
++int ipts_eds2_raw_request(struct ipts_context *ipts, u8 *buffer, size_t size, u8 report_id,
++			  enum hid_report_type report_type, enum hid_class_request request_type)
++{
++	enum ipts_feedback_data_type feedback_type = IPTS_FEEDBACK_DATA_TYPE_VENDOR;
++
++	if (!ipts)
++		return -EFAULT;
++
++	if (!buffer)
++		return -EFAULT;
++
++	if (report_type == HID_OUTPUT_REPORT && request_type == HID_REQ_SET_REPORT)
++		feedback_type = IPTS_FEEDBACK_DATA_TYPE_OUTPUT_REPORT;
++	else if (report_type == HID_FEATURE_REPORT && request_type == HID_REQ_GET_REPORT)
++		feedback_type = IPTS_FEEDBACK_DATA_TYPE_GET_FEATURES;
++	else if (report_type == HID_FEATURE_REPORT && request_type == HID_REQ_SET_REPORT)
++		feedback_type = IPTS_FEEDBACK_DATA_TYPE_SET_FEATURES;
++	else
++		return -EIO;
++
++	if (request_type == HID_REQ_GET_REPORT)
++		return ipts_eds2_get_feature(ipts, buffer, report_id, size, feedback_type);
++	else
++		return ipts_eds2_set_feature(ipts, buffer, report_id, size, feedback_type);
++}
+diff --git a/drivers/hid/ipts/eds2.h b/drivers/hid/ipts/eds2.h
+new file mode 100644
+index 000000000000..064e3716907a
+--- /dev/null
++++ b/drivers/hid/ipts/eds2.h
+@@ -0,0 +1,35 @@
++// SPDX-License-Identifier: GPL-2.0-or-later
++/*
++ * Copyright (c) 2023 Dorian Stoll
++ *
++ * Linux driver for Intel Precise Touch & Stylus
++ */
++
++#include <linux/hid.h>
++#include <linux/types.h>
++
++#include "context.h"
++
++/**
++ * ipts_eds2_get_descriptor() - Assembles the HID descriptor of the device.
++ * @ipts: The IPTS driver context.
++ * @desc_buffer: A pointer to the location where the address of the allocated buffer is stored.
++ * @desc_size: A pointer to the location where the size of the allocated buffer is stored.
++ *
++ * Returns: 0 on success, <0 on error.
++ */
++int ipts_eds2_get_descriptor(struct ipts_context *ipts, u8 **desc_buffer, size_t *desc_size);
++
++/**
++ * ipts_eds2_raw_request() - Executes an output or feature report on the device.
++ * @ipts: The IPTS driver context.
++ * @buffer: The buffer containing the report.
++ * @size: The size of the buffer.
++ * @report_id: The HID report ID.
++ * @report_type: Whether this report is an output or a feature report.
++ * @request_type: Whether this report requests or sends data.
++ *
++ * Returns: 0 on success, <0 on error.
++ */
++int ipts_eds2_raw_request(struct ipts_context *ipts, u8 *buffer, size_t size, u8 report_id,
++			  enum hid_report_type report_type, enum hid_class_request request_type);
+diff --git a/drivers/hid/ipts/hid.c b/drivers/hid/ipts/hid.c
+index a2471219615b..e34a1a4f9fa7 100644
+--- a/drivers/hid/ipts/hid.c
++++ b/drivers/hid/ipts/hid.c
+@@ -1,12 +1,12 @@
+ // SPDX-License-Identifier: GPL-2.0-or-later
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2022-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+  */
+ 
+ #include <linux/completion.h>
++#include <linux/err.h>
+ #include <linux/gfp.h>
+ #include <linux/hid.h>
+ #include <linux/mutex.h>
+@@ -14,38 +14,30 @@
+ #include <linux/types.h>
+ 
+ #include "context.h"
+-#include "control.h"
+ #include "desc.h"
++#include "eds1.h"
++#include "eds2.h"
+ #include "hid.h"
+ #include "spec-data.h"
+-#include "spec-device.h"
+ #include "spec-hid.h"
+ 
+-static int ipts_hid_start(struct hid_device *hid)
++void ipts_hid_enable(struct ipts_context *ipts)
+ {
+-	return 0;
++	WRITE_ONCE(ipts->hid_active, true);
+ }
+ 
+-static void ipts_hid_stop(struct hid_device *hid)
++void ipts_hid_disable(struct ipts_context *ipts)
+ {
++	WRITE_ONCE(ipts->hid_active, false);
+ }
+ 
+-static int ipts_hid_switch_mode(struct ipts_context *ipts, enum ipts_mode mode)
++static int ipts_hid_start(struct hid_device *hid)
+ {
+-	if (!ipts)
+-		return -EFAULT;
+-
+-	if (ipts->mode == mode)
+-		return 0;
+-
+-	/*
+-	 * This is only allowed on older devices.
+-	 */
+-	if (ipts->info.intf_eds > 1)
+-		return 0;
++	return 0;
++}
+ 
+-	ipts->mode = mode;
+-	return ipts_control_restart(ipts);
++static void ipts_hid_stop(struct hid_device *hid)
++{
+ }
+ 
+ static int ipts_hid_parse(struct hid_device *hid)
+@@ -53,8 +45,6 @@ static int ipts_hid_parse(struct hid_device *hid)
+ 	int ret = 0;
+ 	struct ipts_context *ipts = NULL;
+ 
+-	bool has_native_descriptor = false;
+-
+ 	u8 *buffer = NULL;
+ 	size_t size = 0;
+ 
+@@ -66,26 +56,17 @@ static int ipts_hid_parse(struct hid_device *hid)
+ 	if (!ipts)
+ 		return -EFAULT;
+ 
+-	size = sizeof(ipts_singletouch_descriptor);
+-	has_native_descriptor = ipts->descriptor.address && ipts->descriptor.size > 0;
++	if (!READ_ONCE(ipts->hid_active))
++		return -ENODEV;
+ 
+-	if (has_native_descriptor)
+-		size += ipts->descriptor.size;
++	if (ipts->info.intf_eds == 1)
++		ret = ipts_eds1_get_descriptor(ipts, &buffer, &size);
+ 	else
+-		size += sizeof(ipts_fallback_descriptor);
+-
+-	buffer = kzalloc(size, GFP_KERNEL);
+-	if (!buffer)
+-		return -ENOMEM;
+-
+-	memcpy(buffer, ipts_singletouch_descriptor, sizeof(ipts_singletouch_descriptor));
++		ret = ipts_eds2_get_descriptor(ipts, &buffer, &size);
+ 
+-	if (has_native_descriptor) {
+-		memcpy(&buffer[sizeof(ipts_singletouch_descriptor)], ipts->descriptor.address,
+-		       ipts->descriptor.size);
+-	} else {
+-		memcpy(&buffer[sizeof(ipts_singletouch_descriptor)], ipts_fallback_descriptor,
+-		       sizeof(ipts_fallback_descriptor));
++	if (ret) {
++		dev_err(ipts->dev, "Failed to allocate HID descriptor: %d\n", ret);
++		return ret;
+ 	}
+ 
+ 	ret = hid_parse_report(hid, buffer, size);
+@@ -99,84 +80,11 @@ static int ipts_hid_parse(struct hid_device *hid)
+ 	return 0;
+ }
+ 
+-static int ipts_hid_get_feature(struct ipts_context *ipts, unsigned char reportnum, __u8 *buf,
+-				size_t size, enum ipts_feedback_data_type type)
+-{
+-	int ret = 0;
+-
+-	if (!ipts)
+-		return -EFAULT;
+-
+-	if (!buf)
+-		return -EFAULT;
+-
+-	mutex_lock(&ipts->feature_lock);
+-
+-	memset(buf, 0, size);
+-	buf[0] = reportnum;
+-
+-	memset(&ipts->feature_report, 0, sizeof(ipts->feature_report));
+-	reinit_completion(&ipts->feature_event);
+-
+-	ret = ipts_control_hid2me_feedback(ipts, IPTS_FEEDBACK_CMD_TYPE_NONE, type, buf, size);
+-	if (ret) {
+-		dev_err(ipts->dev, "Failed to send hid2me feedback: %d\n", ret);
+-		goto out;
+-	}
+-
+-	ret = wait_for_completion_timeout(&ipts->feature_event, msecs_to_jiffies(5000));
+-	if (ret == 0) {
+-		dev_warn(ipts->dev, "GET_FEATURES timed out!\n");
+-		ret = -EIO;
+-		goto out;
+-	}
+-
+-	if (!ipts->feature_report.address) {
+-		ret = -EFAULT;
+-		goto out;
+-	}
+-
+-	if (ipts->feature_report.size > size) {
+-		ret = -ETOOSMALL;
+-		goto out;
+-	}
+-
+-	ret = ipts->feature_report.size;
+-	memcpy(buf, ipts->feature_report.address, ipts->feature_report.size);
+-
+-out:
+-	mutex_unlock(&ipts->feature_lock);
+-	return ret;
+-}
+-
+-static int ipts_hid_set_feature(struct ipts_context *ipts, unsigned char reportnum, __u8 *buf,
+-				size_t size, enum ipts_feedback_data_type type)
+-{
+-	int ret = 0;
+-
+-	if (!ipts)
+-		return -EFAULT;
+-
+-	if (!buf)
+-		return -EFAULT;
+-
+-	buf[0] = reportnum;
+-
+-	ret = ipts_control_hid2me_feedback(ipts, IPTS_FEEDBACK_CMD_TYPE_NONE, type, buf, size);
+-	if (ret)
+-		dev_err(ipts->dev, "Failed to send hid2me feedback: %d\n", ret);
+-
+-	return ret;
+-}
+-
+-static int ipts_hid_raw_request(struct hid_device *hid, unsigned char reportnum, __u8 *buf,
+-				size_t size, unsigned char rtype, int reqtype)
++static int ipts_hid_raw_request(struct hid_device *hid, unsigned char report_id, __u8 *buffer,
++				size_t size, unsigned char report_type, int request_type)
+ {
+-	int ret = 0;
+ 	struct ipts_context *ipts = NULL;
+ 
+-	enum ipts_feedback_data_type type = IPTS_FEEDBACK_DATA_TYPE_VENDOR;
+-
+ 	if (!hid)
+ 		return -ENODEV;
+ 
+@@ -185,44 +93,16 @@ static int ipts_hid_raw_request(struct hid_device *hid, unsigned char reportnum,
+ 	if (!ipts)
+ 		return -EFAULT;
+ 
+-	if (!buf)
+-		return -EFAULT;
+-
+-	if (rtype == HID_OUTPUT_REPORT && reqtype == HID_REQ_SET_REPORT)
+-		type = IPTS_FEEDBACK_DATA_TYPE_OUTPUT_REPORT;
+-	else if (rtype == HID_FEATURE_REPORT && reqtype == HID_REQ_GET_REPORT)
+-		type = IPTS_FEEDBACK_DATA_TYPE_GET_FEATURES;
+-	else if (rtype == HID_FEATURE_REPORT && reqtype == HID_REQ_SET_REPORT)
+-		type = IPTS_FEEDBACK_DATA_TYPE_SET_FEATURES;
+-	else
+-		return -EIO;
+-
+-	// Implemente mode switching report for older devices without native HID support
+-	if (type == IPTS_FEEDBACK_DATA_TYPE_SET_FEATURES && reportnum == IPTS_HID_REPORT_SET_MODE) {
+-		ret = ipts_hid_switch_mode(ipts, buf[1]);
+-		if (ret) {
+-			dev_err(ipts->dev, "Failed to switch modes: %d\n", ret);
+-			return ret;
+-		}
+-	}
+-
+-	if (reqtype == HID_REQ_GET_REPORT)
+-		return ipts_hid_get_feature(ipts, reportnum, buf, size, type);
+-	else
+-		return ipts_hid_set_feature(ipts, reportnum, buf, size, type);
+-}
+-
+-static int ipts_hid_output_report(struct hid_device *hid, __u8 *data, size_t size)
+-{
+-	struct ipts_context *ipts = NULL;
+-
+-	if (!hid)
++	if (!READ_ONCE(ipts->hid_active))
+ 		return -ENODEV;
+ 
+-	ipts = hid->driver_data;
+-
+-	return ipts_control_hid2me_feedback(ipts, IPTS_FEEDBACK_CMD_TYPE_NONE,
+-					    IPTS_FEEDBACK_DATA_TYPE_OUTPUT_REPORT, data, size);
++	if (ipts->info.intf_eds == 1) {
++		return ipts_eds1_raw_request(ipts, buffer, size, report_id, report_type,
++					     request_type);
++	} else {
++		return ipts_eds2_raw_request(ipts, buffer, size, report_id, report_type,
++					     request_type);
++	}
+ }
+ 
+ static struct hid_ll_driver ipts_hid_driver = {
+@@ -232,7 +112,6 @@ static struct hid_ll_driver ipts_hid_driver = {
+ 	.close = ipts_hid_stop,
+ 	.parse = ipts_hid_parse,
+ 	.raw_request = ipts_hid_raw_request,
+-	.output_report = ipts_hid_output_report,
+ };
+ 
+ int ipts_hid_input_data(struct ipts_context *ipts, u32 buffer)
+@@ -247,6 +126,9 @@ int ipts_hid_input_data(struct ipts_context *ipts, u32 buffer)
+ 	if (!ipts->hid)
+ 		return -ENODEV;
+ 
++	if (!READ_ONCE(ipts->hid_active))
++		return -ENODEV;
++
+ 	header = (struct ipts_data_header *)ipts->resources.data[buffer].address;
+ 
+ 	temp = ipts->resources.report.address;
+diff --git a/drivers/hid/ipts/hid.h b/drivers/hid/ipts/hid.h
+index 62bf3cd48608..1ebe77447903 100644
+--- a/drivers/hid/ipts/hid.h
++++ b/drivers/hid/ipts/hid.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2022-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+@@ -14,6 +13,9 @@
+ #include "context.h"
+ #include "spec-device.h"
+ 
++void ipts_hid_enable(struct ipts_context *ipts);
++void ipts_hid_disable(struct ipts_context *ipts);
++
+ int ipts_hid_input_data(struct ipts_context *ipts, u32 buffer);
+ 
+ int ipts_hid_init(struct ipts_context *ipts, struct ipts_device_info info);
+diff --git a/drivers/hid/ipts/main.c b/drivers/hid/ipts/main.c
+index 0f20c6c08c38..fb5b5c13ee3e 100644
+--- a/drivers/hid/ipts/main.c
++++ b/drivers/hid/ipts/main.c
+@@ -1,6 +1,5 @@
+ // SPDX-License-Identifier: GPL-2.0-or-later
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+diff --git a/drivers/hid/ipts/mei.c b/drivers/hid/ipts/mei.c
+index 26666fd99b0c..1e0395ceae4a 100644
+--- a/drivers/hid/ipts/mei.c
++++ b/drivers/hid/ipts/mei.c
+@@ -1,6 +1,5 @@
+ // SPDX-License-Identifier: GPL-2.0-or-later
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+diff --git a/drivers/hid/ipts/mei.h b/drivers/hid/ipts/mei.h
+index eadacae54c40..973bade6b0fd 100644
+--- a/drivers/hid/ipts/mei.h
++++ b/drivers/hid/ipts/mei.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+@@ -31,7 +30,7 @@ struct ipts_mei {
+ 	struct rw_semaphore message_lock;
+ };
+ 
+-/*
++/**
+  * ipts_mei_recv() - Receive data from a MEI device.
+  * @mei: The IPTS MEI device context.
+  * @code: The IPTS command code to look for.
+@@ -45,7 +44,7 @@ struct ipts_mei {
+ int ipts_mei_recv(struct ipts_mei *mei, enum ipts_command_code code, struct ipts_response *rsp,
+ 		  u64 timeout);
+ 
+-/*
++/**
+  * ipts_mei_send() - Send data to a MEI device.
+  * @ipts: The IPTS MEI device context.
+  * @data: The data to send.
+@@ -55,7 +54,7 @@ int ipts_mei_recv(struct ipts_mei *mei, enum ipts_command_code code, struct ipts
+  */
+ int ipts_mei_send(struct ipts_mei *mei, void *data, size_t length);
+ 
+-/*
++/**
+  * ipts_mei_init() - Initialize the MEI device context.
+  * @mei: The MEI device context to initialize.
+  * @cldev: The MEI device the context will be bound to.
+diff --git a/drivers/hid/ipts/receiver.c b/drivers/hid/ipts/receiver.c
+index f56e9ed32d57..ef66c3c9db80 100644
+--- a/drivers/hid/ipts/receiver.c
++++ b/drivers/hid/ipts/receiver.c
+@@ -1,6 +1,5 @@
+ // SPDX-License-Identifier: GPL-2.0-or-later
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+@@ -66,7 +65,9 @@ static int ipts_receiver_event_loop(struct ipts_thread *thread)
+ 	dev_info(ipts->dev, "IPTS running in event mode\n");
+ 
+ 	while (!ipts_thread_should_stop(thread)) {
+-		for (int i = 0; i < IPTS_BUFFERS; i++) {
++		int i = 0;
++
++		for (i = 0; i < IPTS_BUFFERS; i++) {
+ 			ret = ipts_control_wait_data(ipts, false);
+ 			if (ret == -EAGAIN)
+ 				break;
+@@ -126,7 +127,7 @@ static int ipts_receiver_event_loop(struct ipts_thread *thread)
+ 	return 0;
+ }
+ 
+-static int ipts_receiver_doorbell_loop(struct ipts_thread *thread)
++static int ipts_receiver_poll_loop(struct ipts_thread *thread)
+ {
+ 	int ret = 0;
+ 	u32 buffer = 0;
+@@ -145,7 +146,7 @@ static int ipts_receiver_doorbell_loop(struct ipts_thread *thread)
+ 	if (!ipts)
+ 		return -EFAULT;
+ 
+-	dev_info(ipts->dev, "IPTS running in doorbell mode\n");
++	dev_info(ipts->dev, "IPTS running in poll mode\n");
+ 
+ 	while (true) {
+ 		if (ipts_thread_should_stop(thread)) {
+@@ -217,9 +218,9 @@ int ipts_receiver_start(struct ipts_context *ipts)
+ 	if (ipts->mode == IPTS_MODE_EVENT) {
+ 		ret = ipts_thread_start(&ipts->receiver_loop, ipts_receiver_event_loop, ipts,
+ 					"ipts_event");
+-	} else if (ipts->mode == IPTS_MODE_DOORBELL) {
+-		ret = ipts_thread_start(&ipts->receiver_loop, ipts_receiver_doorbell_loop, ipts,
+-					"ipts_doorbell");
++	} else if (ipts->mode == IPTS_MODE_POLL) {
++		ret = ipts_thread_start(&ipts->receiver_loop, ipts_receiver_poll_loop, ipts,
++					"ipts_poll");
+ 	} else {
+ 		ret = -EINVAL;
+ 	}
+diff --git a/drivers/hid/ipts/receiver.h b/drivers/hid/ipts/receiver.h
+index 96070f34fbca..3de7da62d40c 100644
+--- a/drivers/hid/ipts/receiver.h
++++ b/drivers/hid/ipts/receiver.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+diff --git a/drivers/hid/ipts/resources.c b/drivers/hid/ipts/resources.c
+index 5e924d58c488..cc14653b2a9f 100644
+--- a/drivers/hid/ipts/resources.c
++++ b/drivers/hid/ipts/resources.c
+@@ -1,12 +1,12 @@
+ // SPDX-License-Identifier: GPL-2.0-or-later
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+  */
+ 
+ #include <linux/dma-mapping.h>
++#include <linux/slab.h>
+ #include <linux/types.h>
+ 
+ #include "desc.h"
+@@ -107,10 +107,6 @@ int ipts_resources_init(struct ipts_resources *res, struct device *dev, size_t d
+ 
+ int ipts_resources_free(struct ipts_resources *res)
+ {
+-	/*
+-	 * Some compilers (AOSP clang) complain about a redefined
+-	 * variable when this is declared inside of the for loop.
+-	 */
+ 	int i = 0;
+ 
+ 	if (!res)
+diff --git a/drivers/hid/ipts/resources.h b/drivers/hid/ipts/resources.h
+index e0c400f420b9..2068e13285f0 100644
+--- a/drivers/hid/ipts/resources.h
++++ b/drivers/hid/ipts/resources.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+diff --git a/drivers/hid/ipts/spec-device.h b/drivers/hid/ipts/spec-device.h
+index 93f673d981f7..41845f9d9025 100644
+--- a/drivers/hid/ipts/spec-device.h
++++ b/drivers/hid/ipts/spec-device.h
+@@ -109,14 +109,14 @@ static_assert(sizeof(struct ipts_command) == 324);
+ 
+ /**
+  * enum ipts_mode - Configures what data the device produces and how its sent.
+- * @IPTS_MODE_EVENT:    The device will send an event once a buffer was filled.
+- *                      Older devices will return singletouch data in this mode.
+- * @IPTS_MODE_DOORBELL: The device will notify the driver by incrementing the doorbell value.
+- *                      Older devices will return multitouch data in this mode.
++ * @IPTS_MODE_EVENT: The device will send an event once a buffer was filled.
++ *                   Older devices will return singletouch data in this mode.
++ * @IPTS_MODE_POLL:  The device will notify the driver by incrementing the doorbell value.
++ *                   Older devices will return multitouch data in this mode.
+  */
+ enum ipts_mode {
+ 	IPTS_MODE_EVENT = 0x00,
+-	IPTS_MODE_DOORBELL = 0x01,
++	IPTS_MODE_POLL = 0x01,
+ };
+ 
+ /**
+@@ -253,14 +253,19 @@ static_assert(sizeof(struct ipts_response) == 88);
+ 
+ /**
+  * struct ipts_device_info - Vendor information of the IPTS device.
+- * @vendor:        Vendor ID of this device.
+- * @product:       Product ID of this device.
+- * @hw_version:    Hardware revision of this device.
+- * @fw_version:    Firmware revision of this device.
+- * @data_size:     Requested size for a data buffer.
+- * @feedback_size: Requested size for a feedback buffer.
+- * @mode:          Mode that the device currently operates in.
+- * @max_contacts:  Maximum amount of concurrent touches the sensor can process.
++ * @vendor:         Vendor ID of this device.
++ * @product:        Product ID of this device.
++ * @hw_version:     Hardware revision of this device.
++ * @fw_version:     Firmware revision of this device.
++ * @data_size:      Requested size for a data buffer.
++ * @feedback_size:  Requested size for a feedback buffer.
++ * @mode:           Mode that the device currently operates in.
++ * @max_contacts:   Maximum amount of concurrent touches the sensor can process.
++ * @sensor_min_eds: The minimum EDS version supported by the sensor.
++ * @sensor_max_eds: The maximum EDS version supported by the sensor.
++ * @me_min_eds:     The minimum EDS version supported by the ME for communicating with the sensor.
++ * @me_max_eds:     The maximum EDS version supported by the ME for communicating with the sensor.
++ * @intf_eds:       The EDS version implemented by the interface between ME and host.
+  */
+ struct ipts_device_info {
+ 	u16 vendor;
+diff --git a/drivers/hid/ipts/spec-hid.h b/drivers/hid/ipts/spec-hid.h
+index ea70f29ff00c..5a58d4a0a610 100644
+--- a/drivers/hid/ipts/spec-hid.h
++++ b/drivers/hid/ipts/spec-hid.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2020-2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+diff --git a/drivers/hid/ipts/thread.c b/drivers/hid/ipts/thread.c
+index 8b46f775c107..355e92bea26f 100644
+--- a/drivers/hid/ipts/thread.c
++++ b/drivers/hid/ipts/thread.c
+@@ -1,6 +1,5 @@
+ // SPDX-License-Identifier: GPL-2.0-or-later
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+diff --git a/drivers/hid/ipts/thread.h b/drivers/hid/ipts/thread.h
+index a314843599fc..1f966b8b32c4 100644
+--- a/drivers/hid/ipts/thread.h
++++ b/drivers/hid/ipts/thread.h
+@@ -1,6 +1,5 @@
+ /* SPDX-License-Identifier: GPL-2.0-or-later */
+ /*
+- * Copyright (c) 2016 Intel Corporation
+  * Copyright (c) 2023 Dorian Stoll
+  *
+  * Linux driver for Intel Precise Touch & Stylus
+@@ -29,7 +28,7 @@ struct ipts_thread {
+ 	int (*threadfn)(struct ipts_thread *thread);
+ };
+ 
+-/*
++/**
+  * ipts_thread_should_stop() - Returns true if the thread is asked to terminate.
+  * @thread: The current thread.
+  *
+@@ -37,7 +36,7 @@ struct ipts_thread {
+  */
+ bool ipts_thread_should_stop(struct ipts_thread *thread);
+ 
+-/*
++/**
+  * ipts_thread_start() - Starts an IPTS thread.
+  * @thread: The thread to initialize and start.
+  * @threadfn: The function to execute.
+@@ -49,7 +48,7 @@ bool ipts_thread_should_stop(struct ipts_thread *thread);
+ int ipts_thread_start(struct ipts_thread *thread, int (*threadfn)(struct ipts_thread *thread),
+ 		      void *data, const char name[]);
+ 
+-/*
++/**
+  * ipts_thread_stop() - Asks the thread to terminate and waits until it has finished.
+  * @thread: The thread that should stop.
+  *
+-- 
+2.41.0
+

+ 3 - 3
patches/6.1/0005-ithc.patch

@@ -1,4 +1,4 @@
-From fd1fe8fe71b5faad00dced22388064a9579ec5ee Mon Sep 17 00:00:00 2001
+From 8f8b6c34d91d107ade81b67f1cd63086aeeff3b3 Mon Sep 17 00:00:00 2001
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 Date: Sun, 11 Dec 2022 12:03:38 +0100
 Date: Sun, 11 Dec 2022 12:03:38 +0100
 Subject: [PATCH] iommu: intel: Disable source id verification for ITHC
 Subject: [PATCH] iommu: intel: Disable source id verification for ITHC
@@ -39,7 +39,7 @@ index 5962bb5027d0..86fa129d10d4 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 94f87e32f911488c398c8383dfc73417a5e79581 Mon Sep 17 00:00:00 2001
+From 58d4192dab391bc663de0b3a23e612081a528201 Mon Sep 17 00:00:00 2001
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 Date: Sun, 11 Dec 2022 12:10:54 +0100
 Date: Sun, 11 Dec 2022 12:10:54 +0100
 Subject: [PATCH] hid: Add support for Intel Touch Host Controller
 Subject: [PATCH] hid: Add support for Intel Touch Host Controller
@@ -72,7 +72,7 @@ Patchset: ithc
  create mode 100644 drivers/hid/ithc/ithc.h
  create mode 100644 drivers/hid/ithc/ithc.h
 
 
 diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
 diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
-index 1523ccdf73b5..b7030071ac0c 100644
+index af7ab503de74..178e051edb30 100644
 --- a/drivers/hid/Kconfig
 --- a/drivers/hid/Kconfig
 +++ b/drivers/hid/Kconfig
 +++ b/drivers/hid/Kconfig
 @@ -1292,4 +1292,6 @@ source "drivers/hid/surface-hid/Kconfig"
 @@ -1292,4 +1292,6 @@ source "drivers/hid/surface-hid/Kconfig"

+ 14 - 14
patches/6.1/0006-surface-sam.patch

@@ -1,4 +1,4 @@
-From 51f685ca15246c04c2a4fc35f936b3110aa51990 Mon Sep 17 00:00:00 2001
+From 3bc86ffc0ee10f4d51f4c24de8e996292d0f9ec3 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Fri, 2 Dec 2022 23:33:20 +0100
 Date: Fri, 2 Dec 2022 23:33:20 +0100
 Subject: [PATCH] platform/surface: aggregator: Improve documentation and
 Subject: [PATCH] platform/surface: aggregator: Improve documentation and
@@ -289,7 +289,7 @@ index 45501b6e54e8..5c4ae1a26183 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From cc3d857c8eac4e7472464ce29ae702f42919d334 Mon Sep 17 00:00:00 2001
+From 5da56c9917db655cc6545655165df7e64e037f89 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Fri, 2 Dec 2022 23:33:21 +0100
 Date: Fri, 2 Dec 2022 23:33:21 +0100
 Subject: [PATCH] platform/surface: aggregator: Add target and source IDs to
 Subject: [PATCH] platform/surface: aggregator: Add target and source IDs to
@@ -486,7 +486,7 @@ index 2a2c17771d01..55cc61bba1da 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 39d833052dcbdf815e5ea57bece39dd7ff035758 Mon Sep 17 00:00:00 2001
+From f5a2edfbd03206cb827470f749ff527c9b61a840 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Fri, 2 Dec 2022 23:33:22 +0100
 Date: Fri, 2 Dec 2022 23:33:22 +0100
 Subject: [PATCH] platform/surface: aggregator_hub: Use target-ID enum instead
 Subject: [PATCH] platform/surface: aggregator_hub: Use target-ID enum instead
@@ -529,7 +529,7 @@ index 43061514be38..62f27cdb6ca8 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From da2058ccb30d3c9151c56feebbe8348f85b19719 Mon Sep 17 00:00:00 2001
+From 3265681c29a49ebbe5c882eddd4dffded8b435d1 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Fri, 2 Dec 2022 23:33:23 +0100
 Date: Fri, 2 Dec 2022 23:33:23 +0100
 Subject: [PATCH] platform/surface: aggregator_tabletsw: Use target-ID enum
 Subject: [PATCH] platform/surface: aggregator_tabletsw: Use target-ID enum
@@ -581,7 +581,7 @@ index af8b547cffdc..c8ecbdbb516c 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From a2805a00d5f3fb81ee4c4a6949b2d451810b8583 Mon Sep 17 00:00:00 2001
+From d85b9eae02f9370afa8195cd989b23600ccecf45 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Fri, 2 Dec 2022 23:33:24 +0100
 Date: Fri, 2 Dec 2022 23:33:24 +0100
 Subject: [PATCH] platform/surface: dtx: Use target-ID enum instead of
 Subject: [PATCH] platform/surface: dtx: Use target-ID enum instead of
@@ -679,7 +679,7 @@ index ed36944467f9..0de76a784a35 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From a8c5d2b863e5e1f9a83b76925b8ef255572829ed Mon Sep 17 00:00:00 2001
+From 2008e11821e205d90cb9d6bde0ab80680136754a Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Fri, 2 Dec 2022 23:33:25 +0100
 Date: Fri, 2 Dec 2022 23:33:25 +0100
 Subject: [PATCH] HID: surface-hid: Use target-ID enum instead of hard-coding
 Subject: [PATCH] HID: surface-hid: Use target-ID enum instead of hard-coding
@@ -713,7 +713,7 @@ index 0635341bc517..42933bf3e925 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 5df35e4ea48aceacdf5456af7719c3f38ba86e0c Mon Sep 17 00:00:00 2001
+From 08c449b24788dcad6ce5c262adb305eea255537c Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Fri, 2 Dec 2022 23:33:26 +0100
 Date: Fri, 2 Dec 2022 23:33:26 +0100
 Subject: [PATCH] platform/surface: aggregator: Enforce use of target-ID enum
 Subject: [PATCH] platform/surface: aggregator: Enforce use of target-ID enum
@@ -949,7 +949,7 @@ index 46c45d1b6368..4da20b7a0ee5 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 2571e49cb7ec50ea462e8bde8d881bf839d85834 Mon Sep 17 00:00:00 2001
+From 75d2753ab7199e36c4551adb7b212f04a03aaa71 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Fri, 2 Dec 2022 23:33:27 +0100
 Date: Fri, 2 Dec 2022 23:33:27 +0100
 Subject: [PATCH] platform/surface: aggregator_registry: Fix target-ID of
 Subject: [PATCH] platform/surface: aggregator_registry: Fix target-ID of
@@ -1004,7 +1004,7 @@ index 023f126121d7..296f72d52e6a 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 4c78a90f99f33416ebe0bc11e22b7bfb5f6d6c33 Mon Sep 17 00:00:00 2001
+From dfd62e288c1af34b7faa4c71e1f82cf07f01262a Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Tue, 20 Dec 2022 18:56:08 +0100
 Date: Tue, 20 Dec 2022 18:56:08 +0100
 Subject: [PATCH] platform/surface: aggregator: Rename top-level request
 Subject: [PATCH] platform/surface: aggregator: Rename top-level request
@@ -1551,7 +1551,7 @@ index 4da20b7a0ee5..1545e5567b15 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From b63fe3cb5067037e17935dfa47931216aaaa0961 Mon Sep 17 00:00:00 2001
+From 3ebbc28744079afe39890f9636062f8f8fd10b7d Mon Sep 17 00:00:00 2001
 From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 Date: Wed, 18 Jan 2023 11:38:23 +0200
 Date: Wed, 18 Jan 2023 11:38:23 +0200
 Subject: [PATCH] platform/surface: Switch to use acpi_evaluate_dsm_typed()
 Subject: [PATCH] platform/surface: Switch to use acpi_evaluate_dsm_typed()
@@ -1607,7 +1607,7 @@ index f004a2495201..7b6d887dccdb 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 3417b7076c52e3802cd1d9f2e7833a9f9aa23efd Mon Sep 17 00:00:00 2001
+From b2e67047d26cd57ff279349c145f1b24ae337331 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sat, 4 Mar 2023 20:09:36 +0100
 Date: Sat, 4 Mar 2023 20:09:36 +0100
 Subject: [PATCH] platform/surface: aggregator_tabletsw: Properly handle
 Subject: [PATCH] platform/surface: aggregator_tabletsw: Properly handle
@@ -1915,7 +1915,7 @@ index a18e9fc7896b..f9a58db6afde 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 8917c24f65bf5528b597721511e6c2deb1c925f2 Mon Sep 17 00:00:00 2001
+From 005e7073102ce89bb5cc4eed3cbc58ee295437aa Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 19 Feb 2023 23:33:43 +0100
 Date: Sun, 19 Feb 2023 23:33:43 +0100
 Subject: [PATCH] platform/surface: aggregator_tabletsw: Add support for
 Subject: [PATCH] platform/surface: aggregator_tabletsw: Add support for
@@ -2032,7 +2032,7 @@ index f9a58db6afde..4a029f5db20a 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 9c3e07742d2b7685ce48dcbab7e7ab6c39ba99f6 Mon Sep 17 00:00:00 2001
+From b1e9a73d1d5e9510262caaa60d430c4d91615f6f Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 19 Feb 2023 23:41:18 +0100
 Date: Sun, 19 Feb 2023 23:41:18 +0100
 Subject: [PATCH] platform/surface: aggregator_registry: Add support for
 Subject: [PATCH] platform/surface: aggregator_registry: Add support for
@@ -2063,7 +2063,7 @@ index 296f72d52e6a..0fe5be539652 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 6db814f771605cec3488dabe69f2dbde5ef831a9 Mon Sep 17 00:00:00 2001
+From ae340147ffe9d7cecdded8d71828d7399da4669a Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Thu, 18 May 2023 22:57:17 +0200
 Date: Thu, 18 May 2023 22:57:17 +0200
 Subject: [PATCH] platform/surface: aggregator_tabletsw: Add support for book
 Subject: [PATCH] platform/surface: aggregator_tabletsw: Add support for book

+ 2 - 2
patches/6.1/0007-surface-sam-over-hid.patch

@@ -1,4 +1,4 @@
-From 76449808e85a0e7aacb9563d22bd13cd9e01d44f Mon Sep 17 00:00:00 2001
+From eafd513873f7d4a05c71017d6cd7bfe82c9f7fa4 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
@@ -110,7 +110,7 @@ index 4dd777cc0c89..b2338618163a 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 8eb031740262efa10ffa10e4aa8d99791c65f65d Mon Sep 17 00:00:00 2001
+From 125a51453cd8b4e36ceb3cdcff6ff297beeda26b Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sat, 13 Feb 2021 16:41:18 +0100
 Date: Sat, 13 Feb 2021 16:41:18 +0100
 Subject: [PATCH] platform/surface: Add driver for Surface Book 1 dGPU switch
 Subject: [PATCH] platform/surface: Add driver for Surface Book 1 dGPU switch

+ 2 - 2
patches/6.1/0008-surface-button.patch

@@ -1,4 +1,4 @@
-From f76cdcc98da8a11c5f013ac78893ac2aef2152dd Mon Sep 17 00:00:00 2001
+From 31b3d6c9e393fa470854a63f4c95102f0f883334 Mon Sep 17 00:00:00 2001
 From: Sachi King <nakato@nakato.io>
 From: Sachi King <nakato@nakato.io>
 Date: Tue, 5 Oct 2021 00:05:09 +1100
 Date: Tue, 5 Oct 2021 00:05:09 +1100
 Subject: [PATCH] Input: soc_button_array - support AMD variant Surface devices
 Subject: [PATCH] Input: soc_button_array - support AMD variant Surface devices
@@ -75,7 +75,7 @@ index e79f5497948b..2bddbe6e9ea4 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From db6513169eaff8741565f3d01c9a3f8832e153b1 Mon Sep 17 00:00:00 2001
+From 35b103c6593b3aff39a0ff80ed9a048c6cd3eded Mon Sep 17 00:00:00 2001
 From: Sachi King <nakato@nakato.io>
 From: Sachi King <nakato@nakato.io>
 Date: Tue, 5 Oct 2021 00:22:57 +1100
 Date: Tue, 5 Oct 2021 00:22:57 +1100
 Subject: [PATCH] platform/surface: surfacepro3_button: don't load on amd
 Subject: [PATCH] platform/surface: surfacepro3_button: don't load on amd

+ 3 - 3
patches/6.1/0009-surface-typecover.patch

@@ -1,4 +1,4 @@
-From b6784a370e71be072ebf3229c00a60af26c5a5d8 Mon Sep 17 00:00:00 2001
+From 7479968b2ab2a37a7a59ed1cecbf8a4846ac48d2 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sat, 18 Feb 2023 01:02:49 +0100
 Date: Sat, 18 Feb 2023 01:02:49 +0100
 Subject: [PATCH] USB: quirks: Add USB_QUIRK_DELAY_INIT for Surface Go 3
 Subject: [PATCH] USB: quirks: Add USB_QUIRK_DELAY_INIT for Surface Go 3
@@ -39,7 +39,7 @@ index 934b3d997702..2c6604c6e8e1 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From a5845e062cd243086ab456feddf10386e887be84 Mon Sep 17 00:00:00 2001
+From b6c5c03edbc84c501fc40904b4c8e96900f85caa Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Thu, 5 Nov 2020 13:09:45 +0100
 Date: Thu, 5 Nov 2020 13:09:45 +0100
 Subject: [PATCH] hid/multitouch: Turn off Type Cover keyboard backlight when
 Subject: [PATCH] hid/multitouch: Turn off Type Cover keyboard backlight when
@@ -272,7 +272,7 @@ index e31be0cb8b85..63fd042aba6b 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 6581831e9cc156a52004d38b090c22594a6281ef Mon Sep 17 00:00:00 2001
+From e2296fec59641988bf19be20c68a51d67526ca46 Mon Sep 17 00:00:00 2001
 From: PJungkamp <p.jungkamp@gmail.com>
 From: PJungkamp <p.jungkamp@gmail.com>
 Date: Fri, 25 Feb 2022 12:04:25 +0100
 Date: Fri, 25 Feb 2022 12:04:25 +0100
 Subject: [PATCH] hid/multitouch: Add support for surface pro type cover tablet
 Subject: [PATCH] hid/multitouch: Add support for surface pro type cover tablet

+ 2 - 2
patches/6.1/0010-surface-shutdown.patch

@@ -1,4 +1,4 @@
-From 92d48e902b0bb630c63b61977f5a4b9b444156da Mon Sep 17 00:00:00 2001
+From 9636c2ce9321d075cf58f6c8e5d6f2d19cfa6c02 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 19 Feb 2023 22:12:24 +0100
 Date: Sun, 19 Feb 2023 22:12:24 +0100
 Subject: [PATCH] PCI: Add quirk to prevent calling shutdown mehtod
 Subject: [PATCH] PCI: Add quirk to prevent calling shutdown mehtod
@@ -81,7 +81,7 @@ index ccc90656130a..e74ec9370ac2 100644
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x466d, quirk_no_shutdown);  // Thunderbolt 4 NHI
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x466d, quirk_no_shutdown);  // Thunderbolt 4 NHI
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x46a8, quirk_no_shutdown);  // GPU
 +DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_INTEL, 0x46a8, quirk_no_shutdown);  // GPU
 diff --git a/include/linux/pci.h b/include/linux/pci.h
 diff --git a/include/linux/pci.h b/include/linux/pci.h
-index d20695184e0b..e0d4ff7f154a 100644
+index 9f617ffdb863..ca7dbe7937ae 100644
 --- a/include/linux/pci.h
 --- a/include/linux/pci.h
 +++ b/include/linux/pci.h
 +++ b/include/linux/pci.h
 @@ -462,6 +462,7 @@ struct pci_dev {
 @@ -462,6 +462,7 @@ struct pci_dev {

+ 1 - 1
patches/6.1/0011-surface-gpe.patch

@@ -1,4 +1,4 @@
-From 94dc5df2568ca4f8988ac05538f89c0b9da773cc Mon Sep 17 00:00:00 2001
+From 748f3b37e78a00f45a3c6ce16dc5502cf650cbfb Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 12 Mar 2023 01:41:57 +0100
 Date: Sun, 12 Mar 2023 01:41:57 +0100
 Subject: [PATCH] platform/surface: gpe: Add support for Surface Pro 9
 Subject: [PATCH] platform/surface: gpe: Add support for Surface Pro 9

+ 8 - 8
patches/6.1/0012-cameras.patch

@@ -1,4 +1,4 @@
-From 24c31035af26dff751a9db6db2433edb4eb47428 Mon Sep 17 00:00:00 2001
+From 282ef58ae2ac98bb008e33cd8e32a41fc4e271b8 Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:56:57 +0200
 Date: Sun, 10 Oct 2021 20:56:57 +0200
 Subject: [PATCH] ACPI: delay enumeration of devices with a _DEP pointing to an
 Subject: [PATCH] ACPI: delay enumeration of devices with a _DEP pointing to an
@@ -74,7 +74,7 @@ index dbfa58e799e2..ccbd3f8b523e 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 56ce4ffffbeadea4b261f33e65a89a2d294661b7 Mon Sep 17 00:00:00 2001
+From e0c3a5937b6373d339d04a7efcf459376f8202db Mon Sep 17 00:00:00 2001
 From: zouxiaoh <xiaohong.zou@intel.com>
 From: zouxiaoh <xiaohong.zou@intel.com>
 Date: Fri, 25 Jun 2021 08:52:59 +0800
 Date: Fri, 25 Jun 2021 08:52:59 +0800
 Subject: [PATCH] iommu: intel-ipu: use IOMMU passthrough mode for Intel IPUs
 Subject: [PATCH] iommu: intel-ipu: use IOMMU passthrough mode for Intel IPUs
@@ -191,7 +191,7 @@ index 3965979c7bd4..509cfb9f6695 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 766e2f5f9cce2fa906f6695972211d2e3da4c58b Mon Sep 17 00:00:00 2001
+From 1ce02aecb40faf7bee26f1fe7032df16e0d18037 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 From: Daniel Scally <djrscally@gmail.com>
 Date: Sun, 10 Oct 2021 20:57:02 +0200
 Date: Sun, 10 Oct 2021 20:57:02 +0200
 Subject: [PATCH] platform/x86: int3472: Enable I2c daisy chain
 Subject: [PATCH] platform/x86: int3472: Enable I2c daisy chain
@@ -228,7 +228,7 @@ index 5b8d1a9620a5..6a0ff035cf20 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 398581ab76e140f4e86de5e0e78ec86d7c9d3220 Mon Sep 17 00:00:00 2001
+From cef4df4c5f839c567d837bbf662f6d6aa17d4b89 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 From: Daniel Scally <djrscally@gmail.com>
 Date: Thu, 28 Oct 2021 21:55:16 +0100
 Date: Thu, 28 Oct 2021 21:55:16 +0100
 Subject: [PATCH] media: i2c: Add driver for DW9719 VCM
 Subject: [PATCH] media: i2c: Add driver for DW9719 VCM
@@ -732,7 +732,7 @@ index 000000000000..180b04d2a6b3
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 8742e7ec9084a47c59e4d4aaacb34b10dc13a8ef Mon Sep 17 00:00:00 2001
+From 04cbceb722d9e6ec7e8b715f1a3b17a6ab5d727b Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 From: Daniel Scally <djrscally@gmail.com>
 Date: Wed, 4 May 2022 23:21:45 +0100
 Date: Wed, 4 May 2022 23:21:45 +0100
 Subject: [PATCH] media: ipu3-cio2: Move functionality from .complete() to
 Subject: [PATCH] media: ipu3-cio2: Move functionality from .complete() to
@@ -847,7 +847,7 @@ index 3b76a9d0383a..38f9f4da1922 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From e9d9e858fb588ac60cb00ec149c9f563bc3063d6 Mon Sep 17 00:00:00 2001
+From 37e2500b286aa773d635673cd535a0154b7dbbee Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 From: Daniel Scally <djrscally@gmail.com>
 Date: Thu, 2 Jun 2022 22:15:56 +0100
 Date: Thu, 2 Jun 2022 22:15:56 +0100
 Subject: [PATCH] media: ipu3-cio2: Re-add .complete() to ipu3-cio2
 Subject: [PATCH] media: ipu3-cio2: Re-add .complete() to ipu3-cio2
@@ -890,7 +890,7 @@ index 38f9f4da1922..82681df7d794 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From c1de8e80e08057cc1b0c7c19371dbef93f01989b Mon Sep 17 00:00:00 2001
+From 7a0c67fdf7297789ab2d599eb9c3a6319df1c74e Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Fri, 15 Jul 2022 23:48:00 +0200
 Date: Fri, 15 Jul 2022 23:48:00 +0200
 Subject: [PATCH] drivers/media/i2c: Fix DW9719 dependencies
 Subject: [PATCH] drivers/media/i2c: Fix DW9719 dependencies
@@ -919,7 +919,7 @@ index 98d081efeef7..c67966cafe10 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From c6e57f9af3f26197f532865a8134dc11164ce6ea Mon Sep 17 00:00:00 2001
+From b437542014310005c4b8344fa4cf8ff900289715 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <dan.scally@ideasonboard.com>
 From: Daniel Scally <dan.scally@ideasonboard.com>
 Date: Thu, 2 Mar 2023 12:59:39 +0000
 Date: Thu, 2 Mar 2023 12:59:39 +0000
 Subject: [PATCH] platform/x86: int3472: Remap reset GPIO for INT347E
 Subject: [PATCH] platform/x86: int3472: Remap reset GPIO for INT347E

+ 2 - 2
patches/6.1/0013-amd-gpio.patch

@@ -1,4 +1,4 @@
-From c51aa845500465df525dd2119faf78e36803b7a9 Mon Sep 17 00:00:00 2001
+From fc83ee5839b47a5a85d439cd7fe10dcb9367a6b2 Mon Sep 17 00:00:00 2001
 From: Sachi King <nakato@nakato.io>
 From: Sachi King <nakato@nakato.io>
 Date: Sat, 29 May 2021 17:47:38 +1000
 Date: Sat, 29 May 2021 17:47:38 +1000
 Subject: [PATCH] ACPI: Add quirk for Surface Laptop 4 AMD missing irq 7
 Subject: [PATCH] ACPI: Add quirk for Surface Laptop 4 AMD missing irq 7
@@ -65,7 +65,7 @@ index 0f762070a5e1..6362dd452233 100644
 -- 
 -- 
 2.41.0
 2.41.0
 
 
-From 3f92b70f994c491eece179a8d2c2ab3bd6621fa9 Mon Sep 17 00:00:00 2001
+From 9ee0c485581ac1292f43c3d663a3bacb5db4ef62 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Thu, 3 Jun 2021 14:04:26 +0200
 Date: Thu, 3 Jun 2021 14:04:26 +0200
 Subject: [PATCH] ACPI: Add AMD 13" Surface Laptop 4 model to irq 7 override
 Subject: [PATCH] ACPI: Add AMD 13" Surface Laptop 4 model to irq 7 override

+ 1 - 1
patches/6.1/0014-rtc.patch

@@ -1,4 +1,4 @@
-From 9c90e7d9c8885448b70ad8f9b3e0b89b6b99717a Mon Sep 17 00:00:00 2001
+From 04c1330f1197369d71c3e46f31351d32c1e10bbe Mon Sep 17 00:00:00 2001
 From: "Bart Groeneveld | GPX Solutions B.V" <bart@gpxbv.nl>
 From: "Bart Groeneveld | GPX Solutions B.V" <bart@gpxbv.nl>
 Date: Mon, 5 Dec 2022 16:08:46 +0100
 Date: Mon, 5 Dec 2022 16:08:46 +0100
 Subject: [PATCH] acpi: allow usage of acpi_tad on HW-reduced platforms
 Subject: [PATCH] acpi: allow usage of acpi_tad on HW-reduced platforms