public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] platform/x86: asus-wmi: fix screenpad brightness/power management
@ 2026-02-12 22:02 Denis Benato
  2026-02-12 22:02 ` [PATCH 1/2] platform/x86: asus-wmi: adjust screenpad power/brightness handling Denis Benato
  2026-02-12 22:02 ` [PATCH 2/2] platform/x86: asus-wmi: fix screenpad brightness scaling Denis Benato
  0 siblings, 2 replies; 8+ messages in thread
From: Denis Benato @ 2026-02-12 22:02 UTC (permalink / raw)
  To: linux-kernel
  Cc: platform-driver-x86, Hans de Goede, Ilpo Järvinen,
	Luke D . Jones, Mateusz Schyboll, Denis Benato, Denis Benato

Fix up some inconsistent behaviour involving the screenpad on some
ASUS laptops. This fixes:
- illogical screen off control (0/1 flipped depending on WMI state)
- bad brightness depending on the last screenpad power state
- incorrect brightness scaling

Changelog:
- v1
  - Initial submission
- v2
  - Split patch in two
  - Remove a redundant variable copy


Denis Benato (2):
  platform/x86: asus-wmi: adjust screenpad power/brightness handling
  platform/x86: asus-wmi: fix screenpad brightness scaling

 drivers/platform/x86/asus-wmi.c | 50 +++++++++++++--------------------
 1 file changed, 19 insertions(+), 31 deletions(-)

-- 
2.53.0


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/2] platform/x86: asus-wmi: adjust screenpad power/brightness handling
  2026-02-12 22:02 [PATCH 0/2] platform/x86: asus-wmi: fix screenpad brightness/power management Denis Benato
@ 2026-02-12 22:02 ` Denis Benato
  2026-02-23 14:38   ` Ilpo Järvinen
  2026-02-12 22:02 ` [PATCH 2/2] platform/x86: asus-wmi: fix screenpad brightness scaling Denis Benato
  1 sibling, 1 reply; 8+ messages in thread
From: Denis Benato @ 2026-02-12 22:02 UTC (permalink / raw)
  To: linux-kernel
  Cc: platform-driver-x86, Hans de Goede, Ilpo Järvinen,
	Luke D . Jones, Mateusz Schyboll, Denis Benato, Denis Benato

Fix illogical screen off control by hardcoding 0 and 1 depending on the
requested brightness and also do not rely on the last screenpad
power state to issue screen brightness commands.

Signed-off-by: Denis Benato <denis.benato@linux.dev>
Signed-off-by: Luke Jones <luke@ljones.dev>
---
 drivers/platform/x86/asus-wmi.c | 34 +++++++++++++--------------------
 1 file changed, 13 insertions(+), 21 deletions(-)

diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 0775fadedd10..4130dae37e15 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -4254,32 +4254,24 @@ static int read_screenpad_brightness(struct backlight_device *bd)
 
 static int update_screenpad_bl_status(struct backlight_device *bd)
 {
-	struct asus_wmi *asus = bl_get_data(bd);
-	int power, err = 0;
-	u32 ctrl_param;
+	int err = 0;
+	u32 ctrl_param = bd->props.brightness;
 
-	power = read_screenpad_backlight_power(asus);
-	if (power < 0)
-		return power;
+	if (ctrl_param >= 0 && bd->props.power) {
+		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 1, NULL);
+		if (err < 0)
+			return err;
 
-	if (bd->props.power != power) {
-		if (power != BACKLIGHT_POWER_ON) {
-			/* Only brightness > 0 can power it back on */
-			ctrl_param = asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
-			err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT,
-						    ctrl_param, NULL);
-		} else {
-			err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
-		}
-	} else if (power == BACKLIGHT_POWER_ON) {
-		/* Only set brightness if powered on or we get invalid/unsync state */
-		ctrl_param = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
 		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT, ctrl_param, NULL);
+		if (err < 0)
+			return err;
 	}
 
-	/* Ensure brightness is stored to turn back on with */
-	if (err == 0)
-		asus->driver->screenpad_brightness = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
+	if (!bd->props.power) {
+		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
+		if (err < 0)
+			return err;
+	}
 
 	return err;
 }
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/2] platform/x86: asus-wmi: fix screenpad brightness scaling
  2026-02-12 22:02 [PATCH 0/2] platform/x86: asus-wmi: fix screenpad brightness/power management Denis Benato
  2026-02-12 22:02 ` [PATCH 1/2] platform/x86: asus-wmi: adjust screenpad power/brightness handling Denis Benato
@ 2026-02-12 22:02 ` Denis Benato
  2026-02-23 14:42   ` Ilpo Järvinen
  1 sibling, 1 reply; 8+ messages in thread
From: Denis Benato @ 2026-02-12 22:02 UTC (permalink / raw)
  To: linux-kernel
  Cc: platform-driver-x86, Hans de Goede, Ilpo Järvinen,
	Luke D . Jones, Mateusz Schyboll, Denis Benato, Denis Benato

Fix incorrect brightness scaling by removing the inconsistent use of an
arbitrary minimum.

Signed-off-by: Denis Benato <denis.benato@linux.dev>
Signed-off-by: Luke Jones <luke@ljones.dev>
---
 drivers/platform/x86/asus-wmi.c | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
index 4130dae37e15..5443aaf99e38 100644
--- a/drivers/platform/x86/asus-wmi.c
+++ b/drivers/platform/x86/asus-wmi.c
@@ -125,7 +125,6 @@ module_param(fnlock_default, bool, 0444);
 #define NVIDIA_TEMP_MIN		75
 #define NVIDIA_TEMP_MAX		87
 
-#define ASUS_SCREENPAD_BRIGHT_MIN 20
 #define ASUS_SCREENPAD_BRIGHT_MAX 255
 #define ASUS_SCREENPAD_BRIGHT_DEFAULT 60
 
@@ -4243,13 +4242,13 @@ static int read_screenpad_brightness(struct backlight_device *bd)
 		return err;
 	/* The device brightness can only be read if powered, so return stored */
 	if (err == BACKLIGHT_POWER_OFF)
-		return asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
+		return bd->props.brightness;
 
 	err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT, &retval);
 	if (err < 0)
 		return err;
 
-	return (retval & ASUS_WMI_DSTS_BRIGHTNESS_MASK) - ASUS_SCREENPAD_BRIGHT_MIN;
+	return (retval & ASUS_WMI_DSTS_BRIGHTNESS_MASK);
 }
 
 static int update_screenpad_bl_status(struct backlight_device *bd)
@@ -4289,22 +4288,19 @@ static int asus_screenpad_init(struct asus_wmi *asus)
 	int err, power;
 	int brightness = 0;
 
-	power = read_screenpad_backlight_power(asus);
+	power = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_SCREENPAD_POWER);
 	if (power < 0)
 		return power;
 
-	if (power != BACKLIGHT_POWER_OFF) {
+	if (power) {
 		err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT, &brightness);
 		if (err < 0)
 			return err;
 	}
-	/* default to an acceptable min brightness on boot if too low */
-	if (brightness < ASUS_SCREENPAD_BRIGHT_MIN)
-		brightness = ASUS_SCREENPAD_BRIGHT_DEFAULT;
 
 	memset(&props, 0, sizeof(struct backlight_properties));
 	props.type = BACKLIGHT_RAW; /* ensure this bd is last to be picked */
-	props.max_brightness = ASUS_SCREENPAD_BRIGHT_MAX - ASUS_SCREENPAD_BRIGHT_MIN;
+	props.max_brightness = ASUS_SCREENPAD_BRIGHT_MAX;
 	bd = backlight_device_register("asus_screenpad",
 				       &asus->platform_device->dev, asus,
 				       &asus_screenpad_bl_ops, &props);
@@ -4315,7 +4311,7 @@ static int asus_screenpad_init(struct asus_wmi *asus)
 
 	asus->screenpad_backlight_device = bd;
 	asus->driver->screenpad_brightness = brightness;
-	bd->props.brightness = brightness - ASUS_SCREENPAD_BRIGHT_MIN;
+	bd->props.brightness = brightness;
 	bd->props.power = power;
 	backlight_update_status(bd);
 
-- 
2.53.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] platform/x86: asus-wmi: adjust screenpad power/brightness handling
  2026-02-12 22:02 ` [PATCH 1/2] platform/x86: asus-wmi: adjust screenpad power/brightness handling Denis Benato
@ 2026-02-23 14:38   ` Ilpo Järvinen
  2026-02-23 18:15     ` Denis Benato
  0 siblings, 1 reply; 8+ messages in thread
From: Ilpo Järvinen @ 2026-02-23 14:38 UTC (permalink / raw)
  To: Denis Benato
  Cc: LKML, platform-driver-x86, Hans de Goede, Luke D . Jones,
	Mateusz Schyboll, Denis Benato

On Thu, 12 Feb 2026, Denis Benato wrote:

> Fix illogical screen off control by hardcoding 0 and 1 depending on the
> requested brightness and also do not rely on the last screenpad
> power state to issue screen brightness commands.

Should this have a Fixes tag?

> Signed-off-by: Denis Benato <denis.benato@linux.dev>
> Signed-off-by: Luke Jones <luke@ljones.dev>
> ---
>  drivers/platform/x86/asus-wmi.c | 34 +++++++++++++--------------------
>  1 file changed, 13 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 0775fadedd10..4130dae37e15 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -4254,32 +4254,24 @@ static int read_screenpad_brightness(struct backlight_device *bd)
>  
>  static int update_screenpad_bl_status(struct backlight_device *bd)
>  {
> -	struct asus_wmi *asus = bl_get_data(bd);
> -	int power, err = 0;
> -	u32 ctrl_param;
> +	int err = 0;
> +	u32 ctrl_param = bd->props.brightness;

Please retain reverse xmas-tree order.

>  
> -	power = read_screenpad_backlight_power(asus);
> -	if (power < 0)
> -		return power;
> +	if (ctrl_param >= 0 && bd->props.power) {
> +		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 1, NULL);
> +		if (err < 0)
> +			return err;
>  
> -	if (bd->props.power != power) {
> -		if (power != BACKLIGHT_POWER_ON) {
> -			/* Only brightness > 0 can power it back on */
> -			ctrl_param = asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
> -			err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT,
> -						    ctrl_param, NULL);
> -		} else {
> -			err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
> -		}
> -	} else if (power == BACKLIGHT_POWER_ON) {
> -		/* Only set brightness if powered on or we get invalid/unsync state */
> -		ctrl_param = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
>  		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT, ctrl_param, NULL);
> +		if (err < 0)
> +			return err;
>  	}
>  
> -	/* Ensure brightness is stored to turn back on with */
> -	if (err == 0)
> -		asus->driver->screenpad_brightness = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
> +	if (!bd->props.power) {
> +		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
> +		if (err < 0)
> +			return err;
> +	}
>  
>  	return err;
>  }
> 

-- 
 i.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/2] platform/x86: asus-wmi: fix screenpad brightness scaling
  2026-02-12 22:02 ` [PATCH 2/2] platform/x86: asus-wmi: fix screenpad brightness scaling Denis Benato
@ 2026-02-23 14:42   ` Ilpo Järvinen
  0 siblings, 0 replies; 8+ messages in thread
From: Ilpo Järvinen @ 2026-02-23 14:42 UTC (permalink / raw)
  To: Denis Benato
  Cc: LKML, platform-driver-x86, Hans de Goede, Luke D . Jones,
	Mateusz Schyboll, Denis Benato

On Thu, 12 Feb 2026, Denis Benato wrote:

> Fix incorrect brightness scaling by removing the inconsistent use of an
> arbitrary minimum.
> 
> Signed-off-by: Denis Benato <denis.benato@linux.dev>
> Signed-off-by: Luke Jones <luke@ljones.dev>

Should this have a Fixes tag?

> ---
>  drivers/platform/x86/asus-wmi.c | 16 ++++++----------
>  1 file changed, 6 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
> index 4130dae37e15..5443aaf99e38 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -125,7 +125,6 @@ module_param(fnlock_default, bool, 0444);
>  #define NVIDIA_TEMP_MIN		75
>  #define NVIDIA_TEMP_MAX		87
>  
> -#define ASUS_SCREENPAD_BRIGHT_MIN 20
>  #define ASUS_SCREENPAD_BRIGHT_MAX 255
>  #define ASUS_SCREENPAD_BRIGHT_DEFAULT 60
>  
> @@ -4243,13 +4242,13 @@ static int read_screenpad_brightness(struct backlight_device *bd)
>  		return err;
>  	/* The device brightness can only be read if powered, so return stored */
>  	if (err == BACKLIGHT_POWER_OFF)
> -		return asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
> +		return bd->props.brightness;
>  
>  	err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT, &retval);
>  	if (err < 0)
>  		return err;
>  
> -	return (retval & ASUS_WMI_DSTS_BRIGHTNESS_MASK) - ASUS_SCREENPAD_BRIGHT_MIN;
> +	return (retval & ASUS_WMI_DSTS_BRIGHTNESS_MASK);
>  }
>  
>  static int update_screenpad_bl_status(struct backlight_device *bd)
> @@ -4289,22 +4288,19 @@ static int asus_screenpad_init(struct asus_wmi *asus)
>  	int err, power;
>  	int brightness = 0;
>  
> -	power = read_screenpad_backlight_power(asus);
> +	power = asus_wmi_get_devstate_simple(asus, ASUS_WMI_DEVID_SCREENPAD_POWER);
>  	if (power < 0)
>  		return power;
>  
> -	if (power != BACKLIGHT_POWER_OFF) {
> +	if (power) {
>  		err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_SCREENPAD_LIGHT, &brightness);
>  		if (err < 0)
>  			return err;
>  	}
> -	/* default to an acceptable min brightness on boot if too low */
> -	if (brightness < ASUS_SCREENPAD_BRIGHT_MIN)
> -		brightness = ASUS_SCREENPAD_BRIGHT_DEFAULT;

This doesn't seem to be related to the scaling but looks a lowerbound? 
Probably removing it would warrant own patch + justification, IMO.

>  	memset(&props, 0, sizeof(struct backlight_properties));
>  	props.type = BACKLIGHT_RAW; /* ensure this bd is last to be picked */
> -	props.max_brightness = ASUS_SCREENPAD_BRIGHT_MAX - ASUS_SCREENPAD_BRIGHT_MIN;
> +	props.max_brightness = ASUS_SCREENPAD_BRIGHT_MAX;
>  	bd = backlight_device_register("asus_screenpad",
>  				       &asus->platform_device->dev, asus,
>  				       &asus_screenpad_bl_ops, &props);
> @@ -4315,7 +4311,7 @@ static int asus_screenpad_init(struct asus_wmi *asus)
>  
>  	asus->screenpad_backlight_device = bd;
>  	asus->driver->screenpad_brightness = brightness;
> -	bd->props.brightness = brightness - ASUS_SCREENPAD_BRIGHT_MIN;
> +	bd->props.brightness = brightness;
>  	bd->props.power = power;
>  	backlight_update_status(bd);
>  
> 

--
 i.



^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] platform/x86: asus-wmi: adjust screenpad power/brightness handling
  2026-02-23 14:38   ` Ilpo Järvinen
@ 2026-02-23 18:15     ` Denis Benato
  2026-02-24  4:15       ` luke
  0 siblings, 1 reply; 8+ messages in thread
From: Denis Benato @ 2026-02-23 18:15 UTC (permalink / raw)
  To: Ilpo Järvinen
  Cc: LKML, platform-driver-x86, Hans de Goede, Luke D . Jones,
	Mateusz Schyboll, Denis Benato


On 2/23/26 15:38, Ilpo Järvinen wrote:
> On Thu, 12 Feb 2026, Denis Benato wrote:
>
>> Fix illogical screen off control by hardcoding 0 and 1 depending on the
>> requested brightness and also do not rely on the last screenpad
>> power state to issue screen brightness commands.
> Should this have a Fixes tag?
>
Same for the other patch: I am not sure.

What I know for certain is that Luke had an asus DUO to test this patch with
and most certainly it was because someone contacted him about these bugs.

I split up commits found int the previous version of this patch:
https://lore.kernel.org/all/20250525204214.104030-1-luke@ljones.dev/

I changed nothing else beside removing a redundant variable assignment.
>> Signed-off-by: Denis Benato <denis.benato@linux.dev>
>> Signed-off-by: Luke Jones <luke@ljones.dev>
>> ---
>>  drivers/platform/x86/asus-wmi.c | 34 +++++++++++++--------------------
>>  1 file changed, 13 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
>> index 0775fadedd10..4130dae37e15 100644
>> --- a/drivers/platform/x86/asus-wmi.c
>> +++ b/drivers/platform/x86/asus-wmi.c
>> @@ -4254,32 +4254,24 @@ static int read_screenpad_brightness(struct backlight_device *bd)
>>  
>>  static int update_screenpad_bl_status(struct backlight_device *bd)
>>  {
>> -	struct asus_wmi *asus = bl_get_data(bd);
>> -	int power, err = 0;
>> -	u32 ctrl_param;
>> +	int err = 0;
>> +	u32 ctrl_param = bd->props.brightness;
> Please retain reverse xmas-tree order.
>
>>  
>> -	power = read_screenpad_backlight_power(asus);
>> -	if (power < 0)
>> -		return power;
>> +	if (ctrl_param >= 0 && bd->props.power) {
>> +		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 1, NULL);
>> +		if (err < 0)
>> +			return err;
>>  
>> -	if (bd->props.power != power) {
>> -		if (power != BACKLIGHT_POWER_ON) {
>> -			/* Only brightness > 0 can power it back on */
>> -			ctrl_param = asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
>> -			err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT,
>> -						    ctrl_param, NULL);
>> -		} else {
>> -			err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
>> -		}
>> -	} else if (power == BACKLIGHT_POWER_ON) {
>> -		/* Only set brightness if powered on or we get invalid/unsync state */
>> -		ctrl_param = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
>>  		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT, ctrl_param, NULL);
>> +		if (err < 0)
>> +			return err;
>>  	}
>>  
>> -	/* Ensure brightness is stored to turn back on with */
>> -	if (err == 0)
>> -		asus->driver->screenpad_brightness = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
>> +	if (!bd->props.power) {
>> +		err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
>> +		if (err < 0)
>> +			return err;
>> +	}
>>  
>>  	return err;
>>  }
>>

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] platform/x86: asus-wmi: adjust screenpad power/brightness handling
  2026-02-23 18:15     ` Denis Benato
@ 2026-02-24  4:15       ` luke
  2026-02-24 20:42         ` Denis Benato
  0 siblings, 1 reply; 8+ messages in thread
From: luke @ 2026-02-24  4:15 UTC (permalink / raw)
  To: Denis Benato
  Cc: Ilpo Järvinen, LKML, platform-driver-x86, Hans de Goede,
	Mateusz Schyboll, Denis Benato


> On 24 Feb 2026, at 07:15, Denis Benato <denis.benato@linux.dev> wrote:
> 
> 
> On 2/23/26 15:38, Ilpo Järvinen wrote:
>> On Thu, 12 Feb 2026, Denis Benato wrote:
>> 
>>> Fix illogical screen off control by hardcoding 0 and 1 depending on the
>>> requested brightness and also do not rely on the last screenpad
>>> power state to issue screen brightness commands.
>> Should this have a Fixes tag?
>> 
> Same for the other patch: I am not sure.

It probably should be a fixes tag. Though there is no reference bug report or
other relating to it - only my discovery that the previously written code was in 
fact not right.

I had written the initial version that is in the kernel based on some limited testing
feedback from a user who was not able to clearly articulate what the issues
were and was happy with the final result.

I was able to get my hands on a Zenbook Duo and fully test this, which is how
I discovered the issues.

> What I know for certain is that Luke had an asus DUO to test this patch with
> and most certainly it was because someone contacted him about these bugs.
> 
> I split up commits found int the previous version of this patch:
> https://lore.kernel.org/all/20250525204214.104030-1-luke@ljones.dev/

Thanks for doing this. I just have not had any time to do it myself, very low on
the priority list but I would wager getting this all fixed correctly will enable both
Older and newer models to function how they should.

> I changed nothing else beside removing a redundant variable assignment.
>>> Signed-off-by: Denis Benato <denis.benato@linux.dev>
>>> Signed-off-by: Luke Jones <luke@ljones.dev>
>>> ---
>>> drivers/platform/x86/asus-wmi.c | 34 +++++++++++++--------------------
>>> 1 file changed, 13 insertions(+), 21 deletions(-)
>>> 
>>> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
>>> index 0775fadedd10..4130dae37e15 100644
>>> --- a/drivers/platform/x86/asus-wmi.c
>>> +++ b/drivers/platform/x86/asus-wmi.c
>>> @@ -4254,32 +4254,24 @@ static int read_screenpad_brightness(struct backlight_device *bd)
>>> 
>>> static int update_screenpad_bl_status(struct backlight_device *bd)
>>> {
>>> - struct asus_wmi *asus = bl_get_data(bd);
>>> - int power, err = 0;
>>> - u32 ctrl_param;
>>> + int err = 0;
>>> + u32 ctrl_param = bd->props.brightness;
>> Please retain reverse xmas-tree order.
>> 
>>> 
>>> - power = read_screenpad_backlight_power(asus);
>>> - if (power < 0)
>>> - return power;
>>> + if (ctrl_param >= 0 && bd->props.power) {
>>> + err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 1, NULL);
>>> + if (err < 0)
>>> + return err;
>>> 
>>> - if (bd->props.power != power) {
>>> - if (power != BACKLIGHT_POWER_ON) {
>>> - /* Only brightness > 0 can power it back on */
>>> - ctrl_param = asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
>>> - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT,
>>> -    ctrl_param, NULL);
>>> - } else {
>>> - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
>>> - }
>>> - } else if (power == BACKLIGHT_POWER_ON) {
>>> - /* Only set brightness if powered on or we get invalid/unsync state */
>>> - ctrl_param = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
>>> err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT, ctrl_param, NULL);
>>> + if (err < 0)
>>> + return err;
>>> }
>>> 
>>> - /* Ensure brightness is stored to turn back on with */
>>> - if (err == 0)
>>> - asus->driver->screenpad_brightness = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
>>> + if (!bd->props.power) {
>>> + err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
>>> + if (err < 0)
>>> + return err;
>>> + }
>>> 
>>> return err;
>>> }
>>> 


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/2] platform/x86: asus-wmi: adjust screenpad power/brightness handling
  2026-02-24  4:15       ` luke
@ 2026-02-24 20:42         ` Denis Benato
  0 siblings, 0 replies; 8+ messages in thread
From: Denis Benato @ 2026-02-24 20:42 UTC (permalink / raw)
  To: luke
  Cc: Ilpo Järvinen, LKML, platform-driver-x86, Hans de Goede,
	Mateusz Schyboll, Denis Benato


On 2/24/26 05:15, luke@ljones.dev wrote:
>> On 24 Feb 2026, at 07:15, Denis Benato <denis.benato@linux.dev> wrote:
>>
>>
>> On 2/23/26 15:38, Ilpo Järvinen wrote:
>>> On Thu, 12 Feb 2026, Denis Benato wrote:
>>>
>>>> Fix illogical screen off control by hardcoding 0 and 1 depending on the
>>>> requested brightness and also do not rely on the last screenpad
>>>> power state to issue screen brightness commands.
>>> Should this have a Fixes tag?
>>>
>> Same for the other patch: I am not sure.
> It probably should be a fixes tag. Though there is no reference bug report or
> other relating to it - only my discovery that the previously written code was in 
> fact not right.
>
> I had written the initial version that is in the kernel based on some limited testing
> feedback from a user who was not able to clearly articulate what the issues
> were and was happy with the final result.
>
> I was able to get my hands on a Zenbook Duo and fully test this, which is how
> I discovered the issues.
Actually... my bad. I confused "Closes" with "Fixes". Ilpo meant to reference the original commit.

Sorry for the noise. I will dig those two tags.
>> What I know for certain is that Luke had an asus DUO to test this patch with
>> and most certainly it was because someone contacted him about these bugs.
>>
>> I split up commits found int the previous version of this patch:
>> https://lore.kernel.org/all/20250525204214.104030-1-luke@ljones.dev/
> Thanks for doing this. I just have not had any time to do it myself, very low on
> the priority list but I would wager getting this all fixed correctly will enable both
> Older and newer models to function how they should.
>
>> I changed nothing else beside removing a redundant variable assignment.
>>>> Signed-off-by: Denis Benato <denis.benato@linux.dev>
>>>> Signed-off-by: Luke Jones <luke@ljones.dev>
>>>> ---
>>>> drivers/platform/x86/asus-wmi.c | 34 +++++++++++++--------------------
>>>> 1 file changed, 13 insertions(+), 21 deletions(-)
>>>>
>>>> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
>>>> index 0775fadedd10..4130dae37e15 100644
>>>> --- a/drivers/platform/x86/asus-wmi.c
>>>> +++ b/drivers/platform/x86/asus-wmi.c
>>>> @@ -4254,32 +4254,24 @@ static int read_screenpad_brightness(struct backlight_device *bd)
>>>>
>>>> static int update_screenpad_bl_status(struct backlight_device *bd)
>>>> {
>>>> - struct asus_wmi *asus = bl_get_data(bd);
>>>> - int power, err = 0;
>>>> - u32 ctrl_param;
>>>> + int err = 0;
>>>> + u32 ctrl_param = bd->props.brightness;
>>> Please retain reverse xmas-tree order.
>>>
>>>> - power = read_screenpad_backlight_power(asus);
>>>> - if (power < 0)
>>>> - return power;
>>>> + if (ctrl_param >= 0 && bd->props.power) {
>>>> + err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 1, NULL);
>>>> + if (err < 0)
>>>> + return err;
>>>>
>>>> - if (bd->props.power != power) {
>>>> - if (power != BACKLIGHT_POWER_ON) {
>>>> - /* Only brightness > 0 can power it back on */
>>>> - ctrl_param = asus->driver->screenpad_brightness - ASUS_SCREENPAD_BRIGHT_MIN;
>>>> - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT,
>>>> -    ctrl_param, NULL);
>>>> - } else {
>>>> - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
>>>> - }
>>>> - } else if (power == BACKLIGHT_POWER_ON) {
>>>> - /* Only set brightness if powered on or we get invalid/unsync state */
>>>> - ctrl_param = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
>>>> err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_LIGHT, ctrl_param, NULL);
>>>> + if (err < 0)
>>>> + return err;
>>>> }
>>>>
>>>> - /* Ensure brightness is stored to turn back on with */
>>>> - if (err == 0)
>>>> - asus->driver->screenpad_brightness = bd->props.brightness + ASUS_SCREENPAD_BRIGHT_MIN;
>>>> + if (!bd->props.power) {
>>>> + err = asus_wmi_set_devstate(ASUS_WMI_DEVID_SCREENPAD_POWER, 0, NULL);
>>>> + if (err < 0)
>>>> + return err;
>>>> + }
>>>>
>>>> return err;
>>>> }
>>>>

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2026-02-24 20:42 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-12 22:02 [PATCH 0/2] platform/x86: asus-wmi: fix screenpad brightness/power management Denis Benato
2026-02-12 22:02 ` [PATCH 1/2] platform/x86: asus-wmi: adjust screenpad power/brightness handling Denis Benato
2026-02-23 14:38   ` Ilpo Järvinen
2026-02-23 18:15     ` Denis Benato
2026-02-24  4:15       ` luke
2026-02-24 20:42         ` Denis Benato
2026-02-12 22:02 ` [PATCH 2/2] platform/x86: asus-wmi: fix screenpad brightness scaling Denis Benato
2026-02-23 14:42   ` Ilpo Järvinen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox