summarylogtreecommitdiffstats
path: root/0007-v4-platform-x86-asus-wmi-ROG-Ally-increase-wait-time.patch
diff options
context:
space:
mode:
Diffstat (limited to '0007-v4-platform-x86-asus-wmi-ROG-Ally-increase-wait-time.patch')
-rw-r--r--0007-v4-platform-x86-asus-wmi-ROG-Ally-increase-wait-time.patch73
1 files changed, 73 insertions, 0 deletions
diff --git a/0007-v4-platform-x86-asus-wmi-ROG-Ally-increase-wait-time.patch b/0007-v4-platform-x86-asus-wmi-ROG-Ally-increase-wait-time.patch
new file mode 100644
index 000000000000..684263d500c6
--- /dev/null
+++ b/0007-v4-platform-x86-asus-wmi-ROG-Ally-increase-wait-time.patch
@@ -0,0 +1,73 @@
+From: "Luke D. Jones" <luke@ljones.dev>
+To: hdegoede@redhat.com
+Cc: corentin.chary@gmail.com, ilpo.jarvinen@linux.intel.com,
+ platform-driver-x86@vger.kernel.org,
+ linux-kernel@vger.kernel.org, "Luke D. Jones" <luke@ljones.dev>
+Subject: [PATCH v4 7/9] platform/x86: asus-wmi: ROG Ally increase wait time, allow MCU powersave
+Date: Thu, 4 Apr 2024 13:16:50 +1300 [thread overview]
+Message-ID: <20240404001652.86207-8-luke@ljones.dev> (raw)
+In-Reply-To: <20240404001652.86207-1-luke@ljones.dev>
+
+The previous work to allow the MCU to be resumed correctly after sleep
+and resume tried to take the shortest possible time. However as work
+continues in various other parts of the s2idle subsystems it has shown
+that it wasn't entirely reliable.
+
+If the MCU disable/enable call is done correctly the MCU fully removes
+its USB endpoints, and this shows as a full USB device reconnection on
+resume. When we tried to short this as much as possible sometimes the
+MCU doesn't get to complete what it needs to do before going to low-power
+and this affected the reconnection.
+
+Through trial it is found that the minimum time required is approx 1200ms
+to allow a proper disconnect and disable, and the same amount of time on
+resume is required to prevent a rapid disconnect/reconnect happening on
+seemingly random occasions. To be safe the time is now 1500ms for msleep.
+
+Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
+Signed-off-by: Luke D. Jones <luke@ljones.dev>
+---
+ drivers/platform/x86/asus-wmi.c | 12 ++----------
+ 1 file changed, 2 insertions(+), 10 deletions(-)
+
+diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
+index 976e26c82f80..ab98f91e573c 100644
+--- a/drivers/platform/x86/asus-wmi.c
++++ b/drivers/platform/x86/asus-wmi.c
+@@ -140,7 +140,7 @@ module_param(fnlock_default, bool, 0444);
+ /* Controls the power state of the USB0 hub on ROG Ally which input is on */
+ #define ASUS_USB0_PWR_EC0_CSEE "\\_SB.PCI0.SBRG.EC0.CSEE"
+ /* 300ms so far seems to produce a reliable result on AC and battery */
+-#define ASUS_USB0_PWR_EC0_CSEE_WAIT 300
++#define ASUS_USB0_PWR_EC0_CSEE_WAIT 1500
+
+ static const char * const ashs_ids[] = { "ATK4001", "ATK4002", NULL };
+
+@@ -4829,6 +4829,7 @@ static int asus_hotk_resume_early(struct device *device)
+ struct asus_wmi *asus = dev_get_drvdata(device);
+
+ if (asus->ally_mcu_usb_switch) {
++ /* sleep required to prevent USB0 being yanked then reappearing rapidly */
+ if (ACPI_FAILURE(acpi_execute_simple_method(NULL, ASUS_USB0_PWR_EC0_CSEE, 0xB8)))
+ dev_err(device, "ROG Ally MCU failed to connect USB dev\n");
+ else
+@@ -4840,17 +4841,8 @@ static int asus_hotk_resume_early(struct device *device)
+ static int asus_hotk_prepare(struct device *device)
+ {
+ struct asus_wmi *asus = dev_get_drvdata(device);
+- int result, err;
+
+ if (asus->ally_mcu_usb_switch) {
+- /* When powersave is enabled it causes many issues with resume of USB hub */
+- result = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_MCU_POWERSAVE);
+- if (result == 1) {
+- dev_warn(device, "MCU powersave enabled, disabling to prevent resume issues");
+- err = asus_wmi_set_devstate(ASUS_WMI_DEVID_MCU_POWERSAVE, 0, &result);
+- if (err || result != 1)
+- dev_err(device, "Failed to set MCU powersave mode: %d\n", err);
+- }
+ /* sleep required to ensure USB0 is disabled before sleep continues */
+ if (ACPI_FAILURE(acpi_execute_simple_method(NULL, ASUS_USB0_PWR_EC0_CSEE, 0xB7)))
+ dev_err(device, "ROG Ally MCU failed to disconnect USB dev\n");
+--
+2.44.0