* [PATCH 1/1] platform/x86: asus-wmi: Add lite thermal policy support [not found] <20240731113507.178929-1-hacker1024@users.sourceforge.net> @ 2024-07-31 11:35 ` Joshua Leivenzon 2024-07-31 11:54 ` Mohamed Ghanmi 0 siblings, 1 reply; 3+ messages in thread From: Joshua Leivenzon @ 2024-07-31 11:35 UTC (permalink / raw) To: platform-driver-x86; +Cc: Corentin Chary, Luke D . Jones, Joshua Leivenzon Some ASUS laptops, such as the Zenbook Duo 2024 (UX8406), use a different WMI device ID to set the thermal policy. These devices tend to lack support for custom fan curve management, hence the "lite" designation. Signed-off-by: Joshua Leivenzon <hacker1024@users.sourceforge.net> --- drivers/platform/x86/asus-wmi.c | 102 +++++++++++++++------ include/linux/platform_data/x86/asus-wmi.h | 1 + 2 files changed, 76 insertions(+), 27 deletions(-) diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c index cc735931f97b..a89cbc063a3f 100644 --- a/drivers/platform/x86/asus-wmi.c +++ b/drivers/platform/x86/asus-wmi.c @@ -93,9 +93,13 @@ module_param(fnlock_default, bool, 0444); #define ASUS_FAN_BOOST_MODE_SILENT_MASK 0x02 #define ASUS_FAN_BOOST_MODES_MASK 0x03 +#define ASUS_THROTTLE_THERMAL_POLICY_COUNT 3 #define ASUS_THROTTLE_THERMAL_POLICY_DEFAULT 0 #define ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST 1 #define ASUS_THROTTLE_THERMAL_POLICY_SILENT 2 +#define ASUS_THROTTLE_THERMAL_POLICY_LITE_DEFAULT 0 +#define ASUS_THROTTLE_THERMAL_POLICY_LITE_OVERBOOST 2 +#define ASUS_THROTTLE_THERMAL_POLICY_LITE_SILENT 1 #define USB_INTEL_XUSB2PR 0xD0 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 @@ -287,6 +291,7 @@ struct asus_wmi { bool kbd_rgb_state_available; bool throttle_thermal_policy_available; + bool throttle_thermal_policy_lite; u8 throttle_thermal_policy_mode; bool cpu_fan_curve_available; @@ -3639,6 +3644,14 @@ static int throttle_thermal_policy_check_present(struct asus_wmi *asus) err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, &result); + if (err == -ENODEV) { + err = asus_wmi_get_devstate(asus, + ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_LITE, + &result); + asus->throttle_thermal_policy_lite = true; + } else { + asus->throttle_thermal_policy_lite = false; + } if (err) { if (err == -ENODEV) return 0; @@ -3659,7 +3672,10 @@ static int throttle_thermal_policy_write(struct asus_wmi *asus) value = asus->throttle_thermal_policy_mode; - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, + err = asus_wmi_set_devstate( + asus->throttle_thermal_policy_lite + ? ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_LITE + : ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, value, &retval); sysfs_notify(&asus->platform_device->dev.kobj, NULL, @@ -3701,7 +3717,7 @@ static int throttle_thermal_policy_switch_next(struct asus_wmi *asus) u8 new_mode = asus->throttle_thermal_policy_mode + 1; int err; - if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT) + if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_COUNT - 1) new_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; asus->throttle_thermal_policy_mode = new_mode; @@ -3740,7 +3756,7 @@ static ssize_t throttle_thermal_policy_store(struct device *dev, if (result < 0) return result; - if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT) + if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_COUNT - 1) return -EINVAL; asus->throttle_thermal_policy_mode = new_mode; @@ -3771,18 +3787,34 @@ static int asus_wmi_platform_profile_get(struct platform_profile_handler *pprof, tp = asus->throttle_thermal_policy_mode; - switch (tp) { - case ASUS_THROTTLE_THERMAL_POLICY_DEFAULT: - *profile = PLATFORM_PROFILE_BALANCED; - break; - case ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST: - *profile = PLATFORM_PROFILE_PERFORMANCE; - break; - case ASUS_THROTTLE_THERMAL_POLICY_SILENT: - *profile = PLATFORM_PROFILE_QUIET; - break; - default: - return -EINVAL; + if (!asus->throttle_thermal_policy_lite) { + switch (tp) { + case ASUS_THROTTLE_THERMAL_POLICY_DEFAULT: + *profile = PLATFORM_PROFILE_BALANCED; + break; + case ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST: + *profile = PLATFORM_PROFILE_PERFORMANCE; + break; + case ASUS_THROTTLE_THERMAL_POLICY_SILENT: + *profile = PLATFORM_PROFILE_QUIET; + break; + default: + return -EINVAL; + } + } else { + switch (tp) { + case ASUS_THROTTLE_THERMAL_POLICY_LITE_DEFAULT: + *profile = PLATFORM_PROFILE_BALANCED; + break; + case ASUS_THROTTLE_THERMAL_POLICY_LITE_OVERBOOST: + *profile = PLATFORM_PROFILE_PERFORMANCE; + break; + case ASUS_THROTTLE_THERMAL_POLICY_LITE_SILENT: + *profile = PLATFORM_PROFILE_QUIET; + break; + default: + return -EINVAL; + } } return 0; @@ -3796,18 +3828,34 @@ static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof, asus = container_of(pprof, struct asus_wmi, platform_profile_handler); - switch (profile) { - case PLATFORM_PROFILE_PERFORMANCE: - tp = ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST; - break; - case PLATFORM_PROFILE_BALANCED: - tp = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; - break; - case PLATFORM_PROFILE_QUIET: - tp = ASUS_THROTTLE_THERMAL_POLICY_SILENT; - break; - default: - return -EOPNOTSUPP; + if (!asus->throttle_thermal_policy_lite) { + switch (profile) { + case PLATFORM_PROFILE_PERFORMANCE: + tp = ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST; + break; + case PLATFORM_PROFILE_BALANCED: + tp = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; + break; + case PLATFORM_PROFILE_QUIET: + tp = ASUS_THROTTLE_THERMAL_POLICY_SILENT; + break; + default: + return -EOPNOTSUPP; + } + } else { + switch (profile) { + case PLATFORM_PROFILE_PERFORMANCE: + tp = ASUS_THROTTLE_THERMAL_POLICY_LITE_OVERBOOST; + break; + case PLATFORM_PROFILE_BALANCED: + tp = ASUS_THROTTLE_THERMAL_POLICY_LITE_DEFAULT; + break; + case PLATFORM_PROFILE_QUIET: + tp = ASUS_THROTTLE_THERMAL_POLICY_LITE_SILENT; + break; + default: + return -EOPNOTSUPP; + } } asus->throttle_thermal_policy_mode = tp; diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h index 0aeeae1c1943..f37e34ea36a5 100644 --- a/include/linux/platform_data/x86/asus-wmi.h +++ b/include/linux/platform_data/x86/asus-wmi.h @@ -68,6 +68,7 @@ #define ASUS_WMI_DEVID_SCREENPAD_LIGHT 0x00050032 #define ASUS_WMI_DEVID_FAN_BOOST_MODE 0x00110018 #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY 0x00120075 +#define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_LITE 0x00110019 /* Misc */ #define ASUS_WMI_DEVID_PANEL_OD 0x00050019 -- 2.45.2 ^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 1/1] platform/x86: asus-wmi: Add lite thermal policy support 2024-07-31 11:35 ` [PATCH 1/1] platform/x86: asus-wmi: Add lite thermal policy support Joshua Leivenzon @ 2024-07-31 11:54 ` Mohamed Ghanmi 2024-08-01 14:05 ` Hans de Goede 0 siblings, 1 reply; 3+ messages in thread From: Mohamed Ghanmi @ 2024-07-31 11:54 UTC (permalink / raw) To: Joshua Leivenzon; +Cc: platform-driver-x86, Corentin Chary, Luke D . Jones Hi, On Wed, Jul 31, 2024 at 09:35:07PM +1000, Joshua Leivenzon wrote: > Some ASUS laptops, such as the Zenbook Duo 2024 (UX8406), use a different WMI > device ID to set the thermal policy. > > These devices tend to lack support for custom fan curve management, hence the > "lite" designation. > > Signed-off-by: Joshua Leivenzon <hacker1024@users.sourceforge.net> > --- > drivers/platform/x86/asus-wmi.c | 102 +++++++++++++++------ > include/linux/platform_data/x86/asus-wmi.h | 1 + > 2 files changed, 76 insertions(+), 27 deletions(-) > > diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c > index cc735931f97b..a89cbc063a3f 100644 > --- a/drivers/platform/x86/asus-wmi.c > +++ b/drivers/platform/x86/asus-wmi.c > @@ -93,9 +93,13 @@ module_param(fnlock_default, bool, 0444); > #define ASUS_FAN_BOOST_MODE_SILENT_MASK 0x02 > #define ASUS_FAN_BOOST_MODES_MASK 0x03 > > +#define ASUS_THROTTLE_THERMAL_POLICY_COUNT 3 > #define ASUS_THROTTLE_THERMAL_POLICY_DEFAULT 0 > #define ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST 1 > #define ASUS_THROTTLE_THERMAL_POLICY_SILENT 2 > +#define ASUS_THROTTLE_THERMAL_POLICY_LITE_DEFAULT 0 > +#define ASUS_THROTTLE_THERMAL_POLICY_LITE_OVERBOOST 2 > +#define ASUS_THROTTLE_THERMAL_POLICY_LITE_SILENT 1 > > #define USB_INTEL_XUSB2PR 0xD0 > #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 > @@ -287,6 +291,7 @@ struct asus_wmi { > bool kbd_rgb_state_available; > > bool throttle_thermal_policy_available; > + bool throttle_thermal_policy_lite; > u8 throttle_thermal_policy_mode; > > bool cpu_fan_curve_available; > @@ -3639,6 +3644,14 @@ static int throttle_thermal_policy_check_present(struct asus_wmi *asus) > err = asus_wmi_get_devstate(asus, > ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, > &result); > + if (err == -ENODEV) { > + err = asus_wmi_get_devstate(asus, > + ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_LITE, > + &result); > + asus->throttle_thermal_policy_lite = true; > + } else { > + asus->throttle_thermal_policy_lite = false; > + } > if (err) { > if (err == -ENODEV) > return 0; > @@ -3659,7 +3672,10 @@ static int throttle_thermal_policy_write(struct asus_wmi *asus) > > value = asus->throttle_thermal_policy_mode; > > - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, > + err = asus_wmi_set_devstate( > + asus->throttle_thermal_policy_lite > + ? ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_LITE > + : ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, > value, &retval); > > sysfs_notify(&asus->platform_device->dev.kobj, NULL, > @@ -3701,7 +3717,7 @@ static int throttle_thermal_policy_switch_next(struct asus_wmi *asus) > u8 new_mode = asus->throttle_thermal_policy_mode + 1; > int err; > > - if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT) > + if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_COUNT - 1) > new_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; > > asus->throttle_thermal_policy_mode = new_mode; > @@ -3740,7 +3756,7 @@ static ssize_t throttle_thermal_policy_store(struct device *dev, > if (result < 0) > return result; > > - if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT) > + if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_COUNT - 1) > return -EINVAL; > > asus->throttle_thermal_policy_mode = new_mode; > @@ -3771,18 +3787,34 @@ static int asus_wmi_platform_profile_get(struct platform_profile_handler *pprof, > > tp = asus->throttle_thermal_policy_mode; > > - switch (tp) { > - case ASUS_THROTTLE_THERMAL_POLICY_DEFAULT: > - *profile = PLATFORM_PROFILE_BALANCED; > - break; > - case ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST: > - *profile = PLATFORM_PROFILE_PERFORMANCE; > - break; > - case ASUS_THROTTLE_THERMAL_POLICY_SILENT: > - *profile = PLATFORM_PROFILE_QUIET; > - break; > - default: > - return -EINVAL; > + if (!asus->throttle_thermal_policy_lite) { > + switch (tp) { > + case ASUS_THROTTLE_THERMAL_POLICY_DEFAULT: > + *profile = PLATFORM_PROFILE_BALANCED; > + break; > + case ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST: > + *profile = PLATFORM_PROFILE_PERFORMANCE; > + break; > + case ASUS_THROTTLE_THERMAL_POLICY_SILENT: > + *profile = PLATFORM_PROFILE_QUIET; > + break; > + default: > + return -EINVAL; > + } > + } else { > + switch (tp) { > + case ASUS_THROTTLE_THERMAL_POLICY_LITE_DEFAULT: > + *profile = PLATFORM_PROFILE_BALANCED; > + break; > + case ASUS_THROTTLE_THERMAL_POLICY_LITE_OVERBOOST: > + *profile = PLATFORM_PROFILE_PERFORMANCE; > + break; > + case ASUS_THROTTLE_THERMAL_POLICY_LITE_SILENT: > + *profile = PLATFORM_PROFILE_QUIET; > + break; > + default: > + return -EINVAL; > + } > } > > return 0; > @@ -3796,18 +3828,34 @@ static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof, > > asus = container_of(pprof, struct asus_wmi, platform_profile_handler); > > - switch (profile) { > - case PLATFORM_PROFILE_PERFORMANCE: > - tp = ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST; > - break; > - case PLATFORM_PROFILE_BALANCED: > - tp = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; > - break; > - case PLATFORM_PROFILE_QUIET: > - tp = ASUS_THROTTLE_THERMAL_POLICY_SILENT; > - break; > - default: > - return -EOPNOTSUPP; > + if (!asus->throttle_thermal_policy_lite) { > + switch (profile) { > + case PLATFORM_PROFILE_PERFORMANCE: > + tp = ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST; > + break; > + case PLATFORM_PROFILE_BALANCED: > + tp = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; > + break; > + case PLATFORM_PROFILE_QUIET: > + tp = ASUS_THROTTLE_THERMAL_POLICY_SILENT; > + break; > + default: > + return -EOPNOTSUPP; > + } > + } else { > + switch (profile) { > + case PLATFORM_PROFILE_PERFORMANCE: > + tp = ASUS_THROTTLE_THERMAL_POLICY_LITE_OVERBOOST; > + break; > + case PLATFORM_PROFILE_BALANCED: > + tp = ASUS_THROTTLE_THERMAL_POLICY_LITE_DEFAULT; > + break; > + case PLATFORM_PROFILE_QUIET: > + tp = ASUS_THROTTLE_THERMAL_POLICY_LITE_SILENT; > + break; > + default: > + return -EOPNOTSUPP; > + } > } > > asus->throttle_thermal_policy_mode = tp; > diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h > index 0aeeae1c1943..f37e34ea36a5 100644 > --- a/include/linux/platform_data/x86/asus-wmi.h > +++ b/include/linux/platform_data/x86/asus-wmi.h > @@ -68,6 +68,7 @@ > #define ASUS_WMI_DEVID_SCREENPAD_LIGHT 0x00050032 > #define ASUS_WMI_DEVID_FAN_BOOST_MODE 0x00110018 > #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY 0x00120075 > +#define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_LITE 0x00110019 A patch already exists that fixes this issue but still not upstream It adds support for modern vivobook laptops and some newer zenbooks and uses platform profiles https://lore.kernel.org/platform-driver-x86/20240609144849.2532-2-mohamed.ghanmi@supcom.tn/ > > /* Misc */ > #define ASUS_WMI_DEVID_PANEL_OD 0x00050019 > -- > 2.45.2 > ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/1] platform/x86: asus-wmi: Add lite thermal policy support 2024-07-31 11:54 ` Mohamed Ghanmi @ 2024-08-01 14:05 ` Hans de Goede 0 siblings, 0 replies; 3+ messages in thread From: Hans de Goede @ 2024-08-01 14:05 UTC (permalink / raw) To: Mohamed Ghanmi, Joshua Leivenzon Cc: platform-driver-x86, Corentin Chary, Luke D . Jones Hi, On 7/31/24 1:54 PM, Mohamed Ghanmi wrote: > Hi, > > On Wed, Jul 31, 2024 at 09:35:07PM +1000, Joshua Leivenzon wrote: >> Some ASUS laptops, such as the Zenbook Duo 2024 (UX8406), use a different WMI >> device ID to set the thermal policy. >> >> These devices tend to lack support for custom fan curve management, hence the >> "lite" designation. >> >> Signed-off-by: Joshua Leivenzon <hacker1024@users.sourceforge.net> >> --- >> drivers/platform/x86/asus-wmi.c | 102 +++++++++++++++------ >> include/linux/platform_data/x86/asus-wmi.h | 1 + >> 2 files changed, 76 insertions(+), 27 deletions(-) >> >> diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c >> index cc735931f97b..a89cbc063a3f 100644 >> --- a/drivers/platform/x86/asus-wmi.c >> +++ b/drivers/platform/x86/asus-wmi.c >> @@ -93,9 +93,13 @@ module_param(fnlock_default, bool, 0444); >> #define ASUS_FAN_BOOST_MODE_SILENT_MASK 0x02 >> #define ASUS_FAN_BOOST_MODES_MASK 0x03 >> >> +#define ASUS_THROTTLE_THERMAL_POLICY_COUNT 3 >> #define ASUS_THROTTLE_THERMAL_POLICY_DEFAULT 0 >> #define ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST 1 >> #define ASUS_THROTTLE_THERMAL_POLICY_SILENT 2 >> +#define ASUS_THROTTLE_THERMAL_POLICY_LITE_DEFAULT 0 >> +#define ASUS_THROTTLE_THERMAL_POLICY_LITE_OVERBOOST 2 >> +#define ASUS_THROTTLE_THERMAL_POLICY_LITE_SILENT 1 >> >> #define USB_INTEL_XUSB2PR 0xD0 >> #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 >> @@ -287,6 +291,7 @@ struct asus_wmi { >> bool kbd_rgb_state_available; >> >> bool throttle_thermal_policy_available; >> + bool throttle_thermal_policy_lite; >> u8 throttle_thermal_policy_mode; >> >> bool cpu_fan_curve_available; >> @@ -3639,6 +3644,14 @@ static int throttle_thermal_policy_check_present(struct asus_wmi *asus) >> err = asus_wmi_get_devstate(asus, >> ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, >> &result); >> + if (err == -ENODEV) { >> + err = asus_wmi_get_devstate(asus, >> + ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_LITE, >> + &result); >> + asus->throttle_thermal_policy_lite = true; >> + } else { >> + asus->throttle_thermal_policy_lite = false; >> + } >> if (err) { >> if (err == -ENODEV) >> return 0; >> @@ -3659,7 +3672,10 @@ static int throttle_thermal_policy_write(struct asus_wmi *asus) >> >> value = asus->throttle_thermal_policy_mode; >> >> - err = asus_wmi_set_devstate(ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, >> + err = asus_wmi_set_devstate( >> + asus->throttle_thermal_policy_lite >> + ? ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_LITE >> + : ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY, >> value, &retval); >> >> sysfs_notify(&asus->platform_device->dev.kobj, NULL, >> @@ -3701,7 +3717,7 @@ static int throttle_thermal_policy_switch_next(struct asus_wmi *asus) >> u8 new_mode = asus->throttle_thermal_policy_mode + 1; >> int err; >> >> - if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT) >> + if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_COUNT - 1) >> new_mode = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; >> >> asus->throttle_thermal_policy_mode = new_mode; >> @@ -3740,7 +3756,7 @@ static ssize_t throttle_thermal_policy_store(struct device *dev, >> if (result < 0) >> return result; >> >> - if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_SILENT) >> + if (new_mode > ASUS_THROTTLE_THERMAL_POLICY_COUNT - 1) >> return -EINVAL; >> >> asus->throttle_thermal_policy_mode = new_mode; >> @@ -3771,18 +3787,34 @@ static int asus_wmi_platform_profile_get(struct platform_profile_handler *pprof, >> >> tp = asus->throttle_thermal_policy_mode; >> >> - switch (tp) { >> - case ASUS_THROTTLE_THERMAL_POLICY_DEFAULT: >> - *profile = PLATFORM_PROFILE_BALANCED; >> - break; >> - case ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST: >> - *profile = PLATFORM_PROFILE_PERFORMANCE; >> - break; >> - case ASUS_THROTTLE_THERMAL_POLICY_SILENT: >> - *profile = PLATFORM_PROFILE_QUIET; >> - break; >> - default: >> - return -EINVAL; >> + if (!asus->throttle_thermal_policy_lite) { >> + switch (tp) { >> + case ASUS_THROTTLE_THERMAL_POLICY_DEFAULT: >> + *profile = PLATFORM_PROFILE_BALANCED; >> + break; >> + case ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST: >> + *profile = PLATFORM_PROFILE_PERFORMANCE; >> + break; >> + case ASUS_THROTTLE_THERMAL_POLICY_SILENT: >> + *profile = PLATFORM_PROFILE_QUIET; >> + break; >> + default: >> + return -EINVAL; >> + } >> + } else { >> + switch (tp) { >> + case ASUS_THROTTLE_THERMAL_POLICY_LITE_DEFAULT: >> + *profile = PLATFORM_PROFILE_BALANCED; >> + break; >> + case ASUS_THROTTLE_THERMAL_POLICY_LITE_OVERBOOST: >> + *profile = PLATFORM_PROFILE_PERFORMANCE; >> + break; >> + case ASUS_THROTTLE_THERMAL_POLICY_LITE_SILENT: >> + *profile = PLATFORM_PROFILE_QUIET; >> + break; >> + default: >> + return -EINVAL; >> + } >> } >> >> return 0; >> @@ -3796,18 +3828,34 @@ static int asus_wmi_platform_profile_set(struct platform_profile_handler *pprof, >> >> asus = container_of(pprof, struct asus_wmi, platform_profile_handler); >> >> - switch (profile) { >> - case PLATFORM_PROFILE_PERFORMANCE: >> - tp = ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST; >> - break; >> - case PLATFORM_PROFILE_BALANCED: >> - tp = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; >> - break; >> - case PLATFORM_PROFILE_QUIET: >> - tp = ASUS_THROTTLE_THERMAL_POLICY_SILENT; >> - break; >> - default: >> - return -EOPNOTSUPP; >> + if (!asus->throttle_thermal_policy_lite) { >> + switch (profile) { >> + case PLATFORM_PROFILE_PERFORMANCE: >> + tp = ASUS_THROTTLE_THERMAL_POLICY_OVERBOOST; >> + break; >> + case PLATFORM_PROFILE_BALANCED: >> + tp = ASUS_THROTTLE_THERMAL_POLICY_DEFAULT; >> + break; >> + case PLATFORM_PROFILE_QUIET: >> + tp = ASUS_THROTTLE_THERMAL_POLICY_SILENT; >> + break; >> + default: >> + return -EOPNOTSUPP; >> + } >> + } else { >> + switch (profile) { >> + case PLATFORM_PROFILE_PERFORMANCE: >> + tp = ASUS_THROTTLE_THERMAL_POLICY_LITE_OVERBOOST; >> + break; >> + case PLATFORM_PROFILE_BALANCED: >> + tp = ASUS_THROTTLE_THERMAL_POLICY_LITE_DEFAULT; >> + break; >> + case PLATFORM_PROFILE_QUIET: >> + tp = ASUS_THROTTLE_THERMAL_POLICY_LITE_SILENT; >> + break; >> + default: >> + return -EOPNOTSUPP; >> + } >> } >> >> asus->throttle_thermal_policy_mode = tp; >> diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h >> index 0aeeae1c1943..f37e34ea36a5 100644 >> --- a/include/linux/platform_data/x86/asus-wmi.h >> +++ b/include/linux/platform_data/x86/asus-wmi.h >> @@ -68,6 +68,7 @@ >> #define ASUS_WMI_DEVID_SCREENPAD_LIGHT 0x00050032 >> #define ASUS_WMI_DEVID_FAN_BOOST_MODE 0x00110018 >> #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY 0x00120075 >> +#define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY_LITE 0x00110019 > > A patch already exists that fixes this issue but still not upstream > It adds support for modern vivobook laptops and some newer zenbooks > and uses platform profiles > > https://lore.kernel.org/platform-driver-x86/20240609144849.2532-2-mohamed.ghanmi@supcom.tn/ And I have just merged that patch and pushed it to my review-hans (soon to be pdx86/for-next) branch: https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git/log/?h=review-hans So I'm dropping this patch from the queue since this functionality is already implemented now. Regards, Hans ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2024-08-01 14:05 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20240731113507.178929-1-hacker1024@users.sourceforge.net>
2024-07-31 11:35 ` [PATCH 1/1] platform/x86: asus-wmi: Add lite thermal policy support Joshua Leivenzon
2024-07-31 11:54 ` Mohamed Ghanmi
2024-08-01 14:05 ` Hans de Goede
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox