瀏覽代碼

Update v5.8 patches

Changes:
- SAM:
  - Cleanup and restructuring.

- GPE:
  - Cleanup and restructuring.

Links:
- SAM: https://github.com/linux-surface/surface-aggregator-module/commit/84827e830e09cf4a7f38ecee63a6e7319bf22b9b
- GPE: https://github.com/linux-surface/surface-gpe/commit/829bacbe198978080a6f4844658393bbe431988a
- kernel: https://github.com/linux-surface/kernel/commit/0d9bfdba18305a2ac9b7f4cb93dd837036d50b72
Maximilian Luz 4 年之前
父節點
當前提交
6070a3cde4

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

@@ -1,4 +1,4 @@
-From 7cd3be5c7f76a886083272c6dd562d7217dc0767 Mon Sep 17 00:00:00 2001
+From 066e779c7a5805e345f1a9dcdbcca1206b4ece67 Mon Sep 17 00:00:00 2001
 From: Chih-Wei Huang <cwhuang@linux.org.tw>
 From: Chih-Wei Huang <cwhuang@linux.org.tw>
 Date: Tue, 18 Sep 2018 11:01:37 +0800
 Date: Tue, 18 Sep 2018 11:01:37 +0800
 Subject: [PATCH 1/6] surface3-oemb
 Subject: [PATCH 1/6] surface3-oemb

+ 1 - 1
patches/5.8/0002-wifi.patch

@@ -1,4 +1,4 @@
-From 2a3ed3370f323ca5026a37f9ad2dedb23fd378ca Mon Sep 17 00:00:00 2001
+From ca3d192b0e00bebf0ff2352a00a9120d1a2e4e7c Mon Sep 17 00:00:00 2001
 From: kitakar5525 <34676735+kitakar5525@users.noreply.github.com>
 From: kitakar5525 <34676735+kitakar5525@users.noreply.github.com>
 Date: Thu, 20 Feb 2020 16:51:11 +0900
 Date: Thu, 20 Feb 2020 16:51:11 +0900
 Subject: [PATCH 2/6] wifi
 Subject: [PATCH 2/6] wifi

+ 1 - 1
patches/5.8/0003-ipts.patch

@@ -1,4 +1,4 @@
-From ba612c1a501963c3b941275a4d5f2b3b215b8a5b Mon Sep 17 00:00:00 2001
+From 4ad6656739cd57b52360b9909af2ab762968a632 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 3/6] ipts
 Subject: [PATCH 3/6] ipts

文件差異過大導致無法顯示
+ 331 - 365
patches/5.8/0004-surface-sam.patch


+ 1 - 1
patches/5.8/0005-surface-sam-over-hid.patch

@@ -1,4 +1,4 @@
-From 06d09ff5e8976c38cee7a3989461e5f0c6192a13 Mon Sep 17 00:00:00 2001
+From 2c2d6aff72e97d6ce46164d42de267cf3e0dce2d 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 5/6] surface-sam-over-hid
 Subject: [PATCH 5/6] surface-sam-over-hid

+ 75 - 71
patches/5.8/0006-surface-gpe.patch

@@ -1,4 +1,4 @@
-From dfe3b509e98f3f8b1df867927490e3862655b7a4 Mon Sep 17 00:00:00 2001
+From 9ec51d0d15ab736230deeeb6a9699163666e159e Mon Sep 17 00:00:00 2001
 From: Maximilian Luz <luzmaximilian@gmail.com>
 From: Maximilian Luz <luzmaximilian@gmail.com>
 Date: Sun, 16 Aug 2020 23:39:56 +0200
 Date: Sun, 16 Aug 2020 23:39:56 +0200
 Subject: [PATCH 6/6] surface-gpe
 Subject: [PATCH 6/6] surface-gpe
@@ -6,8 +6,8 @@ Subject: [PATCH 6/6] surface-gpe
 ---
 ---
  drivers/platform/x86/Kconfig       |   9 +
  drivers/platform/x86/Kconfig       |   9 +
  drivers/platform/x86/Makefile      |   1 +
  drivers/platform/x86/Makefile      |   1 +
- drivers/platform/x86/surface_gpe.c | 299 +++++++++++++++++++++++++++++
- 3 files changed, 309 insertions(+)
+ drivers/platform/x86/surface_gpe.c | 303 +++++++++++++++++++++++++++++
+ 3 files changed, 313 insertions(+)
  create mode 100644 drivers/platform/x86/surface_gpe.c
  create mode 100644 drivers/platform/x86/surface_gpe.c
 
 
 diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
 diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
@@ -44,10 +44,10 @@ index 5156523b58639..ef0c3fcab3194 100644
  obj-$(CONFIG_MSI_LAPTOP)	+= msi-laptop.o
  obj-$(CONFIG_MSI_LAPTOP)	+= msi-laptop.o
 diff --git a/drivers/platform/x86/surface_gpe.c b/drivers/platform/x86/surface_gpe.c
 diff --git a/drivers/platform/x86/surface_gpe.c b/drivers/platform/x86/surface_gpe.c
 new file mode 100644
 new file mode 100644
-index 0000000000000..4c141fef7a5f4
+index 0000000000000..10e563f253b9e
 --- /dev/null
 --- /dev/null
 +++ b/drivers/platform/x86/surface_gpe.c
 +++ b/drivers/platform/x86/surface_gpe.c
-@@ -0,0 +1,299 @@
+@@ -0,0 +1,303 @@
 +// SPDX-License-Identifier: GPL-2.0-or-later
 +// SPDX-License-Identifier: GPL-2.0-or-later
 +/*
 +/*
 + * Surface GPE/Lid driver to enable wakeup from suspend via the lid by
 + * Surface GPE/Lid driver to enable wakeup from suspend via the lid by
@@ -60,29 +60,36 @@ index 0000000000000..4c141fef7a5f4
 +#include <linux/module.h>
 +#include <linux/module.h>
 +#include <linux/platform_device.h>
 +#include <linux/platform_device.h>
 +
 +
++/*
++ * Note: The GPE numbers for the lid devices found below have been obtained
++ *       from ACPI/the DSDT table, specifically from the GPE handler for the
++ *       lid.
++ */
 +
 +
-+struct surface_lid_device {
-+	u32 gpe_number;
-+};
-+
-+static const struct surface_lid_device lid_device_l17 = {
-+	.gpe_number = 0x17,
++static const struct property_entry lid_device_props_l17[] = {
++	PROPERTY_ENTRY_U32("gpe", 0x17),
++	{},
 +};
 +};
 +
 +
-+static const struct surface_lid_device lid_device_l4D = {
-+	.gpe_number = 0x4D,
++static const struct property_entry lid_device_props_l4D[] = {
++	PROPERTY_ENTRY_U32("gpe", 0x4D),
++	{},
 +};
 +};
 +
 +
-+static const struct surface_lid_device lid_device_l4F = {
-+	.gpe_number = 0x4F,
++static const struct property_entry lid_device_props_l4F[] = {
++	PROPERTY_ENTRY_U32("gpe", 0x4F),
++	{},
 +};
 +};
 +
 +
-+static const struct surface_lid_device lid_device_l57 = {
-+	.gpe_number = 0x57,
++static const struct property_entry lid_device_props_l57[] = {
++	PROPERTY_ENTRY_U32("gpe", 0x57),
++	{},
 +};
 +};
 +
 +
-+
-+// Note: When changing this don't forget to change the MODULE_ALIAS below.
++/*
++ * Note: When changing this, don't forget to check that the MODULE_ALIAS below
++ *       still fits.
++ */
 +static const struct dmi_system_id dmi_lid_device_table[] = {
 +static const struct dmi_system_id dmi_lid_device_table[] = {
 +	{
 +	{
 +		.ident = "Surface Pro 4",
 +		.ident = "Surface Pro 4",
@@ -90,7 +97,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Pro 4"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Pro 4"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l17,
++		.driver_data = (void *)lid_device_props_l17,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Pro 5",
 +		.ident = "Surface Pro 5",
@@ -102,7 +109,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "Surface_Pro_1796"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "Surface_Pro_1796"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l4F,
++		.driver_data = (void *)lid_device_props_l4F,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Pro 5 (LTE)",
 +		.ident = "Surface Pro 5 (LTE)",
@@ -114,7 +121,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "Surface_Pro_1807"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "Surface_Pro_1807"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l4F,
++		.driver_data = (void *)lid_device_props_l4F,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Pro 6",
 +		.ident = "Surface Pro 6",
@@ -122,7 +129,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Pro 6"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Pro 6"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l4F,
++		.driver_data = (void *)lid_device_props_l4F,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Pro 7",
 +		.ident = "Surface Pro 7",
@@ -130,7 +137,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Pro 7"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Pro 7"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l4D,
++		.driver_data = (void *)lid_device_props_l4D,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Book 1",
 +		.ident = "Surface Book 1",
@@ -138,7 +145,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Book"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Book"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l17,
++		.driver_data = (void *)lid_device_props_l17,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Book 2",
 +		.ident = "Surface Book 2",
@@ -146,7 +153,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Book 2"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Book 2"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l17,
++		.driver_data = (void *)lid_device_props_l17,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Book 3",
 +		.ident = "Surface Book 3",
@@ -154,7 +161,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Book 3"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Book 3"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l4D,
++		.driver_data = (void *)lid_device_props_l4D,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Laptop 1",
 +		.ident = "Surface Laptop 1",
@@ -162,7 +169,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Laptop"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Laptop"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l57,
++		.driver_data = (void *)lid_device_props_l57,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Laptop 2",
 +		.ident = "Surface Laptop 2",
@@ -170,7 +177,7 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Laptop 2"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Laptop 2"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l57,
++		.driver_data = (void *)lid_device_props_l57,
 +	},
 +	},
 +	{
 +	{
 +		.ident = "Surface Laptop 3 (Intel 13\")",
 +		.ident = "Surface Laptop 3 (Intel 13\")",
@@ -182,16 +189,18 @@ index 0000000000000..4c141fef7a5f4
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "Surface_Laptop_3_1867:1868"),
 +			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "Surface_Laptop_3_1867:1868"),
 +		},
 +		},
-+		.driver_data = (void *)&lid_device_l4D,
++		.driver_data = (void *)lid_device_props_l4D,
 +	},
 +	},
 +	{ }
 +	{ }
 +};
 +};
 +
 +
++struct surface_lid_device {
++	u32 gpe_number;
++};
 +
 +
-+static int surface_lid_enable_wakeup(struct device *dev,
-+				     const struct surface_lid_device *lid,
-+				     bool enable)
++static int surface_lid_enable_wakeup(struct device *dev, bool enable)
 +{
 +{
++	const struct surface_lid_device *lid = dev_get_drvdata(dev);
 +	int action = enable ? ACPI_GPE_ENABLE : ACPI_GPE_DISABLE;
 +	int action = enable ? ACPI_GPE_ENABLE : ACPI_GPE_DISABLE;
 +	acpi_status status;
 +	acpi_status status;
 +
 +
@@ -204,50 +213,52 @@ index 0000000000000..4c141fef7a5f4
 +	return 0;
 +	return 0;
 +}
 +}
 +
 +
-+
 +static int surface_gpe_suspend(struct device *dev)
 +static int surface_gpe_suspend(struct device *dev)
 +{
 +{
-+	const struct surface_lid_device *lid;
-+
-+	lid = dev_get_platdata(dev);
-+	return surface_lid_enable_wakeup(dev, lid, true);
++	return surface_lid_enable_wakeup(dev, true);
 +}
 +}
 +
 +
 +static int surface_gpe_resume(struct device *dev)
 +static int surface_gpe_resume(struct device *dev)
 +{
 +{
-+	const struct surface_lid_device *lid;
-+
-+	lid = dev_get_platdata(dev);
-+	return surface_lid_enable_wakeup(dev, lid, false);
++	return surface_lid_enable_wakeup(dev, false);
 +}
 +}
 +
 +
 +static SIMPLE_DEV_PM_OPS(surface_gpe_pm, surface_gpe_suspend, surface_gpe_resume);
 +static SIMPLE_DEV_PM_OPS(surface_gpe_pm, surface_gpe_suspend, surface_gpe_resume);
 +
 +
-+
 +static int surface_gpe_probe(struct platform_device *pdev)
 +static int surface_gpe_probe(struct platform_device *pdev)
 +{
 +{
-+	const struct surface_lid_device *lid;
++	struct surface_lid_device *lid;
++	u32 gpe_number;
 +	int status;
 +	int status;
 +
 +
-+	lid = dev_get_platdata(&pdev->dev);
-+	if (!lid)
++	status = device_property_read_u32(&pdev->dev, "gpe", &gpe_number);
++	if (status)
 +		return -ENODEV;
 +		return -ENODEV;
 +
 +
-+	status = acpi_mark_gpe_for_wake(NULL, lid->gpe_number);
++	status = acpi_mark_gpe_for_wake(NULL, gpe_number);
 +	if (status) {
 +	if (status) {
 +		dev_err(&pdev->dev, "failed to mark GPE for wake: %d\n", status);
 +		dev_err(&pdev->dev, "failed to mark GPE for wake: %d\n", status);
 +		return -EINVAL;
 +		return -EINVAL;
 +	}
 +	}
 +
 +
-+	status = acpi_enable_gpe(NULL, lid->gpe_number);
++	status = acpi_enable_gpe(NULL, gpe_number);
 +	if (status) {
 +	if (status) {
 +		dev_err(&pdev->dev, "failed to enable GPE: %d\n", status);
 +		dev_err(&pdev->dev, "failed to enable GPE: %d\n", status);
 +		return -EINVAL;
 +		return -EINVAL;
 +	}
 +	}
 +
 +
-+	status = surface_lid_enable_wakeup(&pdev->dev, lid, false);
++	lid = devm_kzalloc(&pdev->dev, sizeof(struct surface_lid_device),
++			   GFP_KERNEL);
++	if (!lid)
++		return -ENOMEM;
++
++	lid->gpe_number = gpe_number;
++	platform_set_drvdata(pdev, lid);
++
++	status = surface_lid_enable_wakeup(&pdev->dev, false);
 +	if (status) {
 +	if (status) {
-+		acpi_disable_gpe(NULL, lid->gpe_number);
++		acpi_disable_gpe(NULL, gpe_number);
++		platform_set_drvdata(pdev, NULL);
 +		return status;
 +		return status;
 +	}
 +	}
 +
 +
@@ -256,12 +267,13 @@ index 0000000000000..4c141fef7a5f4
 +
 +
 +static int surface_gpe_remove(struct platform_device *pdev)
 +static int surface_gpe_remove(struct platform_device *pdev)
 +{
 +{
-+	struct surface_lid_device *lid = dev_get_platdata(&pdev->dev);
++	struct surface_lid_device *lid = dev_get_drvdata(&pdev->dev);
 +
 +
 +	/* restore default behavior without this module */
 +	/* restore default behavior without this module */
-+	surface_lid_enable_wakeup(&pdev->dev, lid, false);
++	surface_lid_enable_wakeup(&pdev->dev, false);
 +	acpi_disable_gpe(NULL, lid->gpe_number);
 +	acpi_disable_gpe(NULL, lid->gpe_number);
 +
 +
++	platform_set_drvdata(pdev, NULL);
 +	return 0;
 +	return 0;
 +}
 +}
 +
 +
@@ -275,14 +287,14 @@ index 0000000000000..4c141fef7a5f4
 +	},
 +	},
 +};
 +};
 +
 +
-+
 +static struct platform_device *surface_gpe_device;
 +static struct platform_device *surface_gpe_device;
 +
 +
 +static int __init surface_gpe_init(void)
 +static int __init surface_gpe_init(void)
 +{
 +{
 +	const struct dmi_system_id *match;
 +	const struct dmi_system_id *match;
-+	const struct surface_lid_device *lid;
++	const struct property_entry *props;
 +	struct platform_device *pdev;
 +	struct platform_device *pdev;
++	struct fwnode_handle *fwnode;
 +	int status;
 +	int status;
 +
 +
 +	match = dmi_first_match(dmi_lid_device_table);
 +	match = dmi_first_match(dmi_lid_device_table);
@@ -291,7 +303,7 @@ index 0000000000000..4c141fef7a5f4
 +		return 0;
 +		return 0;
 +	}
 +	}
 +
 +
-+	lid = match->driver_data;
++	props = match->driver_data;
 +
 +
 +	status = platform_driver_register(&surface_gpe_driver);
 +	status = platform_driver_register(&surface_gpe_driver);
 +	if (status)
 +	if (status)
@@ -303,13 +315,15 @@ index 0000000000000..4c141fef7a5f4
 +		return -ENOMEM;
 +		return -ENOMEM;
 +	}
 +	}
 +
 +
-+	status = platform_device_add_data(pdev, lid, sizeof(*lid));
-+	if (status) {
++	fwnode = fwnode_create_software_node(props, NULL);
++	if (IS_ERR(fwnode)) {
 +		platform_device_put(pdev);
 +		platform_device_put(pdev);
 +		platform_driver_unregister(&surface_gpe_driver);
 +		platform_driver_unregister(&surface_gpe_driver);
-+		return status;
++		return PTR_ERR(fwnode);
 +	}
 +	}
 +
 +
++	pdev->dev.fwnode = fwnode;
++
 +	status = platform_device_add(pdev);
 +	status = platform_device_add(pdev);
 +	if (status) {
 +	if (status) {
 +		platform_device_put(pdev);
 +		platform_device_put(pdev);
@@ -320,33 +334,23 @@ index 0000000000000..4c141fef7a5f4
 +	surface_gpe_device = pdev;
 +	surface_gpe_device = pdev;
 +	return 0;
 +	return 0;
 +}
 +}
++module_init(surface_gpe_init);
 +
 +
 +static void __exit surface_gpe_exit(void)
 +static void __exit surface_gpe_exit(void)
 +{
 +{
 +	if (!surface_gpe_device)
 +	if (!surface_gpe_device)
 +		return;
 +		return;
 +
 +
++	fwnode_remove_software_node(surface_gpe_device->dev.fwnode);
 +	platform_device_unregister(surface_gpe_device);
 +	platform_device_unregister(surface_gpe_device);
 +	platform_driver_unregister(&surface_gpe_driver);
 +	platform_driver_unregister(&surface_gpe_driver);
 +}
 +}
-+
-+module_init(surface_gpe_init);
 +module_exit(surface_gpe_exit);
 +module_exit(surface_gpe_exit);
 +
 +
 +MODULE_AUTHOR("Maximilian Luz <luzmaximilian@gmail.com>");
 +MODULE_AUTHOR("Maximilian Luz <luzmaximilian@gmail.com>");
 +MODULE_DESCRIPTION("Surface GPE/Lid Driver");
 +MODULE_DESCRIPTION("Surface GPE/Lid Driver");
 +MODULE_LICENSE("GPL");
 +MODULE_LICENSE("GPL");
-+
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfacePro:*");
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfacePro4:*");
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfacePro6:*");
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfacePro7:*");
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfaceBook:*");
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfaceBook2:*");
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfaceBook3:*");
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfaceLaptop:*");
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfaceLaptop2:*");
-+MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurfaceLaptop3:*");
++MODULE_ALIAS("dmi:*:svnMicrosoftCorporation:pnSurface*:*");
 -- 
 -- 
 2.28.0
 2.28.0
 
 

+ 6 - 6
pkg/arch/kernel/PKGBUILD

@@ -40,12 +40,12 @@ sha256sums=('d82def15bf6c77f1a420be2fd2609f67b08e17795952fe014cb888259181feb4'
             '181330a9cf4517abbbe29b93165bc859ad8ca14a43582f4e1d69aae2b5ecc2c9'
             '181330a9cf4517abbbe29b93165bc859ad8ca14a43582f4e1d69aae2b5ecc2c9'
             '1f65b3f042db87952468e99be3f1f688f62dda18401bf9716cb734f5571288b5'
             '1f65b3f042db87952468e99be3f1f688f62dda18401bf9716cb734f5571288b5'
             '8dbaa21d2c03621b0c5d96c4fbcc7a839bea5a34a5f2279a409c3b404756e753'
             '8dbaa21d2c03621b0c5d96c4fbcc7a839bea5a34a5f2279a409c3b404756e753'
-            'a4077505868f3ce12601948e01c42e6486d022681019702238c5ef2f73ce7b41'
-            'db1a236a5f3ee524ae13c410561962a663660b33156d79a60bd71b4b5f094677'
-            '984be5bde800d60d1c64c7018a65b0931cd74335919b393429646685e18ce7bc'
-            '91c5bd34b2d9bbb981720296e81fd47914c327c1fc83a3501471f298a7b27c11'
-            '14bd1b3e74af2b6e60afae9bc008d59f789ffd4d1e9e9721ed0e950c2d48585a'
-            'b07f659bdbf60a1992657cfc581fa3b4a97d1caca2c26d54f252f722e8ae6c46')
+            '119fb1a8af1dd4f96cd6ce111be8b97c6269a47ee06ae4c2f7eef41ec20729aa'
+            '313546bef7d4b3744ec64652411e67ea3460e47c8036c6b616f510d68a1deb55'
+            '4459f22b346b14bca1f856666e92e2c771d0d844b8c1a709a7ab10e22564a075'
+            '951710d7a544a8bd6f8750ead837a62b4b5f3cb7751d703208f74defe75eec95'
+            '1d1f9a5c527f87d47fb417b4968d71e1b3cc57abb673a39c8248c3681d2cc978'
+            '5a8be55468498b00c77fe7c777d750a86ee7379c1a0baeaa6d4e14d6fc26c5d4')
 
 
 
 
 export KBUILD_BUILD_HOST=archlinux
 export KBUILD_BUILD_HOST=archlinux

部分文件因文件數量過多而無法顯示