From c7caeec62c70598c29189bf70c59e6de43d4f72c Mon Sep 17 00:00:00 2001 From: "Tsuchiya Yuto (kitakar5525)" Date: Sat, 16 May 2020 18:11:38 +0900 Subject: [PATCH] v4.19: update patches Update patches via linux-surface/kernel@fccd0a489ecd04. Updated patches: pick ea097eb Add secureboot pre-signing to the kernel pick b50d617 surface3-power pick 71ab90b surface3-spi pick f109cbf surface3-oemb pick c924fb6 surface-buttons f 1a44682d3bea Input: soc_button_array - fix Wdiscarded-qualifiers for kernels below 4.20 pick 91a78cc surface-sam pick 263250b suspend pick 5ae0ab6 ipts f a5db77a8ad47 ipts: Simplify feedback implementation f 22c959edeaf2 ipts: Remove no_feedback quirk f 21a71ef429b4 ipts: Remove quirk implementation f f28c0f7b64aa ipts: companion: improve comment for hardware id on SP4 pick df219c0 surface-lte pick 3484574 ioremap_uc pick 4f727ac wifi f f86788d75e54 Revert "BACKPORT: wireless/mwifiex: Fix S0ix / suspend" f 169bb34570af mwifiex: pcie: Use dev_get_drvdata f 6e9eefbca821 mwifiex_pcie: remove()/probe() card on suspend()/resume() f 3619cec06fdc mwifiex_pcie: disable parent bridge_d3 f fda9d444d14d mwifiex: sta_cmd: do not enable auto_ds by default f 74ab58241354 mwifiex: sta_cmd: add comment for not enabling ps_mode by default Note: almost all part of the ioremap_uc patch is now upstream. So, the remaining unupstreamed patch is now only linux-surface/kernel@de067f5c120969 ("docs: driver-model: add devm_ioremap_uc") Signed-off-by: Tsuchiya Yuto (kitakar5525) --- patches/4.19/0001-surface3-power.patch | 4 +- patches/4.19/0002-surface3-spi.patch | 4 +- patches/4.19/0003-surface3-oemb.patch | 4 +- patches/4.19/0004-surface-buttons.patch | 16 +- patches/4.19/0005-surface-sam.patch | 4 +- patches/4.19/0006-suspend.patch | 12 +- patches/4.19/0007-ipts.patch | 254 +++++++----------------- patches/4.19/0008-surface-lte.patch | 8 +- patches/4.19/0009-ioremap_uc.patch | 81 +------- patches/4.19/0010-wifi.patch | 108 ++++++---- 10 files changed, 165 insertions(+), 330 deletions(-) diff --git a/patches/4.19/0001-surface3-power.patch b/patches/4.19/0001-surface3-power.patch index 21e97cd67..20048bd1f 100644 --- a/patches/4.19/0001-surface3-power.patch +++ b/patches/4.19/0001-surface3-power.patch @@ -1,4 +1,4 @@ -From b50d617e2eee9791180395ca60841f20442c5b95 Mon Sep 17 00:00:00 2001 +From a2b33dd39478cc3c162c3e76a2a0bd888be6b019 Mon Sep 17 00:00:00 2001 From: Maximilian Luz Date: Sat, 28 Sep 2019 18:00:43 +0200 Subject: [PATCH 01/10] surface3-power @@ -651,5 +651,5 @@ index 000000000000..e0af01a60302 +MODULE_DESCRIPTION("mshw0011 driver"); +MODULE_LICENSE("GPL v2"); -- -2.26.0 +2.26.2 diff --git a/patches/4.19/0002-surface3-spi.patch b/patches/4.19/0002-surface3-spi.patch index 17b352da5..e8313795c 100644 --- a/patches/4.19/0002-surface3-spi.patch +++ b/patches/4.19/0002-surface3-spi.patch @@ -1,4 +1,4 @@ -From 71ab90b1a4fde2bcf91d5cb7cb278c792c89f653 Mon Sep 17 00:00:00 2001 +From 06e4d51c83a77d54ca5b1d402fb57554c51d3926 Mon Sep 17 00:00:00 2001 From: kitakar5525 <34676735+kitakar5525@users.noreply.github.com> Date: Fri, 6 Dec 2019 23:10:30 +0900 Subject: [PATCH 02/10] surface3-spi @@ -59,5 +59,5 @@ index 5db0f1c4ef38..8935ddbc2357 100644 } -- -2.26.0 +2.26.2 diff --git a/patches/4.19/0003-surface3-oemb.patch b/patches/4.19/0003-surface3-oemb.patch index 26d09d22b..3c72bbec4 100644 --- a/patches/4.19/0003-surface3-oemb.patch +++ b/patches/4.19/0003-surface3-oemb.patch @@ -1,4 +1,4 @@ -From f109cbf36e5acdf7829d19b642e4a23ef6476ce4 Mon Sep 17 00:00:00 2001 +From c9fd73ef014ee91d0cda46c2c456ae579ba3b4e0 Mon Sep 17 00:00:00 2001 From: Chih-Wei Huang Date: Tue, 18 Sep 2018 11:01:37 +0800 Subject: [PATCH 03/10] surface3-oemb @@ -67,5 +67,5 @@ index 91bb99b69601..8418938b32ad 100644 }; -- -2.26.0 +2.26.2 diff --git a/patches/4.19/0004-surface-buttons.patch b/patches/4.19/0004-surface-buttons.patch index 937670a41..6ed0d3744 100644 --- a/patches/4.19/0004-surface-buttons.patch +++ b/patches/4.19/0004-surface-buttons.patch @@ -1,13 +1,13 @@ -From c924fb68b7aa19fd8947991f128c56296e9b678d Mon Sep 17 00:00:00 2001 +From 25c1108f70fde7cca28e5f851427108737443088 Mon Sep 17 00:00:00 2001 From: Maximilian Luz Date: Sat, 27 Jul 2019 17:51:37 +0200 Subject: [PATCH 04/10] surface-buttons --- drivers/input/misc/Kconfig | 6 +- - drivers/input/misc/soc_button_array.c | 112 +++++++++++++++++++--- + drivers/input/misc/soc_button_array.c | 114 +++++++++++++++++++--- drivers/platform/x86/surfacepro3_button.c | 47 +++++++++ - 3 files changed, 150 insertions(+), 15 deletions(-) + 3 files changed, 151 insertions(+), 16 deletions(-) diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index ca59a2be9bc5..ea69610370e8 100644 @@ -28,7 +28,7 @@ index ca59a2be9bc5..ea69610370e8 100644 To compile this driver as a module, choose M here: the module will be called soc_button_array. diff --git a/drivers/input/misc/soc_button_array.c b/drivers/input/misc/soc_button_array.c -index 55cd6e0b409c..5983733d78dd 100644 +index 55cd6e0b409c..c564ea99f47d 100644 --- a/drivers/input/misc/soc_button_array.c +++ b/drivers/input/misc/soc_button_array.c @@ -29,6 +29,11 @@ struct soc_button_info { @@ -100,15 +100,17 @@ index 55cd6e0b409c..5983733d78dd 100644 } error = gpiod_count(dev, NULL); -@@ -357,7 +377,7 @@ static int soc_button_probe(struct platform_device *pdev) +@@ -357,8 +377,8 @@ static int soc_button_probe(struct platform_device *pdev) if (!priv->children[0] && !priv->children[1]) return -ENODEV; - if (!id->driver_data) +- devm_kfree(dev, button_info); + if (!device_data || !device_data->button_info) - devm_kfree(dev, button_info); ++ devm_kfree(dev, (void *)button_info); return 0; + } @@ -368,7 +388,7 @@ static int soc_button_probe(struct platform_device *pdev) * is defined in section 2.8.7.2 of "Windows ACPI Design Guide for SoC * Platforms" @@ -270,5 +272,5 @@ index 1b491690ce07..96627627060e 100644 if (!button) return -ENOMEM; -- -2.26.0 +2.26.2 diff --git a/patches/4.19/0005-surface-sam.patch b/patches/4.19/0005-surface-sam.patch index 2df8b22c4..d1e9a8a8c 100644 --- a/patches/4.19/0005-surface-sam.patch +++ b/patches/4.19/0005-surface-sam.patch @@ -1,4 +1,4 @@ -From 91a78cc8ef8f5b822dc5e0367d11321e64251667 Mon Sep 17 00:00:00 2001 +From 09f283be44830292c64b4af888e3ddc9fff46c11 Mon Sep 17 00:00:00 2001 From: qzed Date: Mon, 26 Aug 2019 01:15:40 +0200 Subject: [PATCH 05/10] surface-sam @@ -7548,5 +7548,5 @@ index c66a04d24f1d..6b48fdfb2005 100644 if (!ctrl->serdev) return -ENODEV; -- -2.26.0 +2.26.2 diff --git a/patches/4.19/0006-suspend.patch b/patches/4.19/0006-suspend.patch index 53cbfe54e..a03b89c24 100644 --- a/patches/4.19/0006-suspend.patch +++ b/patches/4.19/0006-suspend.patch @@ -1,4 +1,4 @@ -From 263250b920776cdc295f6317c028191db6623f53 Mon Sep 17 00:00:00 2001 +From 9fbb880aaed6b854547a6019cdfd2e78013f8fbb Mon Sep 17 00:00:00 2001 From: kitakar5525 <34676735+kitakar5525@users.noreply.github.com> Date: Sat, 28 Sep 2019 17:48:21 +0200 Subject: [PATCH 06/10] suspend @@ -12,7 +12,7 @@ Subject: [PATCH 06/10] suspend 5 files changed, 162 insertions(+), 6 deletions(-) diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c -index a8132e8d72bb..acb0d5bb3a8d 100644 +index d5359c7c811a..04e1568b145a 100644 --- a/drivers/nvme/host/core.c +++ b/drivers/nvme/host/core.c @@ -1055,15 +1055,15 @@ static struct nvme_id_ns *nvme_identify_ns(struct nvme_ctrl *ctrl, @@ -59,7 +59,7 @@ index a8132e8d72bb..acb0d5bb3a8d 100644 int nvme_set_queue_count(struct nvme_ctrl *ctrl, int *count) { u32 q_count = (*count - 1) | ((*count - 1) << 16); -@@ -3590,6 +3608,18 @@ static void nvme_free_ctrl(struct device *dev) +@@ -3601,6 +3619,18 @@ static void nvme_free_ctrl(struct device *dev) nvme_put_subsystem(subsys); } @@ -266,10 +266,10 @@ index 3c68a5b35ec1..0cc7bea4eb70 100644 .err_handler = &nvme_err_handler, }; diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c -index 1117b25fbe0b..5d7d30f72ea8 100644 +index db2efa219028..0d1ef41abea0 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c -@@ -1176,6 +1176,26 @@ static int pcie_aspm_get_policy(char *buffer, const struct kernel_param *kp) +@@ -1180,6 +1180,26 @@ static int pcie_aspm_get_policy(char *buffer, const struct kernel_param *kp) module_param_call(policy, pcie_aspm_set_policy, pcie_aspm_get_policy, NULL, 0644); @@ -312,5 +312,5 @@ index b1f297f4b7b0..94ab2fc800d3 100644 #ifdef CONFIG_PCIEAER -- -2.26.0 +2.26.2 diff --git a/patches/4.19/0007-ipts.patch b/patches/4.19/0007-ipts.patch index e23595fd4..a84765738 100644 --- a/patches/4.19/0007-ipts.patch +++ b/patches/4.19/0007-ipts.patch @@ -1,4 +1,4 @@ -From 5ae0ab65b746c3298aadabadd1ad5bbbac75de94 Mon Sep 17 00:00:00 2001 +From ec6ee78e1b8700139edd50e62e3815d12e5a889e Mon Sep 17 00:00:00 2001 From: Maximilian Luz Date: Sat, 28 Sep 2019 17:58:17 +0200 Subject: [PATCH 07/10] ipts @@ -24,15 +24,15 @@ Subject: [PATCH 07/10] ipts drivers/misc/Makefile | 1 + drivers/misc/ipts/Kconfig | 12 + drivers/misc/ipts/Makefile | 19 + - drivers/misc/ipts/companion.c | 230 ++++ - drivers/misc/ipts/companion.h | 26 + + drivers/misc/ipts/companion.c | 211 ++++ + drivers/misc/ipts/companion.h | 25 + drivers/misc/ipts/companion/Kconfig | 8 + drivers/misc/ipts/companion/Makefile | 2 + - drivers/misc/ipts/companion/ipts-surface.c | 224 ++++ + drivers/misc/ipts/companion/ipts-surface.c | 157 +++ drivers/misc/ipts/dbgfs.c | 277 +++++ drivers/misc/ipts/gfx.c | 180 ++++ drivers/misc/ipts/gfx.h | 25 + - drivers/misc/ipts/hid.c | 502 +++++++++ + drivers/misc/ipts/hid.c | 469 +++++++++ drivers/misc/ipts/hid.h | 21 + drivers/misc/ipts/ipts.c | 62 ++ drivers/misc/ipts/ipts.h | 172 +++ @@ -40,10 +40,10 @@ Subject: [PATCH 07/10] ipts drivers/misc/ipts/kernel.h | 17 + drivers/misc/ipts/mei-msgs.h | 901 ++++++++++++++++ drivers/misc/ipts/mei.c | 238 +++++ - drivers/misc/ipts/msg-handler.c | 396 +++++++ + drivers/misc/ipts/msg-handler.c | 405 +++++++ drivers/misc/ipts/msg-handler.h | 28 + - drivers/misc/ipts/params.c | 46 + - drivers/misc/ipts/params.h | 26 + + drivers/misc/ipts/params.c | 42 + + drivers/misc/ipts/params.h | 25 + drivers/misc/ipts/resource.c | 291 ++++++ drivers/misc/ipts/resource.h | 26 + drivers/misc/ipts/sensor-regs.h | 834 +++++++++++++++ @@ -51,10 +51,10 @@ Subject: [PATCH 07/10] ipts drivers/misc/mei/hw-me-regs.h | 1 + drivers/misc/mei/pci-me.c | 1 + include/linux/ipts-binary.h | 140 +++ - include/linux/ipts-companion.h | 30 + + include/linux/ipts-companion.h | 29 + include/linux/ipts-gfx.h | 86 ++ - include/linux/ipts.h | 20 + - 50 files changed, 6802 insertions(+), 22 deletions(-) + include/linux/ipts.h | 19 + + 50 files changed, 6684 insertions(+), 22 deletions(-) create mode 100644 drivers/gpu/drm/i915/intel_ipts.c create mode 100644 drivers/gpu/drm/i915/intel_ipts.h create mode 100644 drivers/misc/ipts/Kconfig @@ -1359,10 +1359,10 @@ index 000000000000..bb3982f48afc +obj-y += companion/ diff --git a/drivers/misc/ipts/companion.c b/drivers/misc/ipts/companion.c new file mode 100644 -index 000000000000..c8199d8be5d6 +index 000000000000..8f66b852f137 --- /dev/null +++ b/drivers/misc/ipts/companion.c -@@ -0,0 +1,230 @@ +@@ -0,0 +1,211 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * @@ -1574,31 +1574,12 @@ index 000000000000..c8199d8be5d6 + return ret; + +} -+ -+unsigned int ipts_get_quirks(void) -+{ -+ unsigned int ret; -+ -+ // Make sure that access to the companion is synchronized -+ mutex_lock(&ipts_companion_lock); -+ -+ // If the companion is ignored, or doesn't exist, assume that -+ // the device doesn't have any quirks -+ if (ipts_modparams.ignore_companion || ipts_companion == NULL) -+ ret = IPTS_QUIRK_NONE; -+ else -+ ret = ipts_companion->get_quirks(ipts_companion); -+ -+ mutex_unlock(&ipts_companion_lock); -+ -+ return ret; -+} diff --git a/drivers/misc/ipts/companion.h b/drivers/misc/ipts/companion.h new file mode 100644 -index 000000000000..bb3368b41a38 +index 000000000000..7a1e4b388c40 --- /dev/null +++ b/drivers/misc/ipts/companion.h -@@ -0,0 +1,26 @@ +@@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * @@ -1616,7 +1597,6 @@ index 000000000000..bb3368b41a38 +#include "ipts.h" + +bool ipts_companion_available(void); -+unsigned int ipts_get_quirks(void); + +int ipts_request_firmware(const struct firmware **fw, const char *name, + struct device *device); @@ -1649,10 +1629,10 @@ index 000000000000..b37f2f59937a +obj-$(CONFIG_INTEL_IPTS_SURFACE)+= ipts-surface.o diff --git a/drivers/misc/ipts/companion/ipts-surface.c b/drivers/misc/ipts/companion/ipts-surface.c new file mode 100644 -index 000000000000..1a151538b898 +index 000000000000..a717dfcdfeba --- /dev/null +++ b/drivers/misc/ipts/companion/ipts-surface.c -@@ -0,0 +1,224 @@ +@@ -0,0 +1,157 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * @@ -1681,53 +1661,6 @@ index 000000000000..1a151538b898 + MODULE_FIRMWARE("intel/ipts/" X "/vendor_desc.bin"); \ + MODULE_FIRMWARE("intel/ipts/" X "/vendor_kernel.bin") + -+struct ipts_surface_data { -+ const char *hid; -+ unsigned int quirks; -+}; -+ -+// Surface Book 1 / Surface Studio -+static const struct ipts_surface_data ipts_surface_mshw0076 = { -+ .hid = "MSHW0076", -+ .quirks = IPTS_QUIRK_NO_FEEDBACK, -+}; -+ -+// Surface Pro 4 -+static const struct ipts_surface_data ipts_surface_mshw0078 = { -+ .hid = "MSHW0078", -+ .quirks = IPTS_QUIRK_NO_FEEDBACK, -+}; -+ -+// Surface Laptop 1 / 2 -+static const struct ipts_surface_data ipts_surface_mshw0079 = { -+ .hid = "MSHW0079", -+ .quirks = IPTS_QUIRK_NONE, -+}; -+ -+// Surface Pro 5 / 6 -+static const struct ipts_surface_data ipts_surface_mshw0101 = { -+ .hid = "MSHW0101", -+ .quirks = IPTS_QUIRK_NONE, -+}; -+ -+// Surface Book 2 15" -+static const struct ipts_surface_data ipts_surface_mshw0102 = { -+ .hid = "MSHW0102", -+ .quirks = IPTS_QUIRK_NONE, -+}; -+ -+// Unknown, but firmware exists -+static const struct ipts_surface_data ipts_surface_mshw0103 = { -+ .hid = "MSHW0103", -+ .quirks = IPTS_QUIRK_NONE, -+}; -+ -+// Surface Book 2 13" -+static const struct ipts_surface_data ipts_surface_mshw0137 = { -+ .hid = "MSHW0137", -+ .quirks = IPTS_QUIRK_NONE, -+}; -+ +/* + * Checkpatch complains about the following lines because it sees them as + * header files mixed with .c files. However, forward declaration is perfectly @@ -1774,7 +1707,6 @@ index 000000000000..1a151538b898 +static struct ipts_companion ipts_surface_companion = { + .firmware_request = &ipts_surface_request_firmware, + .firmware_config = ipts_surface_fw_config, -+ .get_quirks = &ipts_surface_get_quirks, + .name = "ipts_surface", +}; + @@ -1783,44 +1715,26 @@ index 000000000000..1a151538b898 + struct device *device) +{ + char fw_path[MAX_IOCL_FILE_PATH_LEN]; -+ struct ipts_surface_data *data; + + if (companion == NULL || companion->data == NULL) + return -ENOENT; + -+ data = (struct ipts_surface_data *)companion->data; -+ + snprintf(fw_path, MAX_IOCL_FILE_PATH_LEN, IPTS_SURFACE_FW_PATH_FMT, -+ data->hid, name); ++ (const char *)companion->data, name); + return request_firmware(fw, fw_path, device); +} + -+unsigned int ipts_surface_get_quirks(struct ipts_companion *companion) -+{ -+ struct ipts_surface_data *data; -+ -+ // In case something went wrong, assume that the -+ // device doesn't have any quirks -+ if (companion == NULL || companion->data == NULL) -+ return IPTS_QUIRK_NONE; -+ -+ data = (struct ipts_surface_data *)companion->data; -+ -+ return data->quirks; -+} -+ +static int ipts_surface_probe(struct platform_device *pdev) +{ + int r; -+ const struct ipts_surface_data *data = -+ acpi_device_get_match_data(&pdev->dev); ++ struct acpi_device *adev = ACPI_COMPANION(&pdev->dev); + -+ if (!data) { ++ if (!adev) { + dev_err(&pdev->dev, "Unable to find ACPI info for device\n"); + return -ENODEV; + } + -+ ipts_surface_companion.data = (void *)data; ++ ipts_surface_companion.data = (void *)acpi_device_hid(adev); + + r = ipts_add_companion(&ipts_surface_companion); + if (r) { @@ -1844,13 +1758,13 @@ index 000000000000..1a151538b898 +} + +static const struct acpi_device_id ipts_surface_acpi_match[] = { -+ { "MSHW0076", (unsigned long)&ipts_surface_mshw0076 }, -+ { "MSHW0078", (unsigned long)&ipts_surface_mshw0078 }, -+ { "MSHW0079", (unsigned long)&ipts_surface_mshw0079 }, -+ { "MSHW0101", (unsigned long)&ipts_surface_mshw0101 }, -+ { "MSHW0102", (unsigned long)&ipts_surface_mshw0102 }, -+ { "MSHW0103", (unsigned long)&ipts_surface_mshw0103 }, -+ { "MSHW0137", (unsigned long)&ipts_surface_mshw0137 }, ++ { "MSHW0076", 0 }, // Surface Book 1 / Surface Studio ++ { "MSHW0078", 0 }, // some Surface Pro 4 ++ { "MSHW0079", 0 }, // Surface Laptop 1 / 2 ++ { "MSHW0101", 0 }, // Surface Book 2 15" ++ { "MSHW0102", 0 }, // Surface Pro 5 / 6 ++ { "MSHW0103", 0 }, // some Surface Pro 4 ++ { "MSHW0137", 0 }, // Surface Book 2 + { }, +}; +MODULE_DEVICE_TABLE(acpi, ipts_surface_acpi_match); @@ -1875,7 +1789,6 @@ index 000000000000..1a151538b898 +IPTS_SURFACE_FIRMWARE("MSHW0101"); +IPTS_SURFACE_FIRMWARE("MSHW0102"); +IPTS_SURFACE_FIRMWARE("MSHW0103"); -+ +IPTS_SURFACE_FIRMWARE("MSHW0137"); diff --git a/drivers/misc/ipts/dbgfs.c b/drivers/misc/ipts/dbgfs.c new file mode 100644 @@ -2379,10 +2292,10 @@ index 000000000000..2880e122e9f9 +#endif // _IPTS_GFX_H_ diff --git a/drivers/misc/ipts/hid.c b/drivers/misc/ipts/hid.c new file mode 100644 -index 000000000000..1a487b633fdd +index 000000000000..1b7ad2a774a8 --- /dev/null +++ b/drivers/misc/ipts/hid.c -@@ -0,0 +1,502 @@ +@@ -0,0 +1,469 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * @@ -2741,10 +2654,11 @@ index 000000000000..1a487b633fdd +static int handle_outputs(struct ipts_info *ipts, int parallel_idx) +{ + struct kernel_output_buffer_header *out_buf_hdr; -+ struct ipts_buffer_info *output_buf, *fb_buf = NULL; ++ struct ipts_buffer_info *output_buf; + u8 *input_report, *payload; -+ u32 tr_id; -+ int i, payload_size, ret = 0, header_size; ++ u8 tr_id; ++ int i, payload_size, header_size; ++ bool send_feedback = false; + + header_size = sizeof(struct kernel_output_buffer_header); + output_buf = ipts_get_output_buffers_by_parallel_id(ipts, @@ -2757,6 +2671,9 @@ index 000000000000..1a487b633fdd + if (out_buf_hdr->length < header_size) + continue; + ++ tr_id = *(u8 *)&out_buf_hdr->hid_private_data.transaction_id; ++ send_feedback = true; ++ + payload_size = out_buf_hdr->length - header_size; + payload = out_buf_hdr->data; + @@ -2779,12 +2696,7 @@ index 000000000000..1a487b633fdd + break; + } + case OUTPUT_BUFFER_PAYLOAD_FEEDBACK_BUFFER: { -+ // send feedback data for raw data mode -+ fb_buf = ipts_get_feedback_buffer(ipts, parallel_idx); -+ tr_id = out_buf_hdr->hid_private_data.transaction_id; -+ -+ memcpy(fb_buf->addr, payload, payload_size); -+ ++ // Ignored + break; + } + case OUTPUT_BUFFER_PAYLOAD_ERROR: { @@ -2814,42 +2726,10 @@ index 000000000000..1a487b633fdd + } + } + -+ /* -+ * XXX: Calling the "ipts_send_feedback" function repeatedly seems to -+ * be what is causing touch to crash (found by sebanc, see the link -+ * below for the comment) on some models, especially on Surface Pro 4 -+ * and Surface Book 1. -+ * The most desirable fix could be done by raising IPTS GuC priority. -+ * Until we find a better solution, use this workaround. -+ * -+ * The decision which devices have no_feedback enabled by default is -+ * made by the companion driver. If no companion driver was loaded, -+ * no_feedback is disabled and the default behaviour is used. -+ * -+ * Link to the comment where sebanc found this workaround: -+ * https://github.com/jakeday/linux-surface/issues/374#issuecomment-508234110 -+ * (Touch and pen issue persists · Issue #374 · jakeday/linux-surface) -+ * -+ * Link to the usage from kitakar5525 who made this change: -+ * https://github.com/jakeday/linux-surface/issues/374#issuecomment-517289171 -+ * (Touch and pen issue persists · Issue #374 · jakeday/linux-surface) -+ */ -+ if (fb_buf) { -+ // A negative value means "decide by dmi table" -+ if (ipts_modparams.no_feedback < 0) { -+ if (ipts_get_quirks() & IPTS_QUIRK_NO_FEEDBACK) -+ ipts_modparams.no_feedback = true; -+ else -+ ipts_modparams.no_feedback = false; -+ } + -+ if (ipts_modparams.no_feedback) -+ return 0; + -+ ret = ipts_send_feedback(ipts, parallel_idx, tr_id); -+ if (ret) -+ return ret; -+ } ++ if (send_feedback) ++ return ipts_send_feedback(ipts, parallel_idx, tr_id); + + return 0; +} @@ -5387,10 +5267,10 @@ index 000000000000..03b5d747a728 +MODULE_LICENSE("GPL"); diff --git a/drivers/misc/ipts/msg-handler.c b/drivers/misc/ipts/msg-handler.c new file mode 100644 -index 000000000000..b2b382ea4675 +index 000000000000..9431b1dfc6e0 --- /dev/null +++ b/drivers/misc/ipts/msg-handler.c -@@ -0,0 +1,396 @@ +@@ -0,0 +1,405 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * @@ -5435,16 +5315,24 @@ index 000000000000..b2b382ea4675 +int ipts_send_feedback(struct ipts_info *ipts, int buffer_idx, + u32 transaction_id) +{ -+ int cmd_len = sizeof(struct touch_sensor_feedback_ready_cmd_data); -+ struct touch_sensor_feedback_ready_cmd_data fb_ready_cmd; ++ struct ipts_buffer_info feedback_buffer; ++ struct touch_feedback_hdr *feedback; ++ struct touch_sensor_feedback_ready_cmd_data cmd; + -+ memset(&fb_ready_cmd, 0, cmd_len); ++ feedback_buffer = ipts->resource.feedback_buffer[buffer_idx]; ++ feedback = (struct touch_feedback_hdr *)feedback_buffer.addr; + -+ fb_ready_cmd.feedback_index = buffer_idx; -+ fb_ready_cmd.transaction_id = transaction_id; ++ memset(feedback, 0, sizeof(struct touch_feedback_hdr)); ++ memset(&cmd, 0, sizeof(struct touch_sensor_feedback_ready_cmd_data)); ++ ++ feedback->feedback_cmd_type = TOUCH_FEEDBACK_CMD_TYPE_NONE; ++ feedback->buffer_id = transaction_id; ++ ++ cmd.feedback_index = buffer_idx; ++ cmd.transaction_id = transaction_id; + + return ipts_handle_cmd(ipts, TOUCH_SENSOR_FEEDBACK_READY_CMD, -+ &fb_ready_cmd, cmd_len); ++ &cmd, sizeof(struct touch_sensor_feedback_ready_cmd_data)); +} + +int ipts_send_sensor_quiesce_io_cmd(struct ipts_info *ipts) @@ -5732,6 +5620,7 @@ index 000000000000..b2b382ea4675 + } + case TOUCH_SENSOR_FEEDBACK_READY_RSP: { + if (rsp_status != TOUCH_STATUS_COMPAT_CHECK_FAIL && ++ rsp_status != TOUCH_STATUS_INVALID_PARAMS && + rsp_status != 0) { + rsp_failed(ipts, cmd, rsp_status); + break; @@ -5823,10 +5712,10 @@ index 000000000000..eca4238adf4b +#endif /* _IPTS_MSG_HANDLER_H */ diff --git a/drivers/misc/ipts/params.c b/drivers/misc/ipts/params.c new file mode 100644 -index 000000000000..93b19cbf4786 +index 000000000000..3ea76ca8342a --- /dev/null +++ b/drivers/misc/ipts/params.c -@@ -0,0 +1,46 @@ +@@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * @@ -5847,7 +5736,6 @@ index 000000000000..93b19cbf4786 + .ignore_fw_fallback = false, + .ignore_config_fallback = false, + .ignore_companion = false, -+ .no_feedback = -1, + + .debug = false, + .debug_thread = false, @@ -5862,9 +5750,6 @@ index 000000000000..93b19cbf4786 +IPTS_PARAM(ignore_companion, bool, 0400, + "Don't use a companion driver to load firmware. (default: false)" +); -+IPTS_PARAM(no_feedback, int, 0644, -+ "Disable sending feedback to ME (can prevent crashes on Skylake). (-1=auto [default], 0=false, 1=true)" -+); + +IPTS_PARAM(debug, bool, 0400, + "Enable IPTS debugging output. (default: false)" @@ -5875,10 +5760,10 @@ index 000000000000..93b19cbf4786 + diff --git a/drivers/misc/ipts/params.h b/drivers/misc/ipts/params.h new file mode 100644 -index 000000000000..4d9d2bca5ede +index 000000000000..c20546bacb08 --- /dev/null +++ b/drivers/misc/ipts/params.h -@@ -0,0 +1,26 @@ +@@ -0,0 +1,25 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * @@ -5896,7 +5781,6 @@ index 000000000000..4d9d2bca5ede + bool ignore_fw_fallback; + bool ignore_config_fallback; + bool ignore_companion; -+ int no_feedback; + + bool debug; + bool debug_thread; @@ -7103,7 +6987,7 @@ index 000000000000..ef73d28db47c + +#endif // _IPTS_STATE_H_ diff --git a/drivers/misc/mei/hw-me-regs.h b/drivers/misc/mei/hw-me-regs.h -index d80372d21c14..6e14bde0a819 100644 +index 2ac1dc5104b7..5daa857a4938 100644 --- a/drivers/misc/mei/hw-me-regs.h +++ b/drivers/misc/mei/hw-me-regs.h @@ -119,6 +119,7 @@ @@ -7115,7 +6999,7 @@ index d80372d21c14..6e14bde0a819 100644 #define MEI_DEV_ID_SPT_H_2 0xA13B /* Sunrise Point H 2 */ diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c -index 3498c10b8263..4442c6366f0d 100644 +index b4bf12f27caf..34f4338fa641 100644 --- a/drivers/misc/mei/pci-me.c +++ b/drivers/misc/mei/pci-me.c @@ -86,6 +86,7 @@ static const struct pci_device_id mei_me_pci_tbl[] = { @@ -7274,10 +7158,10 @@ index 000000000000..98b54d74ff88 +#endif // IPTS_BINARY_H diff --git a/include/linux/ipts-companion.h b/include/linux/ipts-companion.h new file mode 100644 -index 000000000000..1f606a5fb5f2 +index 000000000000..de31f5e0b186 --- /dev/null +++ b/include/linux/ipts-companion.h -@@ -0,0 +1,30 @@ +@@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * @@ -7294,7 +7178,6 @@ index 000000000000..1f606a5fb5f2 +#include + +struct ipts_companion { -+ unsigned int (*get_quirks)(struct ipts_companion *companion); + int (*firmware_request)(struct ipts_companion *companion, + const struct firmware **fw, + const char *name, struct device *device); @@ -7402,10 +7285,10 @@ index 000000000000..cb9d98fe96e4 +#endif // IPTS_GFX_H diff --git a/include/linux/ipts.h b/include/linux/ipts.h new file mode 100644 -index 000000000000..bfa8e1375926 +index 000000000000..f229a3436851 --- /dev/null +++ b/include/linux/ipts.h -@@ -0,0 +1,20 @@ +@@ -0,0 +1,19 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * @@ -7423,9 +7306,8 @@ index 000000000000..bfa8e1375926 +#define MAX_IOCL_FILE_PATH_LEN 256 + +#define IPTS_QUIRK_NONE 0 -+#define IPTS_QUIRK_NO_FEEDBACK BIT(0) + +#endif // IPTS_H -- -2.26.0 +2.26.2 diff --git a/patches/4.19/0008-surface-lte.patch b/patches/4.19/0008-surface-lte.patch index c66354864..ade2a0f36 100644 --- a/patches/4.19/0008-surface-lte.patch +++ b/patches/4.19/0008-surface-lte.patch @@ -1,4 +1,4 @@ -From df219c06e6a1785faa283682974c41ba61bfce69 Mon Sep 17 00:00:00 2001 +From 4141869e43f1bf06fd3dfa96b506148373171f10 Mon Sep 17 00:00:00 2001 From: Maximilian Luz Date: Sat, 28 Sep 2019 18:02:03 +0200 Subject: [PATCH 08/10] surface-lte @@ -8,10 +8,10 @@ Subject: [PATCH 08/10] surface-lte 1 file changed, 1 insertion(+) diff --git a/drivers/usb/serial/qcserial.c b/drivers/usb/serial/qcserial.c -index 613f91add03d..e1428222dd73 100644 +index ce0401d3137f..b0c190cd46c9 100644 --- a/drivers/usb/serial/qcserial.c +++ b/drivers/usb/serial/qcserial.c -@@ -177,6 +177,7 @@ static const struct usb_device_id id_table[] = { +@@ -178,6 +178,7 @@ static const struct usb_device_id id_table[] = { {DEVICE_SWI(0x413c, 0x81d0)}, /* Dell Wireless 5819 */ {DEVICE_SWI(0x413c, 0x81d1)}, /* Dell Wireless 5818 */ {DEVICE_SWI(0x413c, 0x81d2)}, /* Dell Wireless 5818 */ @@ -20,5 +20,5 @@ index 613f91add03d..e1428222dd73 100644 /* Huawei devices */ {DEVICE_HWI(0x03f0, 0x581d)}, /* HP lt4112 LTE/HSPA+ Gobi 4G Modem (Huawei me906e) */ -- -2.26.0 +2.26.2 diff --git a/patches/4.19/0009-ioremap_uc.patch b/patches/4.19/0009-ioremap_uc.patch index f89bb0176..5ff5b4141 100644 --- a/patches/4.19/0009-ioremap_uc.patch +++ b/patches/4.19/0009-ioremap_uc.patch @@ -1,14 +1,11 @@ -From 34845744043e4e3c3f2bc0a4202c93c5e27bc14d Mon Sep 17 00:00:00 2001 +From 6d8ed96cfeb08b584fd429eb603e0d5d00e476a6 Mon Sep 17 00:00:00 2001 From: Tuowen Zhao Date: Wed, 16 Oct 2019 15:06:28 -0600 Subject: [PATCH 09/10] ioremap_uc --- - Documentation/driver-model/devres.txt | 1 + - drivers/mfd/intel-lpss.c | 2 +- - include/linux/io.h | 2 ++ - lib/devres.c | 19 +++++++++++++++++++ - 4 files changed, 23 insertions(+), 1 deletion(-) + Documentation/driver-model/devres.txt | 1 + + 1 file changed, 1 insertion(+) diff --git a/Documentation/driver-model/devres.txt b/Documentation/driver-model/devres.txt index 43681ca0837f..7b1ee4190208 100644 @@ -22,76 +19,6 @@ index 43681ca0837f..7b1ee4190208 100644 devm_ioremap_wc() devm_ioremap_resource() : checks resource, requests memory region, ioremaps devm_iounmap() -diff --git a/drivers/mfd/intel-lpss.c b/drivers/mfd/intel-lpss.c -index 95e217e6b6d7..7577afd42842 100644 ---- a/drivers/mfd/intel-lpss.c -+++ b/drivers/mfd/intel-lpss.c -@@ -397,7 +397,7 @@ int intel_lpss_probe(struct device *dev, - if (!lpss) - return -ENOMEM; - -- lpss->priv = devm_ioremap(dev, info->mem->start + LPSS_PRIV_OFFSET, -+ lpss->priv = devm_ioremap_uc(dev, info->mem->start + LPSS_PRIV_OFFSET, - LPSS_PRIV_SIZE); - if (!lpss->priv) - return -ENOMEM; -diff --git a/include/linux/io.h b/include/linux/io.h -index 32e30e8fb9db..da39ff89df65 100644 ---- a/include/linux/io.h -+++ b/include/linux/io.h -@@ -75,6 +75,8 @@ static inline void devm_ioport_unmap(struct device *dev, void __iomem *addr) - - void __iomem *devm_ioremap(struct device *dev, resource_size_t offset, - resource_size_t size); -+void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset, -+ resource_size_t size); - void __iomem *devm_ioremap_nocache(struct device *dev, resource_size_t offset, - resource_size_t size); - void __iomem *devm_ioremap_wc(struct device *dev, resource_size_t offset, -diff --git a/lib/devres.c b/lib/devres.c -index aa0f5308ac6b..75ea32d9b661 100644 ---- a/lib/devres.c -+++ b/lib/devres.c -@@ -9,6 +9,7 @@ - enum devm_ioremap_type { - DEVM_IOREMAP = 0, - DEVM_IOREMAP_NC, -+ DEVM_IOREMAP_UC, - DEVM_IOREMAP_WC, - }; - -@@ -39,6 +40,9 @@ static void __iomem *__devm_ioremap(struct device *dev, resource_size_t offset, - case DEVM_IOREMAP_NC: - addr = ioremap_nocache(offset, size); - break; -+ case DEVM_IOREMAP_UC: -+ addr = ioremap_uc(offset, size); -+ break; - case DEVM_IOREMAP_WC: - addr = ioremap_wc(offset, size); - break; -@@ -68,6 +72,21 @@ void __iomem *devm_ioremap(struct device *dev, resource_size_t offset, - } - EXPORT_SYMBOL(devm_ioremap); - -+/** -+ * devm_ioremap_uc - Managed ioremap_uc() -+ * @dev: Generic device to remap IO address for -+ * @offset: Resource address to map -+ * @size: Size of map -+ * -+ * Managed ioremap_uc(). Map is automatically unmapped on driver detach. -+ */ -+void __iomem *devm_ioremap_uc(struct device *dev, resource_size_t offset, -+ resource_size_t size) -+{ -+ return __devm_ioremap(dev, offset, size, DEVM_IOREMAP_UC); -+} -+EXPORT_SYMBOL_GPL(devm_ioremap_uc); -+ - /** - * devm_ioremap_nocache - Managed ioremap_nocache() - * @dev: Generic device to remap IO address for -- -2.26.0 +2.26.2 diff --git a/patches/4.19/0010-wifi.patch b/patches/4.19/0010-wifi.patch index f459bae57..41c48cc1a 100644 --- a/patches/4.19/0010-wifi.patch +++ b/patches/4.19/0010-wifi.patch @@ -1,13 +1,13 @@ -From 4f727acf39a87273cada07975102cb3e7d452057 Mon Sep 17 00:00:00 2001 +From 9bb4c5b00ce73302b1321f7b51bfbe7bcf7386fb Mon Sep 17 00:00:00 2001 From: sebanc <22224731+sebanc@users.noreply.github.com> Date: Mon, 4 Nov 2019 09:30:57 +0100 Subject: [PATCH 10/10] wifi --- - .../net/wireless/marvell/mwifiex/cfg80211.c | 26 +++++++ - drivers/net/wireless/marvell/mwifiex/pcie.c | 75 ++++++++++--------- - .../net/wireless/marvell/mwifiex/sta_cmd.c | 26 +------ - 3 files changed, 66 insertions(+), 61 deletions(-) + .../net/wireless/marvell/mwifiex/cfg80211.c | 26 ++++++ + drivers/net/wireless/marvell/mwifiex/pcie.c | 86 +++++++++++-------- + .../net/wireless/marvell/mwifiex/sta_cmd.c | 31 ++----- + 3 files changed, 83 insertions(+), 60 deletions(-) diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c index 7b74ef71bef1..d8e65b733cb3 100644 @@ -54,16 +54,25 @@ index 7b74ef71bef1..d8e65b733cb3 100644 } diff --git a/drivers/net/wireless/marvell/mwifiex/pcie.c b/drivers/net/wireless/marvell/mwifiex/pcie.c -index 991b9cc18000..4549359ee19b 100644 +index 991b9cc18000..2464f536192c 100644 --- a/drivers/net/wireless/marvell/mwifiex/pcie.c +++ b/drivers/net/wireless/marvell/mwifiex/pcie.c -@@ -149,37 +149,39 @@ static bool mwifiex_pcie_ok_to_access_hw(struct mwifiex_adapter *adapter) +@@ -146,40 +146,45 @@ static bool mwifiex_pcie_ok_to_access_hw(struct mwifiex_adapter *adapter) + * + * If already not suspended, this function allocates and sends a host + * sleep activate request to the firmware and turns off the traffic. ++ * ++ * XXX: ignoring all the above comment and just removes the card to ++ * fix S0ix and "AP scanning (sometimes) not working after suspend". ++ * Required code is extracted from mwifiex_pcie_remove(). */ static int mwifiex_pcie_suspend(struct device *dev) { - struct mwifiex_adapter *adapter; - struct pcie_service_card *card; struct pci_dev *pdev = to_pci_dev(dev); +- +- card = pci_get_drvdata(pdev); + struct pcie_service_card *card = pci_get_drvdata(pdev); + struct mwifiex_adapter *adapter; + struct mwifiex_private *priv; @@ -71,8 +80,6 @@ index 991b9cc18000..4549359ee19b 100644 + u32 fw_status; + int ret; -- card = pci_get_drvdata(pdev); - /* Might still be loading firmware */ wait_for_completion(&card->fw_done); @@ -89,9 +96,6 @@ index 991b9cc18000..4549359ee19b 100644 + ret = mwifiex_read_reg(adapter, reg->fw_status, &fw_status); + else + fw_status = -1; -+ -+ if (fw_status == FIRMWARE_READY_PCIE && !adapter->mfg_mode) { -+ mwifiex_deauthenticate_all(adapter); - /* Enable the Host Sleep */ - if (!mwifiex_enable_hs(adapter)) { @@ -101,22 +105,31 @@ index 991b9cc18000..4549359ee19b 100644 - mwifiex_disable_wake(adapter); - return -EFAULT; - } -+ priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY); ++ if (fw_status == FIRMWARE_READY_PCIE && !adapter->mfg_mode) { ++ mwifiex_deauthenticate_all(adapter); - flush_workqueue(adapter->workqueue); -+ mwifiex_disable_auto_ds(priv); -+ -+ mwifiex_init_shutdown_fw(priv, MWIFIEX_FUNC_SHUTDOWN); -+ } ++ priv = mwifiex_get_priv(adapter, MWIFIEX_BSS_ROLE_ANY); - /* Indicate device suspended */ - set_bit(MWIFIEX_IS_SUSPENDED, &adapter->work_flags); - clear_bit(MWIFIEX_IS_HS_ENABLING, &adapter->work_flags); ++ mwifiex_disable_auto_ds(priv); ++ ++ mwifiex_init_shutdown_fw(priv, MWIFIEX_FUNC_SHUTDOWN); ++ } ++ + mwifiex_remove_card(adapter); return 0; } -@@ -194,30 +196,29 @@ static int mwifiex_pcie_suspend(struct device *dev) +@@ -191,33 +196,35 @@ static int mwifiex_pcie_suspend(struct device *dev) + * + * If already not resumed, this function turns on the traffic and + * sends a host sleep cancel request to the firmware. ++ * ++ * XXX: ignoring all the above comment and probes the card that was ++ * removed on suspend. Required code is extracted from mwifiex_pcie_probe(). */ static int mwifiex_pcie_resume(struct device *dev) { @@ -163,36 +176,41 @@ index 991b9cc18000..4549359ee19b 100644 return 0; } -@@ -271,6 +272,8 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev, - return -1; - } +@@ -233,8 +240,13 @@ static int mwifiex_pcie_probe(struct pci_dev *pdev, + const struct pci_device_id *ent) + { + struct pcie_service_card *card; ++ struct pci_dev *parent_pdev = pci_upstream_bridge(pdev); + int ret; -+ pdev->bus->self->bridge_d3 = false; ++ /* disable bridge_d3 to fix driver crashing after suspend on gen4+ ++ * Surface devices */ ++ parent_pdev->bridge_d3 = false; + - return 0; - } + pr_debug("info: vendor=0x%4.04X device=0x%4.04X rev=%d\n", + pdev->vendor, pdev->device, pdev->revision); diff --git a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c -index 4ed10cf82f9a..977b57c0908f 100644 +index 4ed10cf82f9a..410bef3d6a6e 100644 --- a/drivers/net/wireless/marvell/mwifiex/sta_cmd.c +++ b/drivers/net/wireless/marvell/mwifiex/sta_cmd.c -@@ -2265,14 +2265,13 @@ int mwifiex_sta_prepare_cmd(struct mwifiex_private *priv, uint16_t cmd_no, - int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) - { +@@ -2254,7 +2254,6 @@ int mwifiex_sta_prepare_cmd(struct mwifiex_private *priv, uint16_t cmd_no, + * - Function init (for first interface only) + * - Read MAC address (for first interface only) + * - Reconfigure Tx buffer size (for first interface only) +- * - Enable auto deep sleep (for first interface only) + * - Get Tx rate + * - Get Tx power + * - Set IBSS coalescing status +@@ -2267,7 +2266,6 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) struct mwifiex_adapter *adapter = priv->adapter; -- int ret; + int ret; struct mwifiex_ds_11n_amsdu_aggr_ctrl amsdu_aggr_ctrl; - struct mwifiex_ds_auto_ds auto_ds; enum state_11d_t state_11d; struct mwifiex_ds_11n_tx_cfg tx_cfg; u8 sdio_sp_rx_aggr_enable; - u16 packet_aggr_enable; - int data; -+ int ret; - - if (first_sta) { - if (priv->adapter->iface_type == MWIFIEX_PCIE) { -@@ -2339,17 +2338,6 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) +@@ -2339,16 +2337,10 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) if (ret) return -1; @@ -206,11 +224,14 @@ index 4ed10cf82f9a..977b57c0908f 100644 - if (ret) - return -1; - } -- ++ /* Not enabling ps_mode (IEEE power_save) by default. Enabling ++ * this causes connection instability, especially on 5GHz APs ++ * and eventually causes "firmware wakeup failed". Therefore, ++ * the relevant code was removed from here. */ + if (drcs) { adapter->drcs_enabled = true; - if (ISSUPP_DRCS_ENABLED(adapter->fw_cap_info)) -@@ -2395,18 +2383,6 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) +@@ -2395,17 +2387,10 @@ int mwifiex_sta_init_cmd(struct mwifiex_private *priv, u8 first_sta, bool init) if (ret) return -1; @@ -225,10 +246,13 @@ index 4ed10cf82f9a..977b57c0908f 100644 - if (ret) - return -1; - } -- ++ /* Not enabling auto deep sleep (auto_ds) by default. Enabling ++ * this reportedly causes "suspend/resume fails when not connected ++ * to an Access Point." Therefore, the relevant code was removed ++ * from here. */ + if (priv->bss_type != MWIFIEX_BSS_TYPE_UAP) { /* Send cmd to FW to enable/disable 11D function */ - state_11d = ENABLE_11D; -- -2.26.0 +2.26.2