diff options
Diffstat (limited to 'sys-kernel_arch-sources-g14_files-0039-asus-wmi-Add-panel-overdrive-functionality.patch')
-rw-r--r-- | sys-kernel_arch-sources-g14_files-0039-asus-wmi-Add-panel-overdrive-functionality.patch | 166 |
1 files changed, 0 insertions, 166 deletions
diff --git a/sys-kernel_arch-sources-g14_files-0039-asus-wmi-Add-panel-overdrive-functionality.patch b/sys-kernel_arch-sources-g14_files-0039-asus-wmi-Add-panel-overdrive-functionality.patch deleted file mode 100644 index 9ee246ce3398..000000000000 --- a/sys-kernel_arch-sources-g14_files-0039-asus-wmi-Add-panel-overdrive-functionality.patch +++ /dev/null @@ -1,166 +0,0 @@ -From 4fb0353bff3b881de7709b114d4607a0988c3420 Mon Sep 17 00:00:00 2001 -From: "Luke D. Jones" <luke@ljones.dev> -Date: Sat, 17 Jul 2021 20:13:21 +1200 -Subject: [PATCH 101/103] asus-wmi: Add panel overdrive functionality - -Some ASUS ROG laptops have the ability to drive the display panel -a higher rate to eliminate or reduce ghosting. - -Signed-off-by: Luke D. Jones <luke@ljones.dev> ---- - drivers/platform/x86/asus-wmi.c | 91 ++++++++++++++++++++++ - include/linux/platform_data/x86/asus-wmi.h | 1 + - 2 files changed, 92 insertions(+) - -diff --git a/drivers/platform/x86/asus-wmi.c b/drivers/platform/x86/asus-wmi.c -index ebaeb7bb80f5..cd881443bc2f 100644 ---- a/drivers/platform/x86/asus-wmi.c -+++ b/drivers/platform/x86/asus-wmi.c -@@ -216,6 +216,9 @@ struct asus_wmi { - // The RSOC controls the maximum charging percentage. - bool battery_rsoc_available; - -+ bool panel_overdrive_available; -+ bool panel_overdrive; -+ - struct hotplug_slot hotplug_slot; - struct mutex hotplug_lock; - struct mutex wmi_lock; -@@ -1221,6 +1224,86 @@ static int asus_wmi_rfkill_init(struct asus_wmi *asus) - return result; - } - -+/* Panel Overdrive ************************************************************/ -+static int panel_od_check_present(struct asus_wmi *asus) -+{ -+ u32 result; -+ int err; -+ -+ asus->panel_overdrive_available = false; -+ -+ err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_PANEL_OD, &result); -+ if (err) { -+ if (err == -ENODEV) -+ return 0; -+ return err; -+ } -+ -+ if (result & ASUS_WMI_DSTS_PRESENCE_BIT) { -+ asus->panel_overdrive_available = true; -+ asus->panel_overdrive = result & ASUS_WMI_DSTS_STATUS_BIT; -+ } -+ -+ return 0; -+} -+ -+static int panel_od_write(struct asus_wmi *asus) -+{ -+ int err; -+ u8 value; -+ u32 retval; -+ -+ value = asus->panel_overdrive; -+ -+ err = asus_wmi_set_devstate(ASUS_WMI_DEVID_PANEL_OD, value, &retval); -+ -+ if (err) { -+ pr_warn("Failed to set panel overdrive: %d\n", err); -+ return err; -+ } -+ -+ if (retval > 1 || retval < 0) { -+ pr_warn("Failed to set panel overdrive (retval): 0x%x\n", retval); -+ return -EIO; -+ } -+ -+ sysfs_notify(&asus->platform_device->dev.kobj, NULL, "panel_od"); -+ -+ return 0; -+} -+ -+static ssize_t panel_od_show(struct device *dev, -+ struct device_attribute *attr, char *buf) -+{ -+ struct asus_wmi *asus = dev_get_drvdata(dev); -+ bool mode = asus->panel_overdrive; -+ -+ return sysfs_emit(buf, "%d\n", mode); -+} -+ -+static ssize_t panel_od_store(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, size_t count) -+{ -+ int result; -+ bool overdrive; -+ struct asus_wmi *asus = dev_get_drvdata(dev); -+ -+ result = kstrtobool(buf, &overdrive); -+ if (result == -EINVAL) -+ return result; -+ -+ asus->panel_overdrive = overdrive; -+ result = panel_od_write(asus); -+ -+ if (result != 0) -+ return result; -+ -+ return count; -+} -+ -+static DEVICE_ATTR_RW(panel_od); -+ - /* Quirks *********************************************************************/ - - static void asus_wmi_set_xusb2pr(struct asus_wmi *asus) -@@ -2332,6 +2415,7 @@ static struct attribute *platform_attributes[] = { - &dev_attr_als_enable.attr, - &dev_attr_fan_boost_mode.attr, - &dev_attr_throttle_thermal_policy.attr, -+ &dev_attr_panel_od.attr, - NULL - }; - -@@ -2357,6 +2441,8 @@ static umode_t asus_sysfs_is_visible(struct kobject *kobj, - ok = asus->fan_boost_mode_available; - else if (attr == &dev_attr_throttle_thermal_policy.attr) - ok = asus->throttle_thermal_policy_available; -+ else if (attr == &dev_attr_panel_od.attr) -+ ok = asus->panel_overdrive_available; - - if (devid != -1) - ok = !(asus_wmi_get_devstate_simple(asus, devid) < 0); -@@ -2622,6 +2708,10 @@ static int asus_wmi_add(struct platform_device *pdev) - else - throttle_thermal_policy_set_default(asus); - -+ err = panel_od_check_present(asus); -+ if (err) -+ goto fail_panel_od; -+ - err = asus_wmi_sysfs_init(asus->platform_device); - if (err) - goto fail_sysfs; -@@ -2709,6 +2799,7 @@ static int asus_wmi_add(struct platform_device *pdev) - fail_throttle_thermal_policy: - fail_fan_boost_mode: - fail_platform: -+fail_panel_od: - kfree(asus); - return err; - } -diff --git a/include/linux/platform_data/x86/asus-wmi.h b/include/linux/platform_data/x86/asus-wmi.h -index 2f274cf52805..428aea701c7b 100644 ---- a/include/linux/platform_data/x86/asus-wmi.h -+++ b/include/linux/platform_data/x86/asus-wmi.h -@@ -61,6 +61,7 @@ - #define ASUS_WMI_DEVID_THROTTLE_THERMAL_POLICY 0x00120075 - - /* Misc */ -+#define ASUS_WMI_DEVID_PANEL_OD 0x00050019 - #define ASUS_WMI_DEVID_CAMERA 0x00060013 - #define ASUS_WMI_DEVID_LID_FLIP 0x00060062 - --- -2.32.0 - |