summarylogtreecommitdiffstats
path: root/0005-platform-x86-asus-wmi-store-a-min-default-for-ppt-op.patch
diff options
context:
space:
mode:
authorTaijian2024-03-28 00:30:39 +0100
committerTaijian2024-03-28 00:30:39 +0100
commitfe2ced41debb6c571d6542f71ff7bb222144c15f (patch)
tree887a20df3b7a6fd4c712786542478ba4281d2e60 /0005-platform-x86-asus-wmi-store-a-min-default-for-ppt-op.patch
parent005a5394c20fa0495489d479c7c3a3a36172add5 (diff)
downloadaur-fe2ced41debb6c571d6542f71ff7bb222144c15f.tar.gz
update to 6.8.2
Diffstat (limited to '0005-platform-x86-asus-wmi-store-a-min-default-for-ppt-op.patch')
-rw-r--r--0005-platform-x86-asus-wmi-store-a-min-default-for-ppt-op.patch342
1 files changed, 342 insertions, 0 deletions
diff --git a/0005-platform-x86-asus-wmi-store-a-min-default-for-ppt-op.patch b/0005-platform-x86-asus-wmi-store-a-min-default-for-ppt-op.patch
new file mode 100644
index 000000000000..54402f004083
--- /dev/null
+++ b/0005-platform-x86-asus-wmi-store-a-min-default-for-ppt-op.patch
@@ -0,0 +1,342 @@
+From 6045f385154a2c0a4aaa692d13bb0fa14bbe1d12 Mon Sep 17 00:00:00 2001
+From: "Luke D. Jones" <luke@ljones.dev>
+Date: Mon, 11 Mar 2024 12:15:46 +1300
+Subject: [PATCH 5/5] platform/x86: asus-wmi: store a min default for ppt
+ options
+
+Laptops with any of the ppt or nv tunables default to the minimum setting
+on boot so we can safely assume a stored value is correct.
+
+This patch adds storing of those values in the local struct, and enables
+reading of those values back.
+
+Secondary to the above it renames some internal variables to be more
+consistent (which makes code grepping show all related parts)
+
+Signed-off-by: Luke D. Jones <luke@ljones.dev>
+---
+ drivers/platform/x86/asus-wmi.c | 141 +++++++++++++++++++++++++-------
+ 1 file changed, 111 insertions(+), 30 deletions(-)
+
+diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c
+index e4341abb71e0..482e23b55e1e 100644
+--- a/drivers/platform/x86/asus-wmi.c
++++ b/drivers/platform/x86/asus-wmi.c
+@@ -272,12 +272,19 @@ struct asus_wmi {
+
+ /* Tunables provided by ASUS for gaming laptops */
+ bool ppt_pl2_sppt_available;
++ u32 ppt_pl2_sppt;
+ bool ppt_pl1_spl_available;
++ u32 ppt_pl1_spl;
+ bool ppt_apu_sppt_available;
+- bool ppt_plat_sppt_available;
++ u32 ppt_apu_sppt;
++ bool ppt_platform_sppt_available;
++ u32 ppt_platform_sppt;
+ bool ppt_fppt_available;
+- bool nv_dyn_boost_available;
+- bool nv_temp_tgt_available;
++ u32 ppt_fppt;
++ bool nv_dynamic_boost_available;
++ u32 nv_dynamic_boost;
++ bool nv_temp_target_available;
++ u32 nv_temp_target;
+
+ bool kbd_rgb_mode_available;
+ u32 kbd_rgb_dev;
+@@ -999,11 +1006,10 @@ static ssize_t ppt_pl2_sppt_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
++ struct asus_wmi *asus = dev_get_drvdata(dev);
+ int result, err;
+ u32 value;
+
+- struct asus_wmi *asus = dev_get_drvdata(dev);
+-
+ result = kstrtou32(buf, 10, &value);
+ if (result)
+ return result;
+@@ -1022,22 +1028,31 @@ static ssize_t ppt_pl2_sppt_store(struct device *dev,
+ return -EIO;
+ }
+
++ asus->ppt_pl2_sppt = value;
+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_pl2_sppt");
+
+ return count;
+ }
+-static DEVICE_ATTR_WO(ppt_pl2_sppt);
++
++static ssize_t ppt_pl2_sppt_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct asus_wmi *asus = dev_get_drvdata(dev);
++
++ return sysfs_emit(buf, "%d\n", asus->ppt_pl2_sppt);
++}
++static DEVICE_ATTR_RW(ppt_pl2_sppt);
+
+ /* Tunable: PPT, Intel=PL1, AMD=SPL ******************************************/
+ static ssize_t ppt_pl1_spl_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
++ struct asus_wmi *asus = dev_get_drvdata(dev);
+ int result, err;
+ u32 value;
+
+- struct asus_wmi *asus = dev_get_drvdata(dev);
+-
+ result = kstrtou32(buf, 10, &value);
+ if (result)
+ return result;
+@@ -1056,22 +1071,30 @@ static ssize_t ppt_pl1_spl_store(struct device *dev,
+ return -EIO;
+ }
+
++ asus->ppt_pl1_spl = value;
+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_pl1_spl");
+
+ return count;
+ }
+-static DEVICE_ATTR_WO(ppt_pl1_spl);
++static ssize_t ppt_pl1_spl_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct asus_wmi *asus = dev_get_drvdata(dev);
++
++ return sysfs_emit(buf, "%d\n", asus->ppt_pl1_spl);
++}
++static DEVICE_ATTR_RW(ppt_pl1_spl);
+
+ /* Tunable: PPT APU FPPT ******************************************************/
+ static ssize_t ppt_fppt_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
++ struct asus_wmi *asus = dev_get_drvdata(dev);
+ int result, err;
+ u32 value;
+
+- struct asus_wmi *asus = dev_get_drvdata(dev);
+-
+ result = kstrtou32(buf, 10, &value);
+ if (result)
+ return result;
+@@ -1090,22 +1113,31 @@ static ssize_t ppt_fppt_store(struct device *dev,
+ return -EIO;
+ }
+
++ asus->ppt_fppt = value;
+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_fpu_sppt");
+
+ return count;
+ }
+-static DEVICE_ATTR_WO(ppt_fppt);
++
++static ssize_t ppt_fppt_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct asus_wmi *asus = dev_get_drvdata(dev);
++
++ return sysfs_emit(buf, "%d\n", asus->ppt_fppt);
++}
++static DEVICE_ATTR_RW(ppt_fppt);
+
+ /* Tunable: PPT APU SPPT *****************************************************/
+ static ssize_t ppt_apu_sppt_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
++ struct asus_wmi *asus = dev_get_drvdata(dev);
+ int result, err;
+ u32 value;
+
+- struct asus_wmi *asus = dev_get_drvdata(dev);
+-
+ result = kstrtou32(buf, 10, &value);
+ if (result)
+ return result;
+@@ -1124,22 +1156,31 @@ static ssize_t ppt_apu_sppt_store(struct device *dev,
+ return -EIO;
+ }
+
++ asus->ppt_apu_sppt = value;
+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_apu_sppt");
+
+ return count;
+ }
+-static DEVICE_ATTR_WO(ppt_apu_sppt);
++
++static ssize_t ppt_apu_sppt_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct asus_wmi *asus = dev_get_drvdata(dev);
++
++ return sysfs_emit(buf, "%d\n", asus->ppt_apu_sppt);
++}
++static DEVICE_ATTR_RW(ppt_apu_sppt);
+
+ /* Tunable: PPT platform SPPT ************************************************/
+ static ssize_t ppt_platform_sppt_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
++ struct asus_wmi *asus = dev_get_drvdata(dev);
+ int result, err;
+ u32 value;
+
+- struct asus_wmi *asus = dev_get_drvdata(dev);
+-
+ result = kstrtou32(buf, 10, &value);
+ if (result)
+ return result;
+@@ -1158,22 +1199,31 @@ static ssize_t ppt_platform_sppt_store(struct device *dev,
+ return -EIO;
+ }
+
++ asus->ppt_platform_sppt = value;
+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "ppt_platform_sppt");
+
+ return count;
+ }
+-static DEVICE_ATTR_WO(ppt_platform_sppt);
++
++static ssize_t ppt_platform_sppt_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct asus_wmi *asus = dev_get_drvdata(dev);
++
++ return sysfs_emit(buf, "%d\n", asus->ppt_platform_sppt);
++}
++static DEVICE_ATTR_RW(ppt_platform_sppt);
+
+ /* Tunable: NVIDIA dynamic boost *********************************************/
+ static ssize_t nv_dynamic_boost_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
++ struct asus_wmi *asus = dev_get_drvdata(dev);
+ int result, err;
+ u32 value;
+
+- struct asus_wmi *asus = dev_get_drvdata(dev);
+-
+ result = kstrtou32(buf, 10, &value);
+ if (result)
+ return result;
+@@ -1192,22 +1242,31 @@ static ssize_t nv_dynamic_boost_store(struct device *dev,
+ return -EIO;
+ }
+
++ asus->nv_dynamic_boost = value;
+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "nv_dynamic_boost");
+
+ return count;
+ }
+-static DEVICE_ATTR_WO(nv_dynamic_boost);
++
++static ssize_t nv_dynamic_boost_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct asus_wmi *asus = dev_get_drvdata(dev);
++
++ return sysfs_emit(buf, "%d\n", asus->nv_dynamic_boost);
++}
++static DEVICE_ATTR_RW(nv_dynamic_boost);
+
+ /* Tunable: NVIDIA temperature target ****************************************/
+ static ssize_t nv_temp_target_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf, size_t count)
+ {
++ struct asus_wmi *asus = dev_get_drvdata(dev);
+ int result, err;
+ u32 value;
+
+- struct asus_wmi *asus = dev_get_drvdata(dev);
+-
+ result = kstrtou32(buf, 10, &value);
+ if (result)
+ return result;
+@@ -1226,11 +1285,21 @@ static ssize_t nv_temp_target_store(struct device *dev,
+ return -EIO;
+ }
+
++ asus->nv_temp_target = value;
+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "nv_temp_target");
+
+ return count;
+ }
+-static DEVICE_ATTR_WO(nv_temp_target);
++
++static ssize_t nv_temp_target_show(struct device *dev,
++ struct device_attribute *attr,
++ char *buf)
++{
++ struct asus_wmi *asus = dev_get_drvdata(dev);
++
++ return sysfs_emit(buf, "%d\n", asus->nv_temp_target);
++}
++static DEVICE_ATTR_RW(nv_temp_target);
+
+ /* Battery ********************************************************************/
+
+@@ -4301,11 +4370,11 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj,
+ else if (attr == &dev_attr_ppt_apu_sppt.attr)
+ ok = asus->ppt_apu_sppt_available;
+ else if (attr == &dev_attr_ppt_platform_sppt.attr)
+- ok = asus->ppt_plat_sppt_available;
++ ok = asus->ppt_platform_sppt_available;
+ else if (attr == &dev_attr_nv_dynamic_boost.attr)
+- ok = asus->nv_dyn_boost_available;
++ ok = asus->nv_dynamic_boost_available;
+ else if (attr == &dev_attr_nv_temp_target.attr)
+- ok = asus->nv_temp_tgt_available;
++ ok = asus->nv_temp_target_available;
+ else if (attr == &dev_attr_boot_sound.attr)
+ ok = asus->boot_sound_available;
+ else if (attr == &dev_attr_panel_od.attr)
+@@ -4566,6 +4635,15 @@ static int asus_wmi_add(struct platform_device *pdev)
+ if (err)
+ goto fail_platform;
+
++ /* ensure defaults for tunables */
++ asus->ppt_pl2_sppt = 5;
++ asus->ppt_pl1_spl = 5;
++ asus->ppt_apu_sppt = 5;
++ asus->ppt_platform_sppt = 5;
++ asus->ppt_fppt = 5;
++ asus->nv_dynamic_boost = 5;
++ asus->nv_temp_target = 75;
++
+ asus->charge_mode_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_CHARGE_MODE);
+ asus->egpu_enable_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU);
+ asus->egpu_connect_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_EGPU_CONNECTED);
+@@ -4576,9 +4654,12 @@ static int asus_wmi_add(struct platform_device *pdev)
+ asus->ppt_pl1_spl_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_PL1_SPL);
+ asus->ppt_fppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_FPPT);
+ asus->ppt_apu_sppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_APU_SPPT);
+- asus->ppt_plat_sppt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PPT_PLAT_SPPT);
+- asus->nv_dyn_boost_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_NV_DYN_BOOST);
+- asus->nv_temp_tgt_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_NV_THERM_TARGET);
++ asus->ppt_platform_sppt_available = asus_wmi_dev_is_present(asus,
++ ASUS_WMI_DEVID_PPT_PLAT_SPPT);
++ asus->nv_dynamic_boost_available = asus_wmi_dev_is_present(asus,
++ ASUS_WMI_DEVID_NV_DYN_BOOST);
++ asus->nv_temp_target_available = asus_wmi_dev_is_present(asus,
++ ASUS_WMI_DEVID_NV_THERM_TARGET);
+ asus->boot_sound_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_BOOT_SOUND);
+ asus->panel_overdrive_available = asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_PANEL_OD);
+ asus->ally_mcu_usb_switch = acpi_has_method(NULL, ASUS_USB0_PWR_EC0_CSEE)
+--
+2.44.0
+