Message ID | 20240926092952.1284435-5-luke@ljones.dev (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | platform/x86: introduce asus-armoury driver | expand |
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
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 > >
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
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(-)