[PATCH v4 4/9] platform/x86: asus-armoury: add panel_hd_mode attribute

Luke D. Jones posted 9 patches 2 months ago
There is a newer version of this series
[PATCH v4 4/9] platform/x86: asus-armoury: add panel_hd_mode attribute
Posted by Luke D. Jones 2 months ago
Add panel_hd_mode to toggle the panel mode between single and high
definition modes.

Signed-off-by: Luke D. Jones <luke@ljones.dev>
---
 drivers/platform/x86/asus-armoury.c        | 6 +++++-
 include/linux/platform_data/x86/asus-wmi.h | 1 +
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asus-armoury.c
index 39e422b16b8e..15eab4d45b81 100644
--- a/drivers/platform/x86/asus-armoury.c
+++ b/drivers/platform/x86/asus-armoury.c
@@ -106,7 +106,8 @@ static struct kobj_attribute pending_reboot = __ATTR_RO(pending_reboot);
 
 static bool asus_bios_requires_reboot(struct kobj_attribute *attr)
 {
-	return !strcmp(attr->attr.name, "gpu_mux_mode");
+	return !strcmp(attr->attr.name, "gpu_mux_mode") ||
+	       !strcmp(attr->attr.name, "panel_hd_mode");
 }
 
 /**
@@ -429,6 +430,8 @@ ATTR_GROUP_BOOL_RW(mcu_powersave, "mcu_powersave", ASUS_WMI_DEVID_MCU_POWERSAVE,
 		   "Set MCU powersaving mode");
 ATTR_GROUP_BOOL_RW(panel_od, "panel_overdrive", ASUS_WMI_DEVID_PANEL_OD,
 		   "Set the panel refresh overdrive");
+ATTR_GROUP_BOOL_RW(panel_hd_mode, "panel_hd_mode", ASUS_WMI_DEVID_PANEL_HD,
+		   "Set the panel HD mode to UHD<0> or FHD<1>");
 ATTR_GROUP_BOOL_RO(egpu_connected, "egpu_connected", ASUS_WMI_DEVID_EGPU_CONNECTED,
 		   "Show the eGPU connection status");
 
@@ -442,6 +445,7 @@ static const struct asus_attr_group armoury_attr_groups[] = {
 	{ &boot_sound_attr_group, ASUS_WMI_DEVID_BOOT_SOUND },
 	{ &mcu_powersave_attr_group, ASUS_WMI_DEVID_MCU_POWERSAVE },
 	{ &panel_od_attr_group, ASUS_WMI_DEVID_PANEL_OD },
+	{ &panel_hd_mode_attr_group, ASUS_WMI_DEVID_PANEL_HD },
 };
 
 static int asus_fw_attr_add(void)
diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
index 6ea4dedfb85e..7caf2c7ed8c9 100644
--- a/include/linux/platform_data/x86/asus-wmi.h
+++ b/include/linux/platform_data/x86/asus-wmi.h
@@ -73,6 +73,7 @@
 #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO 0x00110019
 
 /* Misc */
+#define ASUS_WMI_DEVID_PANEL_HD		0x0005001C
 #define ASUS_WMI_DEVID_PANEL_OD		0x00050019
 #define ASUS_WMI_DEVID_CAMERA		0x00060013
 #define ASUS_WMI_DEVID_LID_FLIP		0x00060062
-- 
2.46.1
Re: [PATCH v4 4/9] platform/x86: asus-armoury: add panel_hd_mode attribute
Posted by Mario Limonciello 2 months ago
On 9/26/2024 04:29, Luke D. Jones wrote:
> Add panel_hd_mode to toggle the panel mode between single and high
> definition modes.
> 
> Signed-off-by: Luke D. Jones <luke@ljones.dev>

This patch looks good to me.

Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

---

But that being said; mostly to satisfy my curiosity could you share more 
about what this actually does?

Does it change the EDID exposed in the BIOS in ACPI _DDC?  At least for 
AMD platforms that would mean it only works with this patch (which is on 
it's way):

https://lore.kernel.org/amd-gfx/20240918213845.158293-11-mario.limonciello@amd.com/

> ---
>   drivers/platform/x86/asus-armoury.c        | 6 +++++-
>   include/linux/platform_data/x86/asus-wmi.h | 1 +
>   2 files changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asus-armoury.c
> index 39e422b16b8e..15eab4d45b81 100644
> --- a/drivers/platform/x86/asus-armoury.c
> +++ b/drivers/platform/x86/asus-armoury.c
> @@ -106,7 +106,8 @@ static struct kobj_attribute pending_reboot = __ATTR_RO(pending_reboot);
>   
>   static bool asus_bios_requires_reboot(struct kobj_attribute *attr)
>   {
> -	return !strcmp(attr->attr.name, "gpu_mux_mode");
> +	return !strcmp(attr->attr.name, "gpu_mux_mode") ||
> +	       !strcmp(attr->attr.name, "panel_hd_mode");
>   }
>   
>   /**
> @@ -429,6 +430,8 @@ ATTR_GROUP_BOOL_RW(mcu_powersave, "mcu_powersave", ASUS_WMI_DEVID_MCU_POWERSAVE,
>   		   "Set MCU powersaving mode");
>   ATTR_GROUP_BOOL_RW(panel_od, "panel_overdrive", ASUS_WMI_DEVID_PANEL_OD,
>   		   "Set the panel refresh overdrive");
> +ATTR_GROUP_BOOL_RW(panel_hd_mode, "panel_hd_mode", ASUS_WMI_DEVID_PANEL_HD,
> +		   "Set the panel HD mode to UHD<0> or FHD<1>");
>   ATTR_GROUP_BOOL_RO(egpu_connected, "egpu_connected", ASUS_WMI_DEVID_EGPU_CONNECTED,
>   		   "Show the eGPU connection status");
>   
> @@ -442,6 +445,7 @@ static const struct asus_attr_group armoury_attr_groups[] = {
>   	{ &boot_sound_attr_group, ASUS_WMI_DEVID_BOOT_SOUND },
>   	{ &mcu_powersave_attr_group, ASUS_WMI_DEVID_MCU_POWERSAVE },
>   	{ &panel_od_attr_group, ASUS_WMI_DEVID_PANEL_OD },
> +	{ &panel_hd_mode_attr_group, ASUS_WMI_DEVID_PANEL_HD },
>   };
>   
>   static int asus_fw_attr_add(void)
> diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
> index 6ea4dedfb85e..7caf2c7ed8c9 100644
> --- a/include/linux/platform_data/x86/asus-wmi.h
> +++ b/include/linux/platform_data/x86/asus-wmi.h
> @@ -73,6 +73,7 @@
>   #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO 0x00110019
>   
>   /* Misc */
> +#define ASUS_WMI_DEVID_PANEL_HD		0x0005001C
>   #define ASUS_WMI_DEVID_PANEL_OD		0x00050019
>   #define ASUS_WMI_DEVID_CAMERA		0x00060013
>   #define ASUS_WMI_DEVID_LID_FLIP		0x00060062
Re: [PATCH v4 4/9] platform/x86: asus-armoury: add panel_hd_mode attribute
Posted by Luke Jones 2 months ago
On Fri, 27 Sep 2024, at 3:17 AM, Mario Limonciello wrote:
> On 9/26/2024 04:29, Luke D. Jones wrote:
> > Add panel_hd_mode to toggle the panel mode between single and high
> > definition modes.
> > 
> > Signed-off-by: Luke D. Jones <luke@ljones.dev>
> 
> This patch looks good to me.
> 
> Reviewed-by: Mario Limonciello <mario.limonciello@amd.com>

Thank you.

> ---
> 
> But that being said; mostly to satisfy my curiosity could you share more 
> about what this actually does?
> 
> Does it change the EDID exposed in the BIOS in ACPI _DDC?  At least for 
> AMD platforms that would mean it only works with this patch (which is on 
> it's way):
> 
> https://lore.kernel.org/amd-gfx/20240918213845.158293-11-mario.limonciello@amd.com/

I don't have access to the hardware so what it does is learned entirely thirdhand. What I do know is that it must be rebooted after and it seems to switch some internal thingy.

"UHD 120Hz and FHD 240Hz modes" is what I gather from reviewing some of Sergei's code in his ghelper project (windows armoury crate replacement).

> 
> > ---
> >   drivers/platform/x86/asus-armoury.c        | 6 +++++-
> >   include/linux/platform_data/x86/asus-wmi.h | 1 +
> >   2 files changed, 6 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/platform/x86/asus-armoury.c b/drivers/platform/x86/asus-armoury.c
> > index 39e422b16b8e..15eab4d45b81 100644
> > --- a/drivers/platform/x86/asus-armoury.c
> > +++ b/drivers/platform/x86/asus-armoury.c
> > @@ -106,7 +106,8 @@ static struct kobj_attribute pending_reboot = __ATTR_RO(pending_reboot);
> >   
> >   static bool asus_bios_requires_reboot(struct kobj_attribute *attr)
> >   {
> > - return !strcmp(attr->attr.name, "gpu_mux_mode");
> > + return !strcmp(attr->attr.name, "gpu_mux_mode") ||
> > +        !strcmp(attr->attr.name, "panel_hd_mode");
> >   }
> >   
> >   /**
> > @@ -429,6 +430,8 @@ ATTR_GROUP_BOOL_RW(mcu_powersave, "mcu_powersave", ASUS_WMI_DEVID_MCU_POWERSAVE,
> >      "Set MCU powersaving mode");
> >   ATTR_GROUP_BOOL_RW(panel_od, "panel_overdrive", ASUS_WMI_DEVID_PANEL_OD,
> >      "Set the panel refresh overdrive");
> > +ATTR_GROUP_BOOL_RW(panel_hd_mode, "panel_hd_mode", ASUS_WMI_DEVID_PANEL_HD,
> > +    "Set the panel HD mode to UHD<0> or FHD<1>");
> >   ATTR_GROUP_BOOL_RO(egpu_connected, "egpu_connected", ASUS_WMI_DEVID_EGPU_CONNECTED,
> >      "Show the eGPU connection status");
> >   
> > @@ -442,6 +445,7 @@ static const struct asus_attr_group armoury_attr_groups[] = {
> >   { &boot_sound_attr_group, ASUS_WMI_DEVID_BOOT_SOUND },
> >   { &mcu_powersave_attr_group, ASUS_WMI_DEVID_MCU_POWERSAVE },
> >   { &panel_od_attr_group, ASUS_WMI_DEVID_PANEL_OD },
> > + { &panel_hd_mode_attr_group, ASUS_WMI_DEVID_PANEL_HD },
> >   };
> >   
> >   static int asus_fw_attr_add(void)
> > diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h
> > index 6ea4dedfb85e..7caf2c7ed8c9 100644
> > --- a/include/linux/platform_data/x86/asus-wmi.h
> > +++ b/include/linux/platform_data/x86/asus-wmi.h
> > @@ -73,6 +73,7 @@
> >   #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_VIVO 0x00110019
> >   
> >   /* Misc */
> > +#define ASUS_WMI_DEVID_PANEL_HD 0x0005001C
> >   #define ASUS_WMI_DEVID_PANEL_OD 0x00050019
> >   #define ASUS_WMI_DEVID_CAMERA 0x00060013
> >   #define ASUS_WMI_DEVID_LID_FLIP 0x00060062
> 
>