Re: [PATCH] platform/x86: thinkpad_acpi: Disable DYTC CQL mode around switching to balanced mode

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
> Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>

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 {
> 




[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux