diff mbox series

platform/x86: thinkpad_acpi: Disable DYTC CQL mode around switching to balanced mode

Message ID 20210321113108.7069-1-hdegoede@redhat.com (mailing list archive)
State Accepted, archived
Headers show
Series platform/x86: thinkpad_acpi: Disable DYTC CQL mode around switching to balanced mode | expand

Commit Message

Hans de Goede March 21, 2021, 11:31 a.m. UTC
Testing has shown that setting /sys/firmware/acpi/platform_profile to
"balanced" when /sys/bus/platform/devices/thinkpad_acpi/dytc_lapmode
reports 1, causes dytc_lapmode to get reset to 0 and then it becomes
stuck at 0 for aprox. 30 minutes even if the laptop is used on a lap.

Disabling CQL (when enabled) before issuing the DYTC_CMD_RESET to get
back to balanced mode and re-enabling it afterwards again, like the
code already does when switching to low-power / performance mode fixes
this.

Fixes: c3bfcd4c6762 ("platform/x86: thinkpad_acpi: Add platform profile support")
Tested-by: Mark Pearson <markpearson@lenovo.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
 drivers/platform/x86/thinkpad_acpi.c | 9 +++++++--
 1 file changed, 7 insertions(+), 2 deletions(-)

Comments

Hans de Goede March 21, 2021, 4:40 p.m. UTC | #1
Hi,

On 3/21/21 12:31 PM, Hans de Goede wrote:
> Testing has shown that setting /sys/firmware/acpi/platform_profile to
> "balanced" when /sys/bus/platform/devices/thinkpad_acpi/dytc_lapmode
> reports 1, causes dytc_lapmode to get reset to 0 and then it becomes
> stuck at 0 for aprox. 30 minutes even if the laptop is used on a lap.
> 
> Disabling CQL (when enabled) before issuing the DYTC_CMD_RESET to get
> back to balanced mode and re-enabling it afterwards again, like the
> code already does when switching to low-power / performance mode fixes
> this.
> 
> Fixes: c3bfcd4c6762 ("platform/x86: thinkpad_acpi: Add platform profile support")
> Tested-by: Mark Pearson <markpearson@lenovo.com>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>

I've added this patch to the pdx86/review-hans and pdx86/fixes branches,
so it should show up in linux-next soon and it will also be included
in my next pull-req to Linus for 5.12.

Regards,

Hans


> ---
>  drivers/platform/x86/thinkpad_acpi.c | 9 +++++++--
>  1 file changed, 7 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
> index ab5155bec22e..a5df44bbb498 100644
> --- a/drivers/platform/x86/thinkpad_acpi.c
> +++ b/drivers/platform/x86/thinkpad_acpi.c
> @@ -10249,8 +10249,13 @@ static int dytc_profile_set(struct platform_profile_handler *pprof,
>  		return err;
>  
>  	if (profile == PLATFORM_PROFILE_BALANCED) {
> -		/* To get back to balanced mode we just issue a reset command */
> -		err = dytc_command(DYTC_CMD_RESET, &output);
> +		/*
> +		 * To get back to balanced mode we need to issue a reset command.
> +		 * Note we still need to disable CQL mode before hand and re-enable
> +		 * it afterwards, otherwise dytc_lapmode gets reset to 0 and stays
> +		 * stuck at 0 for aprox. 30 minutes.
> +		 */
> +		err = dytc_cql_command(DYTC_CMD_RESET, &output);
>  		if (err)
>  			goto unlock;
>  	} else {
>
diff mbox series

Patch

diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c
index ab5155bec22e..a5df44bbb498 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -10249,8 +10249,13 @@  static int dytc_profile_set(struct platform_profile_handler *pprof,
 		return err;
 
 	if (profile == PLATFORM_PROFILE_BALANCED) {
-		/* To get back to balanced mode we just issue a reset command */
-		err = dytc_command(DYTC_CMD_RESET, &output);
+		/*
+		 * To get back to balanced mode we need to issue a reset command.
+		 * Note we still need to disable CQL mode before hand and re-enable
+		 * it afterwards, otherwise dytc_lapmode gets reset to 0 and stays
+		 * stuck at 0 for aprox. 30 minutes.
+		 */
+		err = dytc_cql_command(DYTC_CMD_RESET, &output);
 		if (err)
 			goto unlock;
 	} else {