소스 검색

Update v5.14 patches

Changes:
 - Clean up and re-work Surface Aggregator Module support for the
   Surface Pro 8.
 - Fix a bug causing time-outs when unloading drivers of detached
   Surface Aggregator Module devices such as contained in the Surface
   Book 3 base and the Surface Pro 8 keyboard cover.
 - Move Surface Aggregator devices of the Surface Book 3 base from the
   base hub to the KIP hub introduced for the Surface Pro 8.

Links:
 - kernel: https://github.com/linux-surface/kernel/commit/e716df100b78e2fb5018c5437286604b3a9dcdd2
 - SAM: https://github.com/linux-surface/surface-aggregator-module/commit/3cfb0b76c812f4ff474278ae604d1bb630d4cbdf
Maximilian Luz 3 년 전
부모
커밋
ca6d4ff954

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

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

+ 25 - 25
patches/5.14/0002-mwifiex.patch

@@ -1,4 +1,4 @@
-From 0e9e73e3d3a51849432679cf94e61c7b6c5c26ec Mon Sep 17 00:00:00 2001
+From e5ba04fb640401a4059e9b9c59143466c5db43f2 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Fri, 20 Aug 2021 16:20:49 +0200
 Subject: [PATCH] mwifiex: pcie: add DMI-based quirk implementation for Surface
@@ -148,7 +148,7 @@ index 000000000000..18eacc8c2d3a
 -- 
 2.33.1
 
-From 95f800e9c9b0a97edf5500678ed376fa824903c5 Mon Sep 17 00:00:00 2001
+From 1a06a6339a90793dd3c929bfa1fc295a0df2161f Mon Sep 17 00:00:00 2001
 From: Tsuchiya Yuto <kitakar@gmail.com>
 Date: Fri, 20 Aug 2021 16:20:50 +0200
 Subject: [PATCH] mwifiex: pcie: add reset_d3cold quirk for Surface gen4+
@@ -353,7 +353,7 @@ index 18eacc8c2d3a..8ec4176d698f 100644
 -- 
 2.33.1
 
-From 94856972be4ad8fb7527e30360bf51bc93b15dce Mon Sep 17 00:00:00 2001
+From 486fe30526e7be0e852c9346d22ec5be2034487c Mon Sep 17 00:00:00 2001
 From: Tsuchiya Yuto <kitakar@gmail.com>
 Date: Tue, 29 Sep 2020 17:32:22 +0900
 Subject: [PATCH] mwifiex: pcie: add reset_wsid quirk for Surface 3
@@ -538,7 +538,7 @@ index 8ec4176d698f..25370c5a4f59 100644
 -- 
 2.33.1
 
-From b65a320577eff6e57e397b1e6ed71e68c6e40733 Mon Sep 17 00:00:00 2001
+From 1c5c097c74c5f991a1e3017f125290c1b8369a6a Mon Sep 17 00:00:00 2001
 From: Tsuchiya Yuto <kitakar@gmail.com>
 Date: Wed, 30 Sep 2020 18:08:24 +0900
 Subject: [PATCH] mwifiex: pcie: (OEMB) add quirk for Surface 3 with broken DMI
@@ -600,7 +600,7 @@ index 563dd0d5ac79..32e2f000e57b 100644
 -- 
 2.33.1
 
-From a1d2be3230d3aa5a832938570cb0167580c3d96e Mon Sep 17 00:00:00 2001
+From 898dd573528db114ea87218abc24274d18fd7223 Mon Sep 17 00:00:00 2001
 From: Tsuchiya Yuto <kitakar@gmail.com>
 Date: Sun, 4 Oct 2020 00:11:49 +0900
 Subject: [PATCH] mwifiex: pcie: disable bridge_d3 for Surface gen4+
@@ -755,7 +755,7 @@ index 25370c5a4f59..a1de111ad1db 100644
 -- 
 2.33.1
 
-From f195b059b1b354880411b6cb285f1906c9c6fb84 Mon Sep 17 00:00:00 2001
+From a1ee6b357312830d31808692bc4002c12a0a5bcd Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Tue, 3 Nov 2020 13:28:04 +0100
 Subject: [PATCH] mwifiex: Add quirk resetting the PCI bridge on MS Surface
@@ -922,7 +922,7 @@ index a1de111ad1db..0e429779bb04 100644
 -- 
 2.33.1
 
-From 9089879a9e59c63e3de1b8640a2f03fb5f83d2e5 Mon Sep 17 00:00:00 2001
+From 1ecccf3a7c25b72b927ed941aa420436e8d3e76a Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Thu, 25 Mar 2021 11:33:02 +0100
 Subject: [PATCH] Bluetooth: btusb: Lower passive lescan interval on Marvell
@@ -1000,7 +1000,7 @@ index bd37d6fb88c2..d12fb2034d46 100644
 -- 
 2.33.1
 
-From 5b1160d606010f6f879db9b5417f219ce2e2fd8a Mon Sep 17 00:00:00 2001
+From 85bff0a7e40a973cb0a0214e36cea725ca880f6a Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Wed, 11 Nov 2020 12:31:26 +0100
 Subject: [PATCH] mwifiex: Small cleanup for handling virtual interface type
@@ -1101,7 +1101,7 @@ index 0961f4a5e415..e8deba119ff1 100644
 -- 
 2.33.1
 
-From 2b6a093f97f292b78ecaba53cd2084e3ce49ef10 Mon Sep 17 00:00:00 2001
+From 0c552e9622aef2b617164f87d52ca7bab6fcbaad Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Tue, 10 Nov 2020 12:49:56 +0100
 Subject: [PATCH] mwifiex: Use non-posted PCI register writes
@@ -1158,7 +1158,7 @@ index ca06eb7ac4aa..95e5851d2d0a 100644
 -- 
 2.33.1
 
-From d5fc8e2106e6ed277a08f6d03d11852ca869105b Mon Sep 17 00:00:00 2001
+From 694ceebf5656e17a9058cf91ad5bc227c37621a0 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Wed, 11 Nov 2020 12:44:39 +0100
 Subject: [PATCH] mwifiex: Use function to check whether interface type change
@@ -1391,7 +1391,7 @@ index e8deba119ff1..dabc59c47de3 100644
 -- 
 2.33.1
 
-From 59fb11db8c688ce93db35e715fec2b1a2af82bd3 Mon Sep 17 00:00:00 2001
+From d35e9eb8b1b56c0f7b30ad24d4c9f439ca3b875c Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Wed, 11 Nov 2020 13:33:04 +0100
 Subject: [PATCH] mwifiex: Run SET_BSS_MODE when changing from P2P to STATION
@@ -1459,7 +1459,7 @@ index dabc59c47de3..146aabe14753 100644
 -- 
 2.33.1
 
-From 794a0a951a96ab3c1d72cb4a134f67788cc24e32 Mon Sep 17 00:00:00 2001
+From 6e7e79d9ff0c7419a9aeb10abf8245b6f728a286 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Wed, 11 Nov 2020 14:42:54 +0100
 Subject: [PATCH] mwifiex: Use helper function for counting interface types
@@ -1635,7 +1635,7 @@ index 146aabe14753..8b9517c243c8 100644
 -- 
 2.33.1
 
-From b21838facca599fcf4af2df4753fadedb1275a35 Mon Sep 17 00:00:00 2001
+From b8471c1f176f8439a9a91ab31e6f567f382cf522 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Fri, 26 Mar 2021 15:56:58 +0100
 Subject: [PATCH] mwifiex: Update virtual interface counters right after
@@ -1738,7 +1738,7 @@ index 8b9517c243c8..f2797102c5a2 100644
 -- 
 2.33.1
 
-From 69534d41b085682fbeeb9e9d3793530bc985d58b Mon Sep 17 00:00:00 2001
+From 3ca87f6e68ed366bb9c7cf0fd316f14a33790874 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Wed, 11 Nov 2020 13:42:40 +0100
 Subject: [PATCH] mwifiex: Allow switching interface type from P2P_CLIENT to
@@ -1827,7 +1827,7 @@ index f2797102c5a2..ed4041ff9c89 100644
 -- 
 2.33.1
 
-From b6aeb4f99d59c5da8aff49dfe1af930657385225 Mon Sep 17 00:00:00 2001
+From c29d5731d103808250eb5825a527aada89a19956 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Fri, 26 Mar 2021 15:31:08 +0100
 Subject: [PATCH] mwifiex: Handle interface type changes from AP to STATION
@@ -1854,7 +1854,7 @@ index ed4041ff9c89..64caa5c4350d 100644
 -- 
 2.33.1
 
-From 15ef40a4f584d08d35897bd39968dd166578a039 Mon Sep 17 00:00:00 2001
+From 13d008b74ff4534e2ffa22dc4ec9310e782f7dc0 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Fri, 26 Mar 2021 15:32:16 +0100
 Subject: [PATCH] mwifiex: Properly initialize private structure on interface
@@ -1909,7 +1909,7 @@ index 64caa5c4350d..0eb31201a82b 100644
 -- 
 2.33.1
 
-From b0ef209e94d211821a1f217c04e0de773bf85a5d Mon Sep 17 00:00:00 2001
+From 3af52b5cbb0801254083134d7b82f9d5e2a481e7 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Sat, 27 Mar 2021 12:19:14 +0100
 Subject: [PATCH] mwifiex: Fix copy-paste mistake when creating virtual
@@ -1941,7 +1941,7 @@ index 0eb31201a82b..d62a20de3ada 100644
 -- 
 2.33.1
 
-From 22b1fbfea43aed90fca1e57dc54acd963b0be06d Mon Sep 17 00:00:00 2001
+From 18346a7c7bb7bab87ae46e32d851d9172d5f3b6b Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Sun, 28 Mar 2021 21:10:06 +0200
 Subject: [PATCH] mwifiex: Try waking the firmware until we get an interrupt
@@ -2030,7 +2030,7 @@ index 95e5851d2d0a..ccae1532a580 100644
 -- 
 2.33.1
 
-From c9382a520e783ef22c56fd70ed6f92e4a3f1aec1 Mon Sep 17 00:00:00 2001
+From 4673314158e61c8de371760072309c67ccf76983 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Tue, 13 Apr 2021 14:30:28 +0200
 Subject: [PATCH] mwifiex: Deactive host sleep using HSCFG after it was
@@ -2186,7 +2186,7 @@ index 48ea00da1fc9..1e2798dce18f 100644
 -- 
 2.33.1
 
-From 08b51a325cd5f15909ac49d793f0bcfc4c62b3b1 Mon Sep 17 00:00:00 2001
+From e642cf41c2a26fc1fbdb2235bb4c29f2ec0f950c Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Tue, 13 Apr 2021 14:23:05 +0200
 Subject: [PATCH] mwifiex: Add quirk to disable deep sleep with certain
@@ -2289,7 +2289,7 @@ index 6b5d35d9e69f..8e49ebca1847 100644
 -- 
 2.33.1
 
-From 5ce47dc8c5332815a21d0fe7044bbbafde02141a Mon Sep 17 00:00:00 2001
+From 8d489393389bcfd1cdf7cad51ba82c2f75853805 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Wed, 11 Nov 2020 15:17:07 +0100
 Subject: [PATCH] mwifiex: Don't log error on suspend if wake-on-wlan is
@@ -2321,7 +2321,7 @@ index d62a20de3ada..18b1a6d54bc8 100644
 -- 
 2.33.1
 
-From 4dea21d0be7d4cc6f5cb130d0f05b45b95d5c28e Mon Sep 17 00:00:00 2001
+From ab66f38ff034fcad78b24a2f4feea20c4a609aec Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Sun, 28 Mar 2021 21:42:54 +0200
 Subject: [PATCH] mwifiex: Log an error on command failure during key-material
@@ -2361,7 +2361,7 @@ index 18b1a6d54bc8..c00791701d78 100644
 -- 
 2.33.1
 
-From 4355c80cc4e93d3df6bc154c08221444b7bf5e07 Mon Sep 17 00:00:00 2001
+From d5d792042614e685da2335bd4ee7e445167fb074 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Tue, 13 Apr 2021 12:44:03 +0200
 Subject: [PATCH] mwifiex: Fix an incorrect comment
@@ -2389,7 +2389,7 @@ index 6696bce56178..b0695432b26a 100644
 -- 
 2.33.1
 
-From b6ceee070897f613cebdd964b99f220369a6d4e4 Mon Sep 17 00:00:00 2001
+From fa961ed320076062d816d2ab97e57eb2731afb19 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Tue, 13 Apr 2021 12:45:59 +0200
 Subject: [PATCH] mwifiex: Send DELBA requests according to spec
@@ -2432,7 +2432,7 @@ index b0695432b26a..9ff2058bcd7e 100644
 -- 
 2.33.1
 
-From 18760299a6b79db576c05da54f3f5ba19c9cde64 Mon Sep 17 00:00:00 2001
+From 358cb67766bf1767eefaaf996eae058f8026d482 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= <verdre@v0yd.nl>
 Date: Tue, 13 Apr 2021 12:57:41 +0200
 Subject: [PATCH] mwifiex: Ignore BTCOEX events from the firmware

+ 1 - 1
patches/5.14/0003-ath10k.patch

@@ -1,4 +1,4 @@
-From d7e348126f8ebca91498133ef6ca442bdc081b4a Mon Sep 17 00:00:00 2001
+From e637947850d015659a002aecfb3cfbd1909254ef Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sat, 27 Feb 2021 00:45:52 +0100
 Subject: [PATCH] ath10k: Add module parameters to override board files

+ 2 - 2
patches/5.14/0004-ipts.patch

@@ -1,4 +1,4 @@
-From 358612bc5f2fec71ef7442b3e30d0f0cdd13c5f6 Mon Sep 17 00:00:00 2001
+From bc11b0e52d9bbbb679a51fb99272c94ac9ed78ce Mon Sep 17 00:00:00 2001
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 Date: Thu, 30 Jul 2020 13:21:53 +0200
 Subject: [PATCH] misc: mei: Add missing IPTS device IDs
@@ -36,7 +36,7 @@ index 3a45aaf002ac..55b8ee30a03c 100644
 -- 
 2.33.1
 
-From 7a738bf61fae8f94a02296d56e02170d53d004c2 Mon Sep 17 00:00:00 2001
+From ef47a59f285220b5c6a711d165ff19ea583d7255 Mon Sep 17 00:00:00 2001
 From: Dorian Stoll <dorian.stoll@tmsp.io>
 Date: Thu, 6 Aug 2020 11:20:41 +0200
 Subject: [PATCH] misc: Add support for Intel Precise Touch & Stylus

+ 845 - 218
patches/5.14/0005-surface-sam.patch

@@ -1,4 +1,4 @@
-From 93c1103857ae9557a867a378268c76d8d52dba09 Mon Sep 17 00:00:00 2001
+From dd8529f3d89fd96e800812ab9a0e24419536b559 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 10 Oct 2021 01:27:17 +0200
 Subject: [PATCH] platform/surface: aggregator_registry: Add support for
@@ -102,7 +102,7 @@ index 4428c4330229..1679811eff50 100644
 -- 
 2.33.1
 
-From 8cf31537f7ad6798f881b0cb65e32a6bb5dc787c Mon Sep 17 00:00:00 2001
+From 9186614dfdc63331b761af7ae6bff110207f125c Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 10 Oct 2021 15:07:42 +0200
 Subject: [PATCH] HID: surface-hid: Use correct event registry for managing HID
@@ -165,7 +165,7 @@ index 068e1982ad37..74bfdffaf7b0 100644
 -- 
 2.33.1
 
-From e37ee323ec827c2ef5ad30f7105203715afc76f4 Mon Sep 17 00:00:00 2001
+From 6414b7dc4b773f96785ed08005b491c71d9ebb4a Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 10 Oct 2021 19:48:10 +0200
 Subject: [PATCH] HID: surface-hid: Allow driver matching for target ID 1
@@ -198,7 +198,67 @@ index daa452367c0b..d4aa8c81903a 100644
 -- 
 2.33.1
 
-From 00dbcbeeae4d15358e9af0e9a4cee711f09e896d Mon Sep 17 00:00:00 2001
+From a67db7ca93a6460f040946d58ef47dfecda960ab Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Thu, 28 Oct 2021 03:28:45 +0200
+Subject: [PATCH] platform/surface: aggregator_registry: Add initial support
+ for Surface Pro 8
+
+Add preliminary support for the Surface Pro 8 to the Surface Aggregator
+registry. This includes battery/charger status and platform profile
+support.
+
+In contrast to earlier Surface Pro generations, the keyboard cover is
+now also connected via the Surface Aggregator Module (whereas it was
+previously connected via USB or HID-over-I2C). To properly support the
+HID devices of that cover, however, more changes regarding hot-removal
+of Surface Aggregator client devices as well as a new device hub driver
+are required. We will address those things in a follow-up series, so do
+not add any HID device IDs just yet.
+
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Link: https://lore.kernel.org/r/20211028012845.1887219-1-luzmaximilian@gmail.com
+Reviewed-by: Hans de Goede <hdegoede@redhat.com>
+Signed-off-by: Hans de Goede <hdegoede@redhat.com>
+Patchset: surface-sam
+---
+ .../platform/surface/surface_aggregator_registry.c   | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
+index 1679811eff50..e70f4c63554e 100644
+--- a/drivers/platform/surface/surface_aggregator_registry.c
++++ b/drivers/platform/surface/surface_aggregator_registry.c
+@@ -228,6 +228,15 @@ static const struct software_node *ssam_node_group_sp7[] = {
+ 	NULL,
+ };
+ 
++static const struct software_node *ssam_node_group_sp8[] = {
++	&ssam_node_root,
++	&ssam_node_bat_ac,
++	&ssam_node_bat_main,
++	&ssam_node_tmp_pprof,
++	/* TODO: Add support for keyboard cover. */
++	NULL,
++};
++
+ 
+ /* -- Device registry helper functions. ------------------------------------- */
+ 
+@@ -534,6 +543,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
+ 	/* Surface Pro 7+ */
+ 	{ "MSHW0119", (unsigned long)ssam_node_group_sp7 },
+ 
++	/* Surface Pro 8 */
++	{ "MSHW0263", (unsigned long)ssam_node_group_sp8 },
++
+ 	/* Surface Book 2 */
+ 	{ "MSHW0107", (unsigned long)ssam_node_group_gen5 },
+ 
+-- 
+2.33.1
+
+From b82755eb5d767d05ae4c05aa0d5c40d3232145c7 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Wed, 2 Jun 2021 03:34:06 +0200
 Subject: [PATCH] platform/surface: aggregator: Make client device removal more
@@ -323,7 +383,7 @@ index f636c5310321..cc257097eb05 100644
 -- 
 2.33.1
 
-From f0aaf21cefd42ce8f828d54a11207d72fea9e579 Mon Sep 17 00:00:00 2001
+From ebd74b2d1ff13074fa1ee538886888fcae3c1dbf Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Wed, 27 Oct 2021 02:06:38 +0200
 Subject: [PATCH] platform/surface: aggregator_registry: Use generic client
@@ -339,10 +399,10 @@ Patchset: surface-sam
  1 file changed, 5 insertions(+), 19 deletions(-)
 
 diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index 1679811eff50..d63f975bfd4c 100644
+index e70f4c63554e..f6c639342b9d 100644
 --- a/drivers/platform/surface/surface_aggregator_registry.c
 +++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -249,20 +249,6 @@ static int ssam_uid_from_string(const char *str, struct ssam_device_uid *uid)
+@@ -258,20 +258,6 @@ static int ssam_uid_from_string(const char *str, struct ssam_device_uid *uid)
  	return 0;
  }
  
@@ -363,7 +423,7 @@ index 1679811eff50..d63f975bfd4c 100644
  static int ssam_hub_add_device(struct device *parent, struct ssam_controller *ctrl,
  			       struct fwnode_handle *node)
  {
-@@ -308,7 +294,7 @@ static int ssam_hub_add_devices(struct device *parent, struct ssam_controller *c
+@@ -317,7 +303,7 @@ static int ssam_hub_add_devices(struct device *parent, struct ssam_controller *c
  
  	return 0;
  err:
@@ -372,7 +432,7 @@ index 1679811eff50..d63f975bfd4c 100644
  	return status;
  }
  
-@@ -405,7 +391,7 @@ static void ssam_base_hub_update_workfn(struct work_struct *work)
+@@ -414,7 +400,7 @@ static void ssam_base_hub_update_workfn(struct work_struct *work)
  	if (hub->state == SSAM_BASE_HUB_CONNECTED)
  		status = ssam_hub_add_devices(&hub->sdev->dev, hub->sdev->ctrl, node);
  	else
@@ -381,7 +441,7 @@ index 1679811eff50..d63f975bfd4c 100644
  
  	if (status)
  		dev_err(&hub->sdev->dev, "failed to update base-hub devices: %d\n", status);
-@@ -487,7 +473,7 @@ static int ssam_base_hub_probe(struct ssam_device *sdev)
+@@ -496,7 +482,7 @@ static int ssam_base_hub_probe(struct ssam_device *sdev)
  err:
  	ssam_notifier_unregister(sdev->ctrl, &hub->notif);
  	cancel_delayed_work_sync(&hub->update_work);
@@ -390,7 +450,7 @@ index 1679811eff50..d63f975bfd4c 100644
  	return status;
  }
  
-@@ -499,7 +485,7 @@ static void ssam_base_hub_remove(struct ssam_device *sdev)
+@@ -508,7 +494,7 @@ static void ssam_base_hub_remove(struct ssam_device *sdev)
  
  	ssam_notifier_unregister(sdev->ctrl, &hub->notif);
  	cancel_delayed_work_sync(&hub->update_work);
@@ -399,7 +459,7 @@ index 1679811eff50..d63f975bfd4c 100644
  }
  
  static const struct ssam_device_id ssam_base_hub_match[] = {
-@@ -613,7 +599,7 @@ static int ssam_platform_hub_remove(struct platform_device *pdev)
+@@ -625,7 +611,7 @@ static int ssam_platform_hub_remove(struct platform_device *pdev)
  {
  	const struct software_node **nodes = platform_get_drvdata(pdev);
  
@@ -411,7 +471,7 @@ index 1679811eff50..d63f975bfd4c 100644
 -- 
 2.33.1
 
-From e86647069fa14e01aff6a31583743f271d666d95 Mon Sep 17 00:00:00 2001
+From 08e1e9275e9f104a9f2c84ef02d98b8c327be26e Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Wed, 27 Oct 2021 02:07:33 +0200
 Subject: [PATCH] platform/surface: aggregator_registry: Rename device
@@ -427,10 +487,10 @@ Patchset: surface-sam
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index d63f975bfd4c..2e0d3a808d47 100644
+index f6c639342b9d..ce2bd88feeaa 100644
 --- a/drivers/platform/surface/surface_aggregator_registry.c
 +++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -274,8 +274,8 @@ static int ssam_hub_add_device(struct device *parent, struct ssam_controller *ct
+@@ -283,8 +283,8 @@ static int ssam_hub_add_device(struct device *parent, struct ssam_controller *ct
  	return status;
  }
  
@@ -441,7 +501,7 @@ index d63f975bfd4c..2e0d3a808d47 100644
  {
  	struct fwnode_handle *child;
  	int status;
-@@ -389,7 +389,7 @@ static void ssam_base_hub_update_workfn(struct work_struct *work)
+@@ -398,7 +398,7 @@ static void ssam_base_hub_update_workfn(struct work_struct *work)
  	hub->state = state;
  
  	if (hub->state == SSAM_BASE_HUB_CONNECTED)
@@ -450,7 +510,7 @@ index d63f975bfd4c..2e0d3a808d47 100644
  	else
  		ssam_remove_clients(&hub->sdev->dev);
  
-@@ -585,7 +585,7 @@ static int ssam_platform_hub_probe(struct platform_device *pdev)
+@@ -597,7 +597,7 @@ static int ssam_platform_hub_probe(struct platform_device *pdev)
  
  	set_secondary_fwnode(&pdev->dev, root);
  
@@ -462,27 +522,28 @@ index d63f975bfd4c..2e0d3a808d47 100644
 -- 
 2.33.1
 
-From 88d3d04fcfc74c04cb2b406f6b68cd589cfc5d63 Mon Sep 17 00:00:00 2001
+From 139b613c82971c45c1887f0f36b1e4e8f211fe8c Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Tue, 8 Jun 2021 00:24:47 +0200
 Subject: [PATCH] platform/surface: aggregator: Allow devices to be marked as
  hot-removed
 
-Some SSAM devices, notably keyboard and touchpad on the Surface Book 3
-and Surface Pro 8, can be hot-removed. When this occurs, communication
-with the device may fail and time out. This timeout may unnecessarily
+Some SSAM devices, notably the keyboard cover (keyboard and touchpad) on
+the Surface Pro 8, can be hot-removed. When this occurs, communication
+with the device may fail and time out. This timeout can unnecessarily
 block and slow down device removal and even cause issues when the
 devices are detached and re-attached quickly. Thus, communication should
 generally be avoided once hot-removal is detected.
 
-While we already remove a device as soon as we detect its hot-removal,
+While we already remove a device as soon as we detect its (hot-)removal,
 the corresponding device driver may still attempt to communicate with
 the device during teardown. This is especially critical as communication
-failure may also extend to event disablement.
+failure may also extend to disabling of events, which is typically done
+at that stage.
 
 Add a flag to allow marking devices as hot-removed. This can then be
 used during client driver teardown to check if any communication
-attemtps should be avoided.
+attempts should be avoided.
 
 Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
 Patchset: surface-sam
@@ -623,7 +684,7 @@ index cc257097eb05..b474a9baab42 100644
 -- 
 2.33.1
 
-From d74f2c3b78911fb6cb98c23f345c03d01f84f148 Mon Sep 17 00:00:00 2001
+From 702fae57de9a9737c58c1413f894002e8f2ffc71 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Tue, 8 Jun 2021 00:48:22 +0200
 Subject: [PATCH] platform/surface: aggregator: Allow notifiers to avoid
@@ -678,7 +739,7 @@ index e519d374c378..27f95abdbe99 100644
  Event notifiers are registered by providing (at minimum) a callback to call
  in case an event has been received, the registry specifying how the event
 diff --git a/drivers/platform/surface/aggregator/controller.c b/drivers/platform/surface/aggregator/controller.c
-index b8c377b3f932..dc0f22be2630 100644
+index b8c377b3f932..6de834b52b63 100644
 --- a/drivers/platform/surface/aggregator/controller.c
 +++ b/drivers/platform/surface/aggregator/controller.c
 @@ -2199,16 +2199,26 @@ static int ssam_nf_refcount_enable(struct ssam_controller *ctrl,
@@ -698,7 +759,7 @@ index b8c377b3f932..dc0f22be2630 100644
 - * any client, the event will be disabled and the corresponding reference count
 - * entry freed. The reference count entry must not be used any more after a
 - * call to this function.
-+ * If ``ec`` equals ``true`` and the reference count equals zero (i.e.  the
++ * If ``ec`` equals ``true`` and the reference count equals zero (i.e. the
 + * event is no longer requested by any client), the specified event will be
 + * disabled on the EC via the corresponding request.
 + *
@@ -910,14 +971,14 @@ index b474a9baab42..76e6300b07d5 100644
 -- 
 2.33.1
 
-From c737f87cc26eaa28a6d44637478cf0835d395a94 Mon Sep 17 00:00:00 2001
+From bacfef7b5c1402eb359f6b3b306472fc9ecb160a Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Tue, 8 Jun 2021 01:20:49 +0200
 Subject: [PATCH] platform/surface: aggregator_registry: Use client device
  wrappers for notifier registration
 
 Use newly introduced client device wrapper functions for notifier
-registration and deregistration.
+registration and unregistration.
 
 Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
 Patchset: surface-sam
@@ -926,10 +987,10 @@ Patchset: surface-sam
  1 file changed, 3 insertions(+), 3 deletions(-)
 
 diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index 2e0d3a808d47..64c83b846907 100644
+index ce2bd88feeaa..9f630e890ff7 100644
 --- a/drivers/platform/surface/surface_aggregator_registry.c
 +++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -459,7 +459,7 @@ static int ssam_base_hub_probe(struct ssam_device *sdev)
+@@ -468,7 +468,7 @@ static int ssam_base_hub_probe(struct ssam_device *sdev)
  
  	ssam_device_set_drvdata(sdev, hub);
  
@@ -938,7 +999,7 @@ index 2e0d3a808d47..64c83b846907 100644
  	if (status)
  		return status;
  
-@@ -471,7 +471,7 @@ static int ssam_base_hub_probe(struct ssam_device *sdev)
+@@ -480,7 +480,7 @@ static int ssam_base_hub_probe(struct ssam_device *sdev)
  	return 0;
  
  err:
@@ -947,7 +1008,7 @@ index 2e0d3a808d47..64c83b846907 100644
  	cancel_delayed_work_sync(&hub->update_work);
  	ssam_remove_clients(&sdev->dev);
  	return status;
-@@ -483,7 +483,7 @@ static void ssam_base_hub_remove(struct ssam_device *sdev)
+@@ -492,7 +492,7 @@ static void ssam_base_hub_remove(struct ssam_device *sdev)
  
  	sysfs_remove_group(&sdev->dev.kobj, &ssam_base_hub_group);
  
@@ -959,62 +1020,26 @@ index 2e0d3a808d47..64c83b846907 100644
 -- 
 2.33.1
 
-From 8f2340e6b616e25cdf4e9f8a75ec95287172f918 Mon Sep 17 00:00:00 2001
+From 73819d3f596735d225d562e6334133de761d92ec Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
-Date: Tue, 8 Jun 2021 01:08:29 +0200
-Subject: [PATCH] power/supply: surface_charger: Add support for hot-removal
+Date: Thu, 28 Oct 2021 03:37:06 +0200
+Subject: [PATCH] power/supply: surface_charger: Use client device wrappers for
+ notifier registration
 
-In cases of hot-removal, further communication with the device should be
-avoided as it may fail and time out.
-
-Use the client device wrapper functions to register and unregister the
-notifiers as those check during unregistration if the device has been
-marked as hot-removed and handle this case appropriately.
+Use newly introduced client device wrapper functions for notifier
+registration and unregistration.
 
 Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
 Patchset: surface-sam
 ---
- drivers/power/supply/surface_charger.c | 16 +++++++++++-----
- 1 file changed, 11 insertions(+), 5 deletions(-)
+ drivers/power/supply/surface_charger.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/power/supply/surface_charger.c b/drivers/power/supply/surface_charger.c
-index a060c36c7766..9a3525c32aca 100644
+index a060c36c7766..59182d55742d 100644
 --- a/drivers/power/supply/surface_charger.c
 +++ b/drivers/power/supply/surface_charger.c
-@@ -69,6 +69,9 @@ static int spwr_ac_update_unlocked(struct spwr_ac_device *ac)
- 	__le32 old = ac->state;
- 	int status;
- 
-+	if (ssam_device_is_hot_removed(ac->sdev))
-+		return -ENODEV;
-+
- 	lockdep_assert_held(&ac->lock);
- 
- 	status = ssam_retry(ssam_bat_get_psrc, ac->sdev, &ac->state);
-@@ -103,7 +106,6 @@ static int spwr_ac_recheck(struct spwr_ac_device *ac)
- static u32 spwr_notify_ac(struct ssam_event_notifier *nf, const struct ssam_event *event)
- {
- 	struct spwr_ac_device *ac;
--	int status;
- 
- 	ac = container_of(nf, struct spwr_ac_device, notif);
- 
-@@ -121,8 +123,12 @@ static u32 spwr_notify_ac(struct ssam_event_notifier *nf, const struct ssam_even
- 
- 	switch (event->command_id) {
- 	case SAM_EVENT_CID_BAT_ADP:
--		status = spwr_ac_recheck(ac);
--		return ssam_notifier_from_errno(status) | SSAM_NOTIF_HANDLED;
-+		/*
-+		 * Any errors here should not be critical and logged in the
-+		 * corresponding functions, so ignore them.
-+		 */
-+		spwr_ac_recheck(ac);
-+		return SSAM_NOTIF_HANDLED;
- 
- 	default:
- 		return 0;
-@@ -216,7 +222,7 @@ static int spwr_ac_register(struct spwr_ac_device *ac)
+@@ -216,7 +216,7 @@ static int spwr_ac_register(struct spwr_ac_device *ac)
  	if (IS_ERR(ac->psy))
  		return PTR_ERR(ac->psy);
  
@@ -1023,7 +1048,7 @@ index a060c36c7766..9a3525c32aca 100644
  }
  
  
-@@ -251,7 +257,7 @@ static void surface_ac_remove(struct ssam_device *sdev)
+@@ -251,7 +251,7 @@ static void surface_ac_remove(struct ssam_device *sdev)
  {
  	struct spwr_ac_device *ac = ssam_device_get_drvdata(sdev);
  
@@ -1035,49 +1060,26 @@ index a060c36c7766..9a3525c32aca 100644
 -- 
 2.33.1
 
-From c7ee552c8c906928968838f8d5798d495bddea35 Mon Sep 17 00:00:00 2001
+From 21a1e4bc2e14a8d023d411b0ad4122e160a96b78 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
-Date: Tue, 8 Jun 2021 01:15:34 +0200
-Subject: [PATCH] power/supply: surface_battery: Add support for hot-removal
-
-In cases of hot-removal, further communication with the device should be
-avoided as it may fail and time out.
+Date: Thu, 28 Oct 2021 03:38:09 +0200
+Subject: [PATCH] power/supply: surface_battery: Use client device wrappers for
+ notifier registration
 
-Use the client device wrapper functions to register and unregister the
-notifiers as those check during unregistration if the device has been
-marked as hot-removed and handle this case appropriately.
+Use newly introduced client device wrapper functions for notifier
+registration and unregistration.
 
 Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
 Patchset: surface-sam
 ---
- drivers/power/supply/surface_battery.c | 10 ++++++++--
- 1 file changed, 8 insertions(+), 2 deletions(-)
+ drivers/power/supply/surface_battery.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/power/supply/surface_battery.c b/drivers/power/supply/surface_battery.c
-index 5ec2e6bb2465..ebf1f96e9a89 100644
+index 5ec2e6bb2465..540707882bb0 100644
 --- a/drivers/power/supply/surface_battery.c
 +++ b/drivers/power/supply/surface_battery.c
-@@ -156,6 +156,9 @@ static bool spwr_battery_present(struct spwr_battery_device *bat)
- {
- 	lockdep_assert_held(&bat->lock);
- 
-+	if (ssam_device_is_hot_removed(bat->sdev))
-+		return false;
-+
- 	return le32_to_cpu(bat->sta) & SAM_BATTERY_STA_PRESENT;
- }
- 
-@@ -245,6 +248,9 @@ static int spwr_battery_update_bix_unlocked(struct spwr_battery_device *bat)
- 
- 	lockdep_assert_held(&bat->lock);
- 
-+	if (ssam_device_is_hot_removed(bat->sdev))
-+		return 0;
-+
- 	status = spwr_battery_load_sta(bat);
- 	if (status)
- 		return status;
-@@ -802,7 +808,7 @@ static int spwr_battery_register(struct spwr_battery_device *bat)
+@@ -802,7 +802,7 @@ static int spwr_battery_register(struct spwr_battery_device *bat)
  	if (IS_ERR(bat->psy))
  		return PTR_ERR(bat->psy);
  
@@ -1086,7 +1088,7 @@ index 5ec2e6bb2465..ebf1f96e9a89 100644
  }
  
  
-@@ -837,7 +843,7 @@ static void surface_battery_remove(struct ssam_device *sdev)
+@@ -837,7 +837,7 @@ static void surface_battery_remove(struct ssam_device *sdev)
  {
  	struct spwr_battery_device *bat = ssam_device_get_drvdata(sdev);
  
@@ -1098,7 +1100,7 @@ index 5ec2e6bb2465..ebf1f96e9a89 100644
 -- 
 2.33.1
 
-From 585bb3af623931c535785688993097083e273865 Mon Sep 17 00:00:00 2001
+From 106cb5106b1aa0100cca496b18d2baf48594b5d9 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Tue, 8 Jun 2021 01:33:02 +0200
 Subject: [PATCH] HID: surface-hid: Add support for hot-removal
@@ -1122,7 +1124,7 @@ Patchset: surface-sam
  1 file changed, 37 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/hid/surface-hid/surface_hid_core.c b/drivers/hid/surface-hid/surface_hid_core.c
-index 5571e74abe91..63a7963ed345 100644
+index 5571e74abe91..d2e695e942b6 100644
 --- a/drivers/hid/surface-hid/surface_hid_core.c
 +++ b/drivers/hid/surface-hid/surface_hid_core.c
 @@ -19,12 +19,30 @@
@@ -1174,7 +1176,7 @@ index 5571e74abe91..63a7963ed345 100644
 +
 +	/*
 +	 * Communication may fail for devices that have been hot-removed. This
-+	 * also includes registration of HID events, so we need to check this
++	 * also includes unregistration of HID events, so we need to check this
 +	 * here. Only if the device has not been marked as hot-removed, we can
 +	 * safely disable events.
 +	 */
@@ -1209,23 +1211,85 @@ index 5571e74abe91..63a7963ed345 100644
 -- 
 2.33.1
 
-From 06fee01ca55ec43027b5bc5fcd3c3f26a63d0c72 Mon Sep 17 00:00:00 2001
+From 572da964e194dd13f387477c55bff23668ff01b8 Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Sun, 31 Oct 2021 12:34:08 +0100
+Subject: [PATCH] platform/surface: aggregator: Add comment for KIP subsystem
+ category
+
+The KIP subsystem (full name unknown, abbreviation has been obtained
+through reverse engineering) handles detachable peripherals such as the
+keyboard cover on the Surface Pro X and Surface Pro 8.
+
+It is currently not entirely clear what this subsystem entails, but at
+the very least it provides event notifications for when the keyboard
+cover on the Surface Pro X and Surface Pro 8 have been detached or
+re-attached, as well as the state that the keyboard cover is currently
+in (e.g. folded-back, folded laptop-like, closed, etc.).
+
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Patchset: surface-sam
+---
+ include/linux/surface_aggregator/serial_hub.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/include/linux/surface_aggregator/serial_hub.h b/include/linux/surface_aggregator/serial_hub.h
+index c3de43edcffa..d1efac85caf1 100644
+--- a/include/linux/surface_aggregator/serial_hub.h
++++ b/include/linux/surface_aggregator/serial_hub.h
+@@ -306,7 +306,7 @@ enum ssam_ssh_tc {
+ 	SSAM_SSH_TC_LPC = 0x0b,
+ 	SSAM_SSH_TC_TCL = 0x0c,
+ 	SSAM_SSH_TC_SFL = 0x0d,
+-	SSAM_SSH_TC_KIP = 0x0e,
++	SSAM_SSH_TC_KIP = 0x0e, /* Manages detachable peripherals (Pro X/8 keyboard cover) */
+ 	SSAM_SSH_TC_EXT = 0x0f,
+ 	SSAM_SSH_TC_BLD = 0x10,
+ 	SSAM_SSH_TC_BAS = 0x11,	/* Detachment system (Surface Book 2/3). */
+-- 
+2.33.1
+
+From 7a78b92326ddd1addab03605a5b57417101d2169 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 10 Oct 2021 23:56:23 +0200
-Subject: [PATCH] wip! platform/surface: aggregator_registry: Add KIP device
- hub
+Subject: [PATCH] platform/surface: aggregator_registry: Add KIP device hub
+
+Add a Surface System Aggregator Module (SSAM) client device hub for
+hot-removable devices managed via the KIP subsystem.
+
+The KIP subsystem (full name unknown, abbreviation has been obtained
+through reverse engineering) is a subsystem that manages hot-removable
+SSAM client devices. Specifically, it manages HID input devices
+contained in the detachable keyboard cover of the Surface Pro 8 and
+Surface Pro X.
+
+To properly handle detachable devices, we need to remove their kernel
+representation when the physical device has been detached and (re-)add
+and (re-)initialize said representation when the physical device has
+been (re-)attached. Note that we need to hot-remove those devices, as
+communication (especially during event notifier unregistration) may time
+out when the physical device is no longer present, which would lead to
+an unnecessary delay. This delay might become problematic when devices
+are detached and re-attached quickly.
+
+The KIP subsystem handles a single group of devices (e.g. all devices
+contained in the keyboard cover) and cannot handle devices individually.
+Thus we model it as a client device hub, which removes all devices
+contained under it once removal of the hub (e.g. keyboard cover) has
+been detected and (re-)adds all devices once the physical hub device has
+been (re-)attached.
 
 Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
 Patchset: surface-sam
 ---
- .../surface/surface_aggregator_registry.c     | 210 +++++++++++++++++-
- 1 file changed, 208 insertions(+), 2 deletions(-)
+ .../surface/surface_aggregator_registry.c     | 233 +++++++++++++++++-
+ 1 file changed, 231 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index 64c83b846907..e02fe833fde8 100644
+index 9f630e890ff7..5b39047985dd 100644
 --- a/drivers/platform/surface/surface_aggregator_registry.c
 +++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -505,6 +505,200 @@ static struct ssam_device_driver ssam_base_hub_driver = {
+@@ -514,6 +514,223 @@ static struct ssam_device_driver ssam_base_hub_driver = {
  };
  
  
@@ -1279,9 +1343,33 @@ index 64c83b846907..e02fe833fde8 100644
 +static ssize_t ssam_kip_hub_state_show(struct device *dev, struct device_attribute *attr, char *buf)
 +{
 +	struct ssam_kip_hub *hub = dev_get_drvdata(dev);
-+	bool connected = hub->state == SSAM_KIP_HUB_CONNECTED;
++	const char *state;
 +
-+	return sysfs_emit(buf, "%d\n", connected);
++	switch (hub->state) {
++	case SSAM_KIP_HUB_UNINITIALIZED:
++		state = "uninitialized";
++		break;
++
++	case SSAM_KIP_HUB_CONNECTED:
++		state = "connected";
++		break;
++
++	case SSAM_KIP_HUB_DISCONNECTED:
++		state = "disconnected";
++		break;
++
++	default:
++		/*
++		 * Any value not handled in the above cases is invalid and
++		 * should never have been set. Thus this case should be
++		 * impossible to reach.
++		 */
++		WARN(1, "invalid KIP hub state: %d\n", hub->state);
++		state = "<invalid>";
++		break;
++	}
++
++	return sysfs_emit(buf, "%s\n", state);
 +}
 +
 +static struct device_attribute ssam_kip_hub_attr_state =
@@ -1314,7 +1402,7 @@ index 64c83b846907..e02fe833fde8 100644
 +	if (hub->state == SSAM_KIP_HUB_CONNECTED)
 +		status = ssam_hub_register_clients(&hub->sdev->dev, hub->sdev->ctrl, node);
 +	else
-+		ssam_remove_clients(&hub->sdev->dev);
++		ssam_hot_remove_clients(&hub->sdev->dev);
 +
 +	if (status)
 +		dev_err(&hub->sdev->dev, "failed to update KIP-hub devices: %d\n", status);
@@ -1338,7 +1426,6 @@ index 64c83b846907..e02fe833fde8 100644
 +	 * some time to set up.
 +	 */
 +	delay = event->data[0] ? SSAM_KIP_UPDATE_CONNECT_DELAY : 0;
-+
 +	schedule_delayed_work(&hub->update_work, delay);
 +
 +	return SSAM_NOTIF_HANDLED;
@@ -1426,7 +1513,7 @@ index 64c83b846907..e02fe833fde8 100644
  /* -- SSAM platform/meta-hub driver. ---------------------------------------- */
  
  static const struct acpi_device_id ssam_platform_hub_match[] = {
-@@ -624,18 +818,30 @@ static int __init ssam_device_hub_init(void)
+@@ -636,18 +853,30 @@ static int __init ssam_device_hub_init(void)
  
  	status = platform_driver_register(&ssam_platform_hub_driver);
  	if (status)
@@ -1462,25 +1549,155 @@ index 64c83b846907..e02fe833fde8 100644
 -- 
 2.33.1
 
-From 275eff5a992506073188eddb09bfa2c0cfa838e5 Mon Sep 17 00:00:00 2001
+From 5333212c5dabdfc1118fad93985421245a9141b3 Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Wed, 27 Oct 2021 22:33:03 +0200
+Subject: [PATCH] platform/surface: aggregator_registry: Add support for
+ keyboard cover on Surface Pro 8
+
+Add support for the detachable keyboard cover on the Surface Pro 8.
+
+The keyboard cover on the Surface Pro 8 is, unlike the keyboard covers
+of earlier Surface Pro generations, handled via the Surface System
+Aggregator Module (SSAM). The keyboard and touchpad (as well as other
+HID input devices) of this cover are standard SSAM HID client devices
+(just like keyboard and touchpad on e.g. the Surface Laptop 3 and 4),
+however, some care needs to be taken as they can be physically detached
+(similarly to the Surface Book 3). Specifically, the respective SSAM
+client devices need to be removed when the keyboard cover has been
+detached and (re-)initialized when the keyboard cover has been
+(re-)attached.
+
+On the Surface Pro 8, detachment of the keyboard cover (and by extension
+its devices) is managed via the KIP subsystem. Therefore, said devices
+need to be registered under the KIP device hub, which in turn will
+remove and re-create/re-initialize those devices as needed.
+
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Patchset: surface-sam
+---
+ .../surface/surface_aggregator_registry.c     | 37 ++++++++++++++++++-
+ 1 file changed, 36 insertions(+), 1 deletion(-)
+
+diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
+index 5b39047985dd..e5eae4dde71a 100644
+--- a/drivers/platform/surface/surface_aggregator_registry.c
++++ b/drivers/platform/surface/surface_aggregator_registry.c
+@@ -47,6 +47,12 @@ static const struct software_node ssam_node_hub_base = {
+ 	.parent = &ssam_node_root,
+ };
+ 
++/* KIP device hub (connects keyboard cover devices on Surface Pro 8). */
++static const struct software_node ssam_node_hub_kip = {
++	.name = "ssam:01:0e:01:00:00",
++	.parent = &ssam_node_root,
++};
++
+ /* AC adapter. */
+ static const struct software_node ssam_node_bat_ac = {
+ 	.name = "ssam:01:02:01:01:01",
+@@ -155,6 +161,30 @@ static const struct software_node ssam_node_hid_base_iid6 = {
+ 	.parent = &ssam_node_hub_base,
+ };
+ 
++/* HID keyboard (KIP hub). */
++static const struct software_node ssam_node_hid_kip_keyboard = {
++	.name = "ssam:01:15:02:01:00",
++	.parent = &ssam_node_hub_kip,
++};
++
++/* HID pen stash (KIP hub; pen taken / stashed away evens). */
++static const struct software_node ssam_node_hid_kip_penstash = {
++	.name = "ssam:01:15:02:02:00",
++	.parent = &ssam_node_hub_kip,
++};
++
++/* HID touchpad (KIP hub). */
++static const struct software_node ssam_node_hid_kip_touchpad = {
++	.name = "ssam:01:15:02:03:00",
++	.parent = &ssam_node_hub_kip,
++};
++
++/* HID device instance 5 (KIP hub, unknown HID device). */
++static const struct software_node ssam_node_hid_kip_iid5 = {
++	.name = "ssam:01:15:02:05:00",
++	.parent = &ssam_node_hub_kip,
++};
++
+ /*
+  * Devices for 5th- and 6th-generations models:
+  * - Surface Book 2,
+@@ -230,10 +260,15 @@ static const struct software_node *ssam_node_group_sp7[] = {
+ 
+ static const struct software_node *ssam_node_group_sp8[] = {
+ 	&ssam_node_root,
++	&ssam_node_hub_kip,
+ 	&ssam_node_bat_ac,
+ 	&ssam_node_bat_main,
+ 	&ssam_node_tmp_pprof,
+-	/* TODO: Add support for keyboard cover. */
++	&ssam_node_hid_kip_keyboard,
++	&ssam_node_hid_kip_penstash,
++	&ssam_node_hid_kip_touchpad,
++	&ssam_node_hid_kip_iid5,
++	/* TODO: Add support for tablet mode switch. */
+ 	NULL,
+ };
+ 
+-- 
+2.33.1
+
+From 9119a57196d19c2e81b31e5e8eb0af24e50f41b7 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Tue, 8 Jun 2021 03:19:20 +0200
-Subject: [PATCH] wip! platform/surface: Add KIP tablet-mode switch
+Subject: [PATCH] platform/surface: Add KIP tablet-mode switch
+
+Add a driver providing a tablet-mode switch input device for Surface
+models using the KIP subsystem to manage detachable peripherals.
+
+The Surface Pro 8 has a detachable keyboard cover. Unlike the keyboard
+covers of previous generation Surface Pro models, this cover is fully
+handled by the Surface System Aggregator Module (SSAM). The SSAM KIP
+subsystem (full name unknown, abbreviation found through reverse
+engineering) provides notifications for mode changes of the cover.
+Specifically, it allows us to know when the cover has been folded back,
+detached, or whether it is in laptop mode.
+
+The driver introduced with this change captures these events and
+translates them to standard SW_TABLET_MODE input events.
 
 Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
 Patchset: surface-sam
 ---
- drivers/platform/surface/Kconfig              |   8 +
+ MAINTAINERS                                   |   6 +
+ drivers/platform/surface/Kconfig              |  22 ++
  drivers/platform/surface/Makefile             |   1 +
- .../surface/surface_kip_tablet_switch.c       | 242 ++++++++++++++++++
- 3 files changed, 251 insertions(+)
+ .../surface/surface_kip_tablet_switch.c       | 245 ++++++++++++++++++
+ 4 files changed, 274 insertions(+)
  create mode 100644 drivers/platform/surface/surface_kip_tablet_switch.c
 
+diff --git a/MAINTAINERS b/MAINTAINERS
+index d7b4f32875a9..5713585d060d 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -12357,6 +12357,12 @@ L:	platform-driver-x86@vger.kernel.org
+ S:	Maintained
+ F:	drivers/platform/surface/surface_hotplug.c
+ 
++MICROSOFT SURFACE KIP TABLET-MODE SWITCH
++M:	Maximilian Luz <luzmaximilian@gmail.com>
++L:	platform-driver-x86@vger.kernel.org
++S:	Maintained
++F:	drivers/platform/surface/surface_kip_tablet_switch.c
++
+ MICROSOFT SURFACE PLATFORM PROFILE DRIVER
+ M:	Maximilian Luz <luzmaximilian@gmail.com>
+ L:	platform-driver-x86@vger.kernel.org
 diff --git a/drivers/platform/surface/Kconfig b/drivers/platform/surface/Kconfig
-index 3105f651614f..133ebb84bd2d 100644
+index 3105f651614f..3c0ee0cdaef5 100644
 --- a/drivers/platform/surface/Kconfig
 +++ b/drivers/platform/surface/Kconfig
-@@ -152,6 +152,14 @@ config SURFACE_HOTPLUG
+@@ -152,6 +152,28 @@ config SURFACE_HOTPLUG
  	  Select M or Y here, if you want to (fully) support hot-plugging of
  	  dGPU devices on the Surface Book 2 and/or 3 during D3cold.
  
@@ -1490,7 +1707,21 @@ index 3105f651614f..133ebb84bd2d 100644
 +	depends on SURFACE_AGGREGATOR_BUS
 +	depends on INPUT
 +	help
-+	  TODO
++	  Provides a tablet-mode switch input device on Microsoft Surface models
++	  using the KIP subsystem for detachable keyboards (e.g. keyboard
++	  covers).
++
++	  The KIP subsystem is used on newer Surface generations to handle
++	  detachable input peripherals, specifically the keyboard cover
++	  (containing keyboard and touchpad) on the Surface Pro 8. This module
++	  provides a driver to let user-space know when the device should be
++	  considered in tablet-mode due to the keyboard cover being detached or
++	  folded back (essentially signaling when the keyboard is not available
++	  for input). It does so by creating a tablet-mode switch input device,
++	  sending the standard SW_TABLET_MODE event on mode change.
++
++	  Select M or Y here, if you want to provide tablet-mode switch input
++	  events on the Surface Pro 8.
 +
  config SURFACE_PLATFORM_PROFILE
  	tristate "Surface Platform Profile Driver"
@@ -1508,10 +1739,10 @@ index 32889482de55..6d9291c993c4 100644
  obj-$(CONFIG_SURFACE_PRO3_BUTTON)	+= surfacepro3_button.o
 diff --git a/drivers/platform/surface/surface_kip_tablet_switch.c b/drivers/platform/surface/surface_kip_tablet_switch.c
 new file mode 100644
-index 000000000000..87055f13bf9c
+index 000000000000..458470067579
 --- /dev/null
 +++ b/drivers/platform/surface/surface_kip_tablet_switch.c
-@@ -0,0 +1,242 @@
+@@ -0,0 +1,245 @@
 +// SPDX-License-Identifier: GPL-2.0+
 +/*
 + * Surface System Aggregator Module (SSAM) tablet mode switch via KIP
@@ -1572,34 +1803,39 @@ index 000000000000..87055f13bf9c
 +	return 0;
 +}
 +
-+static const char* ssam_kip_lid_state_str(enum ssam_kip_lid_state state)
++static ssize_t state_show(struct device *dev, struct device_attribute *attr, char *buf)
 +{
-+	switch (state) {
++	struct ssam_kip_sw *sw = dev_get_drvdata(dev);
++	const char *state;
++
++	switch (sw->state) {
 +	case SSAM_KIP_LID_STATE_DISCONNECTED:
-+		return "disconnected";
++		state = "disconnected";
++		break;
 +
 +	case SSAM_KIP_LID_STATE_CLOSED:
-+		return "closed";
++		state = "closed";
++		break;
 +
 +	case SSAM_KIP_LID_STATE_LAPTOP:
-+		return "laptop";
++		state = "laptop";
++		break;
 +
 +	case SSAM_KIP_LID_STATE_FOLDED_CANVAS:
-+		return "folded-canvas";
++		state = "folded-canvas";
++		break;
 +
 +	case SSAM_KIP_LID_STATE_FOLDED_BACK:
-+		return "folded-back";
++		state = "folded-back";
++		break;
 +
 +	default:
-+		return "<unknown>";
++		state = "<unknown>";
++		dev_warn(dev, "unknown KIP lid state: %d\n", sw->state);
++		break;
 +	}
-+}
-+
-+static ssize_t state_show(struct device *dev, struct device_attribute *attr, char *buf)
-+{
-+	struct ssam_kip_sw *sw = dev_get_drvdata(dev);
 +
-+	return sysfs_emit(buf, "%s\n", ssam_kip_lid_state_str(sw->state));
++	return sysfs_emit(buf, "%s\n", state);
 +}
 +static DEVICE_ATTR_RO(state);
 +
@@ -1624,7 +1860,6 @@ index 000000000000..87055f13bf9c
 +
 +	if (sw->state == state)
 +		return;
-+
 +	sw->state = state;
 +
 +	/* Send SW_TABLET_MODE event. */
@@ -1646,7 +1881,6 @@ index 000000000000..87055f13bf9c
 +	}
 +
 +	schedule_work(&sw->update_work);
-+
 +	return SSAM_NOTIF_HANDLED;
 +}
 +
@@ -1757,39 +1991,32 @@ index 000000000000..87055f13bf9c
 -- 
 2.33.1
 
-From b321e78a0435113151c7647986c30b4a2c076ed7 Mon Sep 17 00:00:00 2001
+From 19218e07218cc69c74db671941e8d09430bb03d2 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Wed, 27 Oct 2021 22:33:03 +0200
-Subject: [PATCH] platform/surface: Add support for the Surface Pro 8
+Subject: [PATCH] platform/surface: aggregator_registry: Add support for tablet
+ mode switch on Surface Pro 8
+
+Add a KIP subsystem tablet-mode switch device for the Surface Pro 8.
+The respective driver for this device provides SW_TABLET_MODE input
+events for user-space based on the state of the keyboard cover (e.g.
+detached, folded-back, normal/laptop mode).
 
 Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
 Patchset: surface-sam
 ---
- .../surface/surface_aggregator_registry.c     | 53 +++++++++++++++++++
- 1 file changed, 53 insertions(+)
+ drivers/platform/surface/surface_aggregator_registry.c | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
-index e02fe833fde8..c7baa3771420 100644
+index e5eae4dde71a..4a397c5bb45f 100644
 --- a/drivers/platform/surface/surface_aggregator_registry.c
 +++ b/drivers/platform/surface/surface_aggregator_registry.c
-@@ -47,6 +47,12 @@ static const struct software_node ssam_node_hub_base = {
- 	.parent = &ssam_node_root,
- };
- 
-+/* KIP device hub (keyboard cover on Surface Pro 8). */
-+static const struct software_node ssam_node_hub_kip = {
-+	.name = "ssam:01:0e:01:00:00",
-+	.parent = &ssam_node_root,
-+};
-+
- /* AC adapter. */
- static const struct software_node ssam_node_bat_ac = {
- 	.name = "ssam:01:02:01:01:01",
-@@ -71,6 +77,12 @@ static const struct software_node ssam_node_tmp_pprof = {
+@@ -77,6 +77,12 @@ static const struct software_node ssam_node_tmp_pprof = {
  	.parent = &ssam_node_root,
  };
  
-+/* Tablet mode switch via KIP subsystem. */
++/* Tablet-mode switch via KIP subsystem. */
 +static const struct software_node ssam_node_kip_tablet_switch = {
 +	.name = "ssam:01:0e:01:00:01",
 +	.parent = &ssam_node_root,
@@ -1798,68 +2025,468 @@ index e02fe833fde8..c7baa3771420 100644
  /* DTX / detachment-system device (Surface Book 3). */
  static const struct software_node ssam_node_bas_dtx = {
  	.name = "ssam:01:11:01:00:00",
-@@ -155,6 +167,30 @@ static const struct software_node ssam_node_hid_base_iid6 = {
- 	.parent = &ssam_node_hub_base,
+@@ -264,11 +270,11 @@ static const struct software_node *ssam_node_group_sp8[] = {
+ 	&ssam_node_bat_ac,
+ 	&ssam_node_bat_main,
+ 	&ssam_node_tmp_pprof,
++	&ssam_node_kip_tablet_switch,
+ 	&ssam_node_hid_kip_keyboard,
+ 	&ssam_node_hid_kip_penstash,
+ 	&ssam_node_hid_kip_touchpad,
+ 	&ssam_node_hid_kip_iid5,
+-	/* TODO: Add support for tablet mode switch. */
+ 	NULL,
  };
  
-+/* HID keyboard (KIP hub). */
-+static const struct software_node ssam_node_hid_kip_keyboard = {
-+	.name = "ssam:01:15:02:01:00",
-+	.parent = &ssam_node_hub_kip,
-+};
+-- 
+2.33.1
+
+From 6aa5e35044b60765f1576e7104585f259977db66 Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Thu, 28 Oct 2021 03:40:22 +0200
+Subject: [PATCH] power/supply: surface_battery: Add support for hot-removal
+
+In cases of hot-removal, further communication with the device should be
+avoided whenever possible, as it may fail and time out.
+
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Patchset: surface-sam
+---
+ drivers/power/supply/surface_battery.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/power/supply/surface_battery.c b/drivers/power/supply/surface_battery.c
+index 540707882bb0..ebf1f96e9a89 100644
+--- a/drivers/power/supply/surface_battery.c
++++ b/drivers/power/supply/surface_battery.c
+@@ -156,6 +156,9 @@ static bool spwr_battery_present(struct spwr_battery_device *bat)
+ {
+ 	lockdep_assert_held(&bat->lock);
+ 
++	if (ssam_device_is_hot_removed(bat->sdev))
++		return false;
 +
-+/* HID pen stash (KIP hub; pen taken / stashed away evens). */
-+static const struct software_node ssam_node_hid_kip_penstash = {
-+	.name = "ssam:01:15:02:02:00",
-+	.parent = &ssam_node_hub_kip,
-+};
+ 	return le32_to_cpu(bat->sta) & SAM_BATTERY_STA_PRESENT;
+ }
+ 
+@@ -245,6 +248,9 @@ static int spwr_battery_update_bix_unlocked(struct spwr_battery_device *bat)
+ 
+ 	lockdep_assert_held(&bat->lock);
+ 
++	if (ssam_device_is_hot_removed(bat->sdev))
++		return 0;
 +
-+/* HID touchpad (KIP hub). */
-+static const struct software_node ssam_node_hid_kip_touchpad = {
-+	.name = "ssam:01:15:02:03:00",
+ 	status = spwr_battery_load_sta(bat);
+ 	if (status)
+ 		return status;
+-- 
+2.33.1
+
+From 1d22474ea64b64552f1541330f07d619d8a09e90 Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Sun, 31 Oct 2021 18:07:39 +0100
+Subject: [PATCH] platform/surface: aggregator_registry: Use KIP hub for
+ Surface Book 3 base devices
+
+It turns out that the Surface Book 3 manages the devices contained in
+its detachable base via the KIP hub as well, similarly to the Surface
+Pro 8 and Surface Pro X. So move them over to the KIP hub.
+
+Right now, we (mis-)use the detachment subsystem (DTX), which is
+designed for handling detachment requests and physical locking of the
+base, to properly remove and re-attach Surface System Aggregator Module
+(SSAM) client devices contained in the base. This system does not seem
+to be intended for managing the (sub-)devices contained in the base,
+which may need some time to be set up properly.
+
+The KIP subsystem seems to be the intended subsystem for managing those
+devices, thus let's use that one instead.
+
+Note that this also changes the way in which devices on the Surface Book
+3 are removed when they have been detached, specifically from normal
+removal to hot-removal (avoiding further communication with the embedded
+controller). It seems that the "communication timeout after device
+removal" issue does also occur on the Surface Book 3, but has so far
+been missed as it does not happen reliably every time. Switching to
+hot-removal fixes this issue and should not have any noticable
+drawbacks.
+
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Patchset: surface-sam
+---
+ .../surface/surface_aggregator_registry.c     | 56 ++++++-------------
+ 1 file changed, 16 insertions(+), 40 deletions(-)
+
+diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
+index 4a397c5bb45f..391bfb35aaa9 100644
+--- a/drivers/platform/surface/surface_aggregator_registry.c
++++ b/drivers/platform/surface/surface_aggregator_registry.c
+@@ -41,13 +41,7 @@ static const struct software_node ssam_node_root = {
+ 	.name = "ssam_platform_hub",
+ };
+ 
+-/* Base device hub (devices attached to Surface Book 3 base). */
+-static const struct software_node ssam_node_hub_base = {
+-	.name = "ssam:00:00:02:00:00",
+-	.parent = &ssam_node_root,
+-};
+-
+-/* KIP device hub (connects keyboard cover devices on Surface Pro 8). */
++/* KIP device hub (connects detachable keyboard/touchpad on Surface Pro 8 and Book 3). */
+ static const struct software_node ssam_node_hub_kip = {
+ 	.name = "ssam:01:0e:01:00:00",
+ 	.parent = &ssam_node_root,
+@@ -65,10 +59,10 @@ static const struct software_node ssam_node_bat_main = {
+ 	.parent = &ssam_node_root,
+ };
+ 
+-/* Secondary battery (Surface Book 3). */
+-static const struct software_node ssam_node_bat_sb3base = {
++/* Secondary battery (Surface Book 3, managed via KIP hub). */
++static const struct software_node ssam_node_bat_kip = {
+ 	.name = "ssam:01:02:02:01:00",
+-	.parent = &ssam_node_hub_base,
 +	.parent = &ssam_node_hub_kip,
-+};
-+
-+/* HID device instance 5 (KIP hub, unknown HID device). */
-+static const struct software_node ssam_node_hid_kip_iid5 = {
-+	.name = "ssam:01:15:02:05:00",
+ };
+ 
+ /* Platform profile / performance-mode device. */
+@@ -143,30 +137,6 @@ static const struct software_node ssam_node_hid_main_iid5 = {
+ 	.parent = &ssam_node_root,
+ };
+ 
+-/* HID keyboard (base hub). */
+-static const struct software_node ssam_node_hid_base_keyboard = {
+-	.name = "ssam:01:15:02:01:00",
+-	.parent = &ssam_node_hub_base,
+-};
+-
+-/* HID touchpad (base hub). */
+-static const struct software_node ssam_node_hid_base_touchpad = {
+-	.name = "ssam:01:15:02:03:00",
+-	.parent = &ssam_node_hub_base,
+-};
+-
+-/* HID device instance 5 (unknown HID device, base hub). */
+-static const struct software_node ssam_node_hid_base_iid5 = {
+-	.name = "ssam:01:15:02:05:00",
+-	.parent = &ssam_node_hub_base,
+-};
+-
+-/* HID device instance 6 (unknown HID device, base hub). */
+-static const struct software_node ssam_node_hid_base_iid6 = {
+-	.name = "ssam:01:15:02:06:00",
+-	.parent = &ssam_node_hub_base,
+-};
+-
+ /* HID keyboard (KIP hub). */
+ static const struct software_node ssam_node_hid_kip_keyboard = {
+ 	.name = "ssam:01:15:02:01:00",
+@@ -191,6 +161,12 @@ static const struct software_node ssam_node_hid_kip_iid5 = {
+ 	.parent = &ssam_node_hub_kip,
+ };
+ 
++/* HID device instance 6 (KIP hub, unknown HID device). */
++static const struct software_node ssam_node_hid_kip_iid6 = {
++	.name = "ssam:01:15:02:06:00",
 +	.parent = &ssam_node_hub_kip,
 +};
 +
  /*
   * Devices for 5th- and 6th-generations models:
   * - Surface Book 2,
-@@ -228,6 +264,20 @@ static const struct software_node *ssam_node_group_sp7[] = {
- 	NULL,
- };
- 
-+static const struct software_node *ssam_node_group_sp8[] = {
-+	&ssam_node_root,
+@@ -206,16 +182,16 @@ static const struct software_node *ssam_node_group_gen5[] = {
+ /* Devices for Surface Book 3. */
+ static const struct software_node *ssam_node_group_sb3[] = {
+ 	&ssam_node_root,
+-	&ssam_node_hub_base,
 +	&ssam_node_hub_kip,
-+	&ssam_node_bat_ac,
-+	&ssam_node_bat_main,
-+	&ssam_node_tmp_pprof,
-+	&ssam_node_kip_tablet_switch,
+ 	&ssam_node_bat_ac,
+ 	&ssam_node_bat_main,
+-	&ssam_node_bat_sb3base,
++	&ssam_node_bat_kip,
+ 	&ssam_node_tmp_pprof,
+ 	&ssam_node_bas_dtx,
+-	&ssam_node_hid_base_keyboard,
+-	&ssam_node_hid_base_touchpad,
+-	&ssam_node_hid_base_iid5,
+-	&ssam_node_hid_base_iid6,
 +	&ssam_node_hid_kip_keyboard,
-+	&ssam_node_hid_kip_penstash,
 +	&ssam_node_hid_kip_touchpad,
 +	&ssam_node_hid_kip_iid5,
-+	NULL,
-+};
-+
++	&ssam_node_hid_kip_iid6,
+ 	NULL,
+ };
  
- /* -- Device registry helper functions. ------------------------------------- */
+-- 
+2.33.1
+
+From 913396e32498177d31c25ec61a361ba377e361ce Mon Sep 17 00:00:00 2001
+From: Maximilian Luz <luzmaximilian@gmail.com>
+Date: Sun, 31 Oct 2021 18:09:53 +0100
+Subject: [PATCH] platform/surface: aggregator_registry: Remove base hub driver
+
+The base hub was a virtual device hub for Surface System Aggregator
+Module (SSAM) client devices contained in the detachable Surface Book 3
+base. Remove it as it is no longer needed.
+
+In the previous change, we have moved all devices from the base hub to
+the KIP hub. That change has also removed the only base-hub-device that
+ever existed, as it was essentially replaced by the KIP-hub-device and
+thus was no longer needed. This means that there is no remaining
+hub-device against which the base hub driver can load, i.e. it is now
+essentially dead code. So remove the driver as well.
+
+Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
+Patchset: surface-sam
+---
+ .../surface/surface_aggregator_registry.c     | 213 ------------------
+ 1 file changed, 213 deletions(-)
+
+diff --git a/drivers/platform/surface/surface_aggregator_registry.c b/drivers/platform/surface/surface_aggregator_registry.c
+index 391bfb35aaa9..57927483a9ed 100644
+--- a/drivers/platform/surface/surface_aggregator_registry.c
++++ b/drivers/platform/surface/surface_aggregator_registry.c
+@@ -325,212 +325,6 @@ static int ssam_hub_register_clients(struct device *parent, struct ssam_controll
+ }
  
-@@ -714,6 +764,9 @@ static const struct acpi_device_id ssam_platform_hub_match[] = {
- 	/* Surface Pro 7+ */
- 	{ "MSHW0119", (unsigned long)ssam_node_group_sp7 },
  
-+	/* Surface Pro 8 */
-+	{ "MSHW0263", (unsigned long)ssam_node_group_sp8 },
-+
- 	/* Surface Book 2 */
- 	{ "MSHW0107", (unsigned long)ssam_node_group_gen5 },
+-/* -- SSAM base-hub driver. ------------------------------------------------- */
+-
+-/*
+- * Some devices (especially battery) may need a bit of time to be fully usable
+- * after being (re-)connected. This delay has been determined via
+- * experimentation.
+- */
+-#define SSAM_BASE_UPDATE_CONNECT_DELAY		msecs_to_jiffies(2500)
+-
+-enum ssam_base_hub_state {
+-	SSAM_BASE_HUB_UNINITIALIZED,
+-	SSAM_BASE_HUB_CONNECTED,
+-	SSAM_BASE_HUB_DISCONNECTED,
+-};
+-
+-struct ssam_base_hub {
+-	struct ssam_device *sdev;
+-
+-	enum ssam_base_hub_state state;
+-	struct delayed_work update_work;
+-
+-	struct ssam_event_notifier notif;
+-};
+-
+-SSAM_DEFINE_SYNC_REQUEST_R(ssam_bas_query_opmode, u8, {
+-	.target_category = SSAM_SSH_TC_BAS,
+-	.target_id       = 0x01,
+-	.command_id      = 0x0d,
+-	.instance_id     = 0x00,
+-});
+-
+-#define SSAM_BAS_OPMODE_TABLET		0x00
+-#define SSAM_EVENT_BAS_CID_CONNECTION	0x0c
+-
+-static int ssam_base_hub_query_state(struct ssam_base_hub *hub, enum ssam_base_hub_state *state)
+-{
+-	u8 opmode;
+-	int status;
+-
+-	status = ssam_retry(ssam_bas_query_opmode, hub->sdev->ctrl, &opmode);
+-	if (status < 0) {
+-		dev_err(&hub->sdev->dev, "failed to query base state: %d\n", status);
+-		return status;
+-	}
+-
+-	if (opmode != SSAM_BAS_OPMODE_TABLET)
+-		*state = SSAM_BASE_HUB_CONNECTED;
+-	else
+-		*state = SSAM_BASE_HUB_DISCONNECTED;
+-
+-	return 0;
+-}
+-
+-static ssize_t ssam_base_hub_state_show(struct device *dev, struct device_attribute *attr,
+-					char *buf)
+-{
+-	struct ssam_base_hub *hub = dev_get_drvdata(dev);
+-	bool connected = hub->state == SSAM_BASE_HUB_CONNECTED;
+-
+-	return sysfs_emit(buf, "%d\n", connected);
+-}
+-
+-static struct device_attribute ssam_base_hub_attr_state =
+-	__ATTR(state, 0444, ssam_base_hub_state_show, NULL);
+-
+-static struct attribute *ssam_base_hub_attrs[] = {
+-	&ssam_base_hub_attr_state.attr,
+-	NULL,
+-};
+-
+-static const struct attribute_group ssam_base_hub_group = {
+-	.attrs = ssam_base_hub_attrs,
+-};
+-
+-static void ssam_base_hub_update_workfn(struct work_struct *work)
+-{
+-	struct ssam_base_hub *hub = container_of(work, struct ssam_base_hub, update_work.work);
+-	struct fwnode_handle *node = dev_fwnode(&hub->sdev->dev);
+-	enum ssam_base_hub_state state;
+-	int status = 0;
+-
+-	status = ssam_base_hub_query_state(hub, &state);
+-	if (status)
+-		return;
+-
+-	if (hub->state == state)
+-		return;
+-	hub->state = state;
+-
+-	if (hub->state == SSAM_BASE_HUB_CONNECTED)
+-		status = ssam_hub_register_clients(&hub->sdev->dev, hub->sdev->ctrl, node);
+-	else
+-		ssam_remove_clients(&hub->sdev->dev);
+-
+-	if (status)
+-		dev_err(&hub->sdev->dev, "failed to update base-hub devices: %d\n", status);
+-}
+-
+-static u32 ssam_base_hub_notif(struct ssam_event_notifier *nf, const struct ssam_event *event)
+-{
+-	struct ssam_base_hub *hub = container_of(nf, struct ssam_base_hub, notif);
+-	unsigned long delay;
+-
+-	if (event->command_id != SSAM_EVENT_BAS_CID_CONNECTION)
+-		return 0;
+-
+-	if (event->length < 1) {
+-		dev_err(&hub->sdev->dev, "unexpected payload size: %u\n", event->length);
+-		return 0;
+-	}
+-
+-	/*
+-	 * Delay update when the base is being connected to give devices/EC
+-	 * some time to set up.
+-	 */
+-	delay = event->data[0] ? SSAM_BASE_UPDATE_CONNECT_DELAY : 0;
+-
+-	schedule_delayed_work(&hub->update_work, delay);
+-
+-	/*
+-	 * Do not return SSAM_NOTIF_HANDLED: The event should be picked up and
+-	 * consumed by the detachment system driver. We're just a (more or less)
+-	 * silent observer.
+-	 */
+-	return 0;
+-}
+-
+-static int __maybe_unused ssam_base_hub_resume(struct device *dev)
+-{
+-	struct ssam_base_hub *hub = dev_get_drvdata(dev);
+-
+-	schedule_delayed_work(&hub->update_work, 0);
+-	return 0;
+-}
+-static SIMPLE_DEV_PM_OPS(ssam_base_hub_pm_ops, NULL, ssam_base_hub_resume);
+-
+-static int ssam_base_hub_probe(struct ssam_device *sdev)
+-{
+-	struct ssam_base_hub *hub;
+-	int status;
+-
+-	hub = devm_kzalloc(&sdev->dev, sizeof(*hub), GFP_KERNEL);
+-	if (!hub)
+-		return -ENOMEM;
+-
+-	hub->sdev = sdev;
+-	hub->state = SSAM_BASE_HUB_UNINITIALIZED;
+-
+-	hub->notif.base.priority = INT_MAX;  /* This notifier should run first. */
+-	hub->notif.base.fn = ssam_base_hub_notif;
+-	hub->notif.event.reg = SSAM_EVENT_REGISTRY_SAM;
+-	hub->notif.event.id.target_category = SSAM_SSH_TC_BAS,
+-	hub->notif.event.id.instance = 0,
+-	hub->notif.event.mask = SSAM_EVENT_MASK_NONE;
+-	hub->notif.event.flags = SSAM_EVENT_SEQUENCED;
+-
+-	INIT_DELAYED_WORK(&hub->update_work, ssam_base_hub_update_workfn);
+-
+-	ssam_device_set_drvdata(sdev, hub);
+-
+-	status = ssam_device_notifier_register(sdev, &hub->notif);
+-	if (status)
+-		return status;
+-
+-	status = sysfs_create_group(&sdev->dev.kobj, &ssam_base_hub_group);
+-	if (status)
+-		goto err;
+-
+-	schedule_delayed_work(&hub->update_work, 0);
+-	return 0;
+-
+-err:
+-	ssam_device_notifier_unregister(sdev, &hub->notif);
+-	cancel_delayed_work_sync(&hub->update_work);
+-	ssam_remove_clients(&sdev->dev);
+-	return status;
+-}
+-
+-static void ssam_base_hub_remove(struct ssam_device *sdev)
+-{
+-	struct ssam_base_hub *hub = ssam_device_get_drvdata(sdev);
+-
+-	sysfs_remove_group(&sdev->dev.kobj, &ssam_base_hub_group);
+-
+-	ssam_device_notifier_unregister(sdev, &hub->notif);
+-	cancel_delayed_work_sync(&hub->update_work);
+-	ssam_remove_clients(&sdev->dev);
+-}
+-
+-static const struct ssam_device_id ssam_base_hub_match[] = {
+-	{ SSAM_VDEV(HUB, 0x02, SSAM_ANY_IID, 0x00) },
+-	{ },
+-};
+-
+-static struct ssam_device_driver ssam_base_hub_driver = {
+-	.probe = ssam_base_hub_probe,
+-	.remove = ssam_base_hub_remove,
+-	.match_table = ssam_base_hub_match,
+-	.driver = {
+-		.name = "surface_aggregator_base_hub",
+-		.probe_type = PROBE_PREFER_ASYNCHRONOUS,
+-		.pm = &ssam_base_hub_pm_ops,
+-	},
+-};
+-
+-
+ /* -- SSAM KIP-subsystem hub driver. ---------------------------------------- */
+ 
+ /*
+@@ -872,10 +666,6 @@ static int __init ssam_device_hub_init(void)
+ 	if (status)
+ 		goto err_platform;
+ 
+-	status = ssam_device_driver_register(&ssam_base_hub_driver);
+-	if (status)
+-		goto err_base;
+-
+ 	status = ssam_device_driver_register(&ssam_kip_hub_driver);
+ 	if (status)
+ 		goto err_kip;
+@@ -883,8 +673,6 @@ static int __init ssam_device_hub_init(void)
+ 	return 0;
  
+ err_kip:
+-	ssam_device_driver_unregister(&ssam_base_hub_driver);
+-err_base:
+ 	platform_driver_unregister(&ssam_platform_hub_driver);
+ err_platform:
+ 	return status;
+@@ -894,7 +682,6 @@ module_init(ssam_device_hub_init);
+ static void __exit ssam_device_hub_exit(void)
+ {
+ 	ssam_device_driver_unregister(&ssam_kip_hub_driver);
+-	ssam_device_driver_unregister(&ssam_base_hub_driver);
+ 	platform_driver_unregister(&ssam_platform_hub_driver);
+ }
+ module_exit(ssam_device_hub_exit);
 -- 
 2.33.1
 

+ 3 - 3
patches/5.14/0006-surface-sam-over-hid.patch

@@ -1,4 +1,4 @@
-From bc1127876d58b4d22d85bf8e2d20aadda7acb2c4 Mon Sep 17 00:00:00 2001
+From f7ecfb0318514624a165d7a67eece3ca04ad429a 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
@@ -110,7 +110,7 @@ index 74925621f239..169713964358 100644
 -- 
 2.33.1
 
-From ad156d5fe3a60a24d14e5c1e0256e0706f374234 Mon Sep 17 00:00:00 2001
+From a268a26a89402358951f54b75c9a1fa378e2ef2c Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sat, 13 Feb 2021 16:41:18 +0100
 Subject: [PATCH] platform/surface: Add driver for Surface Book 1 dGPU switch
@@ -133,7 +133,7 @@ Patchset: surface-sam-over-hid
  create mode 100644 drivers/platform/surface/surfacebook1_dgpu_switch.c
 
 diff --git a/drivers/platform/surface/Kconfig b/drivers/platform/surface/Kconfig
-index 133ebb84bd2d..3fe7f14e00d9 100644
+index 3c0ee0cdaef5..e5eedb85d471 100644
 --- a/drivers/platform/surface/Kconfig
 +++ b/drivers/platform/surface/Kconfig
 @@ -104,6 +104,13 @@ config SURFACE_AGGREGATOR_REGISTRY

+ 2 - 2
patches/5.14/0007-surface-gpe.patch

@@ -1,4 +1,4 @@
-From c1a09197036ae5ef0ec93fda371a4aafa34aef1f Mon Sep 17 00:00:00 2001
+From 79367a2ec013ab123b786dcffd50a8f226e97fd2 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 10 Oct 2021 00:02:44 +0200
 Subject: [PATCH] platform/surface: gpe: Add support for Surface Laptop Studio
@@ -46,7 +46,7 @@ index 86f6991b1215..c1775db29efb 100644
 -- 
 2.33.1
 
-From ab6d48c467d64e71b3b468ac7ae97215706fbea2 Mon Sep 17 00:00:00 2001
+From 4e5fdf6531d8885c78914b767fd0067978a58731 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Wed, 27 Oct 2021 00:56:11 +0200
 Subject: [PATCH] platform/surface: gpe: Add support for Surface Pro 8

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

@@ -1,4 +1,4 @@
-From 71c683d6e205d59883721b54e4684b00f1de4145 Mon Sep 17 00:00:00 2001
+From 07bdb6607954bd5c7c061e97e77caff746110158 Mon Sep 17 00:00:00 2001
 From: Sachi King <nakato@nakato.io>
 Date: Tue, 5 Oct 2021 00:05:09 +1100
 Subject: [PATCH] Input: soc_button_array - support AMD variant Surface devices
@@ -75,7 +75,7 @@ index cb6ec59a045d..4e8944f59def 100644
 -- 
 2.33.1
 
-From caa43c419877598b00cd65008cde2965ae7a01c8 Mon Sep 17 00:00:00 2001
+From ea5636c90721e6ee95f67aa75398feaa99f2c87e Mon Sep 17 00:00:00 2001
 From: Sachi King <nakato@nakato.io>
 Date: Tue, 5 Oct 2021 00:22:57 +1100
 Subject: [PATCH] platform/surface: surfacepro3_button: don't load on amd

+ 1 - 1
patches/5.14/0009-surface-typecover.patch

@@ -1,4 +1,4 @@
-From fe1d02eee7e1377de3b3e68a3acdf002365ff6ff Mon Sep 17 00:00:00 2001
+From 159e60a412ea0aa858255efa51ddff52c8709ca5 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

+ 37 - 37
patches/5.14/0010-cameras.patch

@@ -1,4 +1,4 @@
-From 4352a215b5d1b131535e20f4edc2eaf0a4a42a98 Mon Sep 17 00:00:00 2001
+From a8807888d7bf8eefaa27028885c059e0e0f1dfd4 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Mon, 5 Apr 2021 23:56:53 +0100
 Subject: [PATCH] media: ipu3-cio2: Toggle sensor streaming in pm runtime ops
@@ -58,7 +58,7 @@ index 47db0ee0fcbf..7bb86e246ebe 100644
 -- 
 2.33.1
 
-From 582f4eab7810c531da2814d13a18533f0efe1e28 Mon Sep 17 00:00:00 2001
+From 459b8f705cc2f44382ce670ee0695665f9a20181 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Mon, 5 Apr 2021 23:56:54 +0100
 Subject: [PATCH] media: i2c: Add support for ov5693 sensor
@@ -84,10 +84,10 @@ Patchset: cameras
  create mode 100644 drivers/media/i2c/ov5693.c
 
 diff --git a/MAINTAINERS b/MAINTAINERS
-index d7b4f32875a9..db66227a14f8 100644
+index 5713585d060d..33fdad7a7ddf 100644
 --- a/MAINTAINERS
 +++ b/MAINTAINERS
-@@ -13751,6 +13751,13 @@ S:	Maintained
+@@ -13757,6 +13757,13 @@ S:	Maintained
  T:	git git://linuxtv.org/media_tree.git
  F:	drivers/media/i2c/ov5675.c
  
@@ -1701,7 +1701,7 @@ index 000000000000..9499ee10f56c
 -- 
 2.33.1
 
-From 0155b5faba94edf41ea0d671d82800554f9e836e Mon Sep 17 00:00:00 2001
+From 56126760c66d09faaef4b472f606bcbfd2c803e1 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Fabian=20W=C3=BCthrich?= <me@fabwu.ch>
 Date: Fri, 22 Jan 2021 20:58:13 +0100
 Subject: [PATCH] cio2-bridge: Parse sensor orientation and rotation
@@ -1864,7 +1864,7 @@ index dd0ffcafa489..924d99d20328 100644
 -- 
 2.33.1
 
-From 25757594297e22f586b83c7f8646486b525e0ea7 Mon Sep 17 00:00:00 2001
+From 681f7ddaf17df8a7a2aff186757ecd2aebe2e1d5 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Fabian=20W=C3=BCthrich?= <me@fabwu.ch>
 Date: Sun, 24 Jan 2021 11:07:42 +0100
 Subject: [PATCH] cio2-bridge: Use macros and add warnings
@@ -1968,7 +1968,7 @@ index 924d99d20328..e1e388cc9f45 100644
 -- 
 2.33.1
 
-From cc12d2e64386041436fb596336eb0542dd489c14 Mon Sep 17 00:00:00 2001
+From 7afae35f029a9859109430c925d358626009c1c2 Mon Sep 17 00:00:00 2001
 From: =?UTF-8?q?Fabian=20W=C3=BCthrich?= <me@fabwu.ch>
 Date: Thu, 6 May 2021 07:52:44 +0200
 Subject: [PATCH] cio2-bridge: Use correct dev_properties size
@@ -1994,7 +1994,7 @@ index e1e388cc9f45..deaf5804f70d 100644
 -- 
 2.33.1
 
-From 16aeaa92ffa4a2965c3dee9a6817508e95436bc1 Mon Sep 17 00:00:00 2001
+From 0f4ca81b714eab07aa36d1fdbd42107c8300698e Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Thu, 20 May 2021 23:31:04 +0100
 Subject: [PATCH] media: i2c: Fix vertical flip in ov5693
@@ -2029,7 +2029,7 @@ index 9499ee10f56c..c558f9b48c83 100644
 -- 
 2.33.1
 
-From 2071456a45457337277dc0956dd2cfc6061f98f7 Mon Sep 17 00:00:00 2001
+From d86a2fcdc0dd7c54149d550ecb148bf88658a667 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Fri, 9 Jul 2021 16:39:18 +0100
 Subject: [PATCH] media: i2c: Add ACPI support to ov8865
@@ -2080,7 +2080,7 @@ index ce50f3ea87b8..7626c8608f8f 100644
 -- 
 2.33.1
 
-From 688d67c5535b79ce22df18d2b4ac26878e67bedb Mon Sep 17 00:00:00 2001
+From d90c2d51c769294de4c73c74b0adcb7bb15b8762 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Sat, 10 Jul 2021 21:20:17 +0100
 Subject: [PATCH] media: i2c: Fix incorrect value in comment
@@ -2111,7 +2111,7 @@ index 7626c8608f8f..8e3f8a554452 100644
 -- 
 2.33.1
 
-From 9968f4ba4dd81c0ad70d43b878dd8d8ae5c533b9 Mon Sep 17 00:00:00 2001
+From 0a07325524798d2fb41a7735778ffd59a48b50c3 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Sat, 10 Jul 2021 22:21:52 +0100
 Subject: [PATCH] media: i2c: Defer probe if not endpoint found
@@ -2148,7 +2148,7 @@ index 8e3f8a554452..9bc8d5d8199b 100644
 -- 
 2.33.1
 
-From cc72b39e219ea6e706f04d40ad07a157eaeebe2d Mon Sep 17 00:00:00 2001
+From 1b4bcf9420c2b8f4bd9c9f0c3a9cd0f77199b113 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Sat, 10 Jul 2021 22:00:25 +0100
 Subject: [PATCH] media: i2c: Support 19.2MHz input clock in ov8865
@@ -2507,7 +2507,7 @@ index 9bc8d5d8199b..4ddc1b277cc0 100644
 -- 
 2.33.1
 
-From 929fbc89160aed4998382a642ecc1e9811c512b4 Mon Sep 17 00:00:00 2001
+From 7cd521820f292dc6fa0439b3e63bb9e688d62399 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Sat, 10 Jul 2021 22:19:10 +0100
 Subject: [PATCH] media: i2c: Add .get_selection() support to ov8865
@@ -2612,7 +2612,7 @@ index 4ddc1b277cc0..0f2776390a8e 100644
 -- 
 2.33.1
 
-From 56cb0b0be2353a71d9928614c23256ed2873f973 Mon Sep 17 00:00:00 2001
+From a257409ab2c318907df0cd648c4740f3292bd348 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Sat, 10 Jul 2021 22:34:43 +0100
 Subject: [PATCH] media: i2c: Switch control to V4L2_CID_ANALOGUE_GAIN
@@ -2665,7 +2665,7 @@ index 0f2776390a8e..a832938c33b6 100644
 -- 
 2.33.1
 
-From 6621e664b96fb62971f6181386e8327c3a9422f7 Mon Sep 17 00:00:00 2001
+From 9709be2bb3a68cdcc76a62c25f56bb306f6a65a3 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Mon, 12 Jul 2021 22:54:56 +0100
 Subject: [PATCH] media: i2c: Add vblank control to ov8865
@@ -2775,7 +2775,7 @@ index a832938c33b6..f741c0713ca4 100644
 -- 
 2.33.1
 
-From b989f9454f9e6f38ad0ab04deb564fdaf1ff7509 Mon Sep 17 00:00:00 2001
+From f41d9122f2bc9296fe8ee05fb9ade13eccb8e77a Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Tue, 13 Jul 2021 23:40:33 +0100
 Subject: [PATCH] media: i2c: Add hblank control to ov8865
@@ -2845,7 +2845,7 @@ index f741c0713ca4..4b18cc80f985 100644
 -- 
 2.33.1
 
-From c9c89f9dd50ef714692278841ebf11a38de527cb Mon Sep 17 00:00:00 2001
+From 2ec6c7350db1ee1782fe66a5ef8e7752a865fe98 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Wed, 20 Oct 2021 22:43:54 +0100
 Subject: [PATCH] media: i2c: Update HTS values in ov8865
@@ -3021,7 +3021,7 @@ index 4b18cc80f985..1b8674152750 100644
 -- 
 2.33.1
 
-From 67bdb92ce85b7b83a37882490d0f77b580d396e6 Mon Sep 17 00:00:00 2001
+From 4ce251e57e5279e21f931e5883489b6924f5288e Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Tue, 13 Jul 2021 23:43:17 +0100
 Subject: [PATCH] media: i2c: cap exposure at height + vblank in ov8865
@@ -3104,7 +3104,7 @@ index 1b8674152750..99548ad15dcd 100644
 -- 
 2.33.1
 
-From 37a3e3adbbab2e7d3d7a0670e6595e54f10f0ca4 Mon Sep 17 00:00:00 2001
+From a4623f9745b4d8c1f76b4a9177fbbcd04f4ffa63 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Fri, 16 Jul 2021 22:56:15 +0100
 Subject: [PATCH] media: i2c: Add controls from fwnode to ov8865
@@ -3149,7 +3149,7 @@ index 99548ad15dcd..dfb5095ef16b 100644
 -- 
 2.33.1
 
-From 9a955621db26aef7bbab825e4392af7593f91970 Mon Sep 17 00:00:00 2001
+From 47367d8e5eb871798ba3b0d6fc2f1f84a9dda61d Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Fri, 16 Jul 2021 00:00:54 +0100
 Subject: [PATCH] media: i2c: Switch exposure control unit to lines
@@ -3196,7 +3196,7 @@ index dfb5095ef16b..5f19d82554df 100644
 -- 
 2.33.1
 
-From d5dbf718bcf42a16542b3f46d392f04d2e6c2032 Mon Sep 17 00:00:00 2001
+From 934dbd31d57b24b29b8e11862810410eacd3037c Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Tue, 24 Aug 2021 22:39:02 +0100
 Subject: [PATCH] media: i2c: Re-order runtime pm initialisation
@@ -3232,7 +3232,7 @@ index 5f19d82554df..18b5f1e8e9a7 100644
 -- 
 2.33.1
 
-From 16eb1b76b4715f8dfb0d8dcd83ea32d164ab5ab7 Mon Sep 17 00:00:00 2001
+From 5077b3845260253329e7421f5095c65981322f5e Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Tue, 24 Aug 2021 23:17:39 +0100
 Subject: [PATCH] media: i2c: Use dev_err_probe() in ov8865
@@ -3315,7 +3315,7 @@ index 18b5f1e8e9a7..19e6bebf340d 100644
 -- 
 2.33.1
 
-From 8c076d4726ce349959ef761da54826bf92330268 Mon Sep 17 00:00:00 2001
+From 98e5637775358878c194dd20ec8c6eada543a6c1 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Wed, 14 Jul 2021 00:05:04 +0100
 Subject: [PATCH] media: ipu3-cio2: Add INT347A to cio2-bridge
@@ -3348,7 +3348,7 @@ index 7e582135dfb8..0132f0bd9b41 100644
 -- 
 2.33.1
 
-From d522a51f9cfe6f13e6275081d99f8598d792cb5f Mon Sep 17 00:00:00 2001
+From d8e3e2677c25ae396adb8b5c25e6913bf035c17e Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Thu, 7 Oct 2021 15:34:52 +0200
 Subject: [PATCH] media: i2c: ov8865: Fix lockdep error
@@ -3394,7 +3394,7 @@ index 19e6bebf340d..d5af8aedf5e8 100644
 -- 
 2.33.1
 
-From 4923e2aa1a3c301ebdd3f0fb33f86840ce87418e Mon Sep 17 00:00:00 2001
+From d2ff2644d609dca82bafb50d87b7470d8f8fb169 Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:56:57 +0200
 Subject: [PATCH] ACPI: delay enumeration of devices with a _DEP pointing to an
@@ -3577,7 +3577,7 @@ index 13d93371790e..2da53b7b4965 100644
 -- 
 2.33.1
 
-From 98381f25560a7fe3f34f6ed8d1b4689f2418d026 Mon Sep 17 00:00:00 2001
+From d9d031963056db5d00e86fd006a389f471a6cb78 Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:56:58 +0200
 Subject: [PATCH] i2c: acpi: Use acpi_dev_ready_for_enumeration() helper
@@ -3629,7 +3629,7 @@ index 169713964358..9f0e719cd2c8 100644
 -- 
 2.33.1
 
-From 8d1d46410ca2e3a311387d8307b9bff8610d7e02 Mon Sep 17 00:00:00 2001
+From 3a1c942735f064304a5ef481dd7285b491faa27c Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:56:59 +0200
 Subject: [PATCH] platform_data: Add linux/platform_data/tps68470.h file
@@ -3702,7 +3702,7 @@ index 000000000000..126d082c3f2e
 -- 
 2.33.1
 
-From c41dafea89e4f00f99cf0b1fcf1b4cd43f0879d7 Mon Sep 17 00:00:00 2001
+From dbe66e8b9bc378b32ff828e8d096a835bf5186f3 Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:57:00 +0200
 Subject: [PATCH] regulator: Introduce tps68470-regulator driver
@@ -3964,7 +3964,7 @@ index 000000000000..3129fa13a122
 -- 
 2.33.1
 
-From 83625fe7c08bfdd63c688d2300e7e9ea47710639 Mon Sep 17 00:00:00 2001
+From a3c58f4bba6b0728754ea1f165cac9a017d4b939 Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:57:01 +0200
 Subject: [PATCH] clk: Introduce clk-tps68470 driver
@@ -4309,7 +4309,7 @@ index ffe81127d91c..7807fa329db0 100644
 -- 
 2.33.1
 
-From 71e9c4b05e790f94f3bad8e6b6f737235a8185a4 Mon Sep 17 00:00:00 2001
+From be026cfad4141e3dedee20b437c6ab0f12855f37 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Sun, 10 Oct 2021 20:57:02 +0200
 Subject: [PATCH] platform/x86: int3472: Enable I2c daisy chain
@@ -4346,7 +4346,7 @@ index c05b4cf502fe..42e688f4cad4 100644
 -- 
 2.33.1
 
-From ac71d936ec0f5c42dc17a84d050dc28bcdca6f1c Mon Sep 17 00:00:00 2001
+From 4180ee7616516c66153e29c16acaafd212a509bb Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:57:03 +0200
 Subject: [PATCH] platform/x86: int3472: Split into 2 drivers
@@ -4605,7 +4605,7 @@ index 42e688f4cad4..b94cf66ab61f 100644
 -- 
 2.33.1
 
-From 3ce790f76e65049a3bd360de9c5e16e9258ecdac Mon Sep 17 00:00:00 2001
+From 4d137ed1431f418f892777a34e56d7b77ed8c8e2 Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:57:04 +0200
 Subject: [PATCH] platform/x86: int3472: Add get_sensor_adev_and_name() helper
@@ -4718,7 +4718,7 @@ index 856602a2f6bb..22a4894f1cc7 100644
 -- 
 2.33.1
 
-From 97ffec7782c6412b62b12ad1dfa624597000db85 Mon Sep 17 00:00:00 2001
+From e1c4809c5f6e7cf656de86e74cc606a2e352d89b Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:57:05 +0200
 Subject: [PATCH] platform/x86: int3472: Pass tps68470_clk_platform_data to the
@@ -4806,7 +4806,7 @@ index b94cf66ab61f..78e34e7b6969 100644
 -- 
 2.33.1
 
-From 953280a290178f264e99d8c1fe94ebd681c5beb6 Mon Sep 17 00:00:00 2001
+From 86bf024c4c2a343ecf0e23b7cec4da8ad0a652b6 Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:57:06 +0200
 Subject: [PATCH] platform/x86: int3472: Pass tps68470_regulator_platform_data
@@ -5100,7 +5100,7 @@ index 000000000000..96954a789bb8
 -- 
 2.33.1
 
-From a64bb2d82c2bd1f4d7b150d5a7acd9ed1dbf7a8c Mon Sep 17 00:00:00 2001
+From 14a7e9404dfc4085b4d4ed71d55f0721f2f0339d Mon Sep 17 00:00:00 2001
 From: Hans de Goede <hdegoede@redhat.com>
 Date: Sun, 10 Oct 2021 20:57:07 +0200
 Subject: [PATCH] platform/x86: int3472: Deal with probe ordering issues
@@ -5184,7 +5184,7 @@ index aae24d228770..21c6c1a6edfc 100644
 -- 
 2.33.1
 
-From 0f54cfac84528f20cbb57b6c0b4340e65566fc4d Mon Sep 17 00:00:00 2001
+From 5dc56637061f956cce4c073e4d7c593085e922de Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Thu, 22 Jul 2021 00:20:46 +0100
 Subject: [PATCH] Revert "media: device property: Call
@@ -5226,7 +5226,7 @@ index d0874f6c29bb..4d7ff55df95d 100644
 -- 
 2.33.1
 
-From 951f102ad80ca5dfe0d3cfdd3936e1104b4aecbc Mon Sep 17 00:00:00 2001
+From 32971bfc87fbfa976f8ec70989146edaa60466a7 Mon Sep 17 00:00:00 2001
 From: Daniel Scally <djrscally@gmail.com>
 Date: Sun, 18 Jul 2021 23:52:42 +0100
 Subject: [PATCH] device property: Check fwnode->secondary in

+ 5 - 5
patches/5.14/0011-amd-gpio.patch

@@ -1,4 +1,4 @@
-From db59de04463e7daf9db5d6a94ecade027c386bf5 Mon Sep 17 00:00:00 2001
+From e291fe440d5f7447c3f81ee223c9923423b45aac Mon Sep 17 00:00:00 2001
 From: Sachi King <nakato@nakato.io>
 Date: Sat, 29 May 2021 17:47:38 +1000
 Subject: [PATCH] ACPI: Add quirk for Surface Laptop 4 AMD missing irq 7
@@ -65,7 +65,7 @@ index e55e0c1fad8c..46dfad41b401 100644
 -- 
 2.33.1
 
-From f36c217ee9cf09a3eeb0c4c869823fe4abe53c87 Mon Sep 17 00:00:00 2001
+From 8d5024b44c7cd6819b7deca883ee4b0f79917b30 Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Thu, 3 Jun 2021 14:04:26 +0200
 Subject: [PATCH] ACPI: Add AMD 13" Surface Laptop 4 model to irq 7 override
@@ -107,7 +107,7 @@ index 46dfad41b401..78bf6a097dc5 100644
 -- 
 2.33.1
 
-From fa0275eafbc5171767f6bc3fd9ca2dba2940ccc6 Mon Sep 17 00:00:00 2001
+From 9695d8c770fbff8b00f3a6fea1f612bbb095cd6a Mon Sep 17 00:00:00 2001
 From: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
 Date: Tue, 31 Aug 2021 17:36:12 +0530
 Subject: [PATCH] pinctrl: amd: Add irq field data
@@ -173,7 +173,7 @@ index 95e763424042..1d4317073654 100644
 -- 
 2.33.1
 
-From d1b2d9b220465e1f8abb62f07f461b1c2374d66b Mon Sep 17 00:00:00 2001
+From 3e0af5b7739aecbe646104171bdcefb925c4cc6d Mon Sep 17 00:00:00 2001
 From: Basavaraj Natikar <Basavaraj.Natikar@amd.com>
 Date: Tue, 31 Aug 2021 17:36:13 +0530
 Subject: [PATCH] pinctrl: amd: Handle wake-up interrupt
@@ -220,7 +220,7 @@ index 79b8b7f91996..d19974aceb2e 100644
 -- 
 2.33.1
 
-From f429b5104b297a4b817df233dc77665c48c31184 Mon Sep 17 00:00:00 2001
+From 6567cde21a9e1cbf952eedfd293ef72f6cfe55b6 Mon Sep 17 00:00:00 2001
 From: Sachi King <nakato@nakato.io>
 Date: Fri, 1 Oct 2021 21:19:09 +1000
 Subject: [PATCH] pinctrl: amd: disable and mask interrupts on probe

+ 11 - 11
pkg/arch/kernel/PKGBUILD

@@ -48,17 +48,17 @@ sha256sums=('SKIP'
             'f98065a286a6d2dbb0e226867a6417e344aaa44ef6eac967707e1f09671be445'
             '63e0aa01e590c789a2a312f48cdc467b29734465cdf87e206b7a7e0f82e22bc4'
             'b30cd71018df7e98101ba0cf37054169006b096d2870a9f8467dd96378b02b98'
-            '3fa38ff5b5f74b717fb1112b3822ef7c34335ca39d544fd9827708013a13841f'
-            '332d8f16ebf01e297bba2353a952cbf759f766e8fb285eba05591798475bc7c7'
-            '77364719c3ae38d628c07a1f73fe43288d8d08f205f687179e3b32d5cf09b23e'
-            'c14028323060e022ec262c3578c14d6befdfd9a7150f0c8fc913f95f88424a2e'
-            '82d26d00a1425fb4f9da8ca0e489eed87399329b7bdac9d571ab27fc4c80fb09'
-            '4327c9d55bdcc2a70d096916f879f67373ad1145b466523392e39b256f803cb1'
-            '73676de16536f1bdb07049e500775ec16cf6983db0b8f82f9671d7a170791109'
-            '83789baef33e36e3e67516ddc7880e568e01d306db261ae16b56aabb18640406'
-            'ef9866fd7f9119b9722e598b0c57c3361ff648e1163a5ce987b5b89a2c7e7ef6'
-            '2fca60f3dba19b8c135d12699f59e52845511b6aa902c7edc3df73504abe4732'
-            '55eadb276875103d22f86bdf969949be8c6a429d7a07c5efea4a4d901e060335')
+            'd73e7f4dec78e5c82feab81d3dc4bdc0f98d8e00287e11ff04c147b52c7d234a'
+            'b7c2944150afc54d81d6be9c558973a7cd1457511cb627aa2b919ce5a3bbf234'
+            'b259a4e26722f42c8a71179b6ec66aa2aa9099d5558c6f17114d4e5e78e3d128'
+            'bb21a53c74685cab412578a69ec4cac37e08758e16943c152bdfaa4ea05d6745'
+            '4ffe19461919a56960fd8bd2775cb55144a8e87466b3667678c56c68ffebd2a7'
+            '47ef1e578c76d7579d21801d53eb04fe4f120097f8c6f57bf2dd233190fbe75a'
+            'd37637392004d68430bf86a108cca9f0e5ab1b241caac86bc700202801879098'
+            '0653f2d63e63d1de91e64673f9e4e91f1159e3a55c1726754cbf7148e5570370'
+            'e2880e82f7a911dffeb09226c27635d6ecec330d3393ade7e2f50374fa085168'
+            '6e8256af155c2c0db98070381a29ae91681a0ea95f868a11632ae7b513309f6f'
+            'e7a3f0babfd56df6d3c7e5e4ad459af9c596ca10661b3d6df88ced441d60b227')
 
 
 export KBUILD_BUILD_HOST=archlinux