summarylogtreecommitdiffstats
path: root/0001-hid-asus-reset-the-backlight-brightness-level-on-resume.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-hid-asus-reset-the-backlight-brightness-level-on-resume.patch')
-rw-r--r--0001-hid-asus-reset-the-backlight-brightness-level-on-resume.patch59
1 files changed, 59 insertions, 0 deletions
diff --git a/0001-hid-asus-reset-the-backlight-brightness-level-on-resume.patch b/0001-hid-asus-reset-the-backlight-brightness-level-on-resume.patch
new file mode 100644
index 000000000000..59698ca0f7cc
--- /dev/null
+++ b/0001-hid-asus-reset-the-backlight-brightness-level-on-resume.patch
@@ -0,0 +1,59 @@
+From ca054bb924b349c586d783e4473c4cab404c40a1 Mon Sep 17 00:00:00 2001
+From: Denis Benato <benato.denis96@gmail.com>
+Date: Fri, 17 Nov 2023 14:15:56 +1300
+Subject: [PATCH] HID: hid-asus: reset the backlight brightness level on resume
+
+Some devices managed by this driver automatically set brightness to 0
+before entering a suspended state and reset it back to a default
+brightness level after the resume:
+this has the effect of having the kernel report wrong brightness
+status after a sleep, and on some devices (like the Asus RC71L) that
+brightness is the intensity of LEDs directly facing the user.
+
+Fix the above issue by setting back brightness to the level it had
+before entering a sleep state.
+
+Signed-off-by: Denis Benato <benato.denis96@gmail.com>
+Signed-off-by: Luke D. Jones <luke@ljones.dev>
+Signed-off-by: Jiri Kosina <jkosina@suse.cz>
+---
+ drivers/hid/hid-asus.c | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
+index b70673a929a1ed..78cdfb8b9a7aeb 100644
+--- a/drivers/hid/hid-asus.c
++++ b/drivers/hid/hid-asus.c
+@@ -1000,6 +1000,24 @@ static int asus_start_multitouch(struct hid_device *hdev)
+ return 0;
+ }
+
++static int __maybe_unused asus_resume(struct hid_device *hdev) {
++ struct asus_drvdata *drvdata = hid_get_drvdata(hdev);
++ int ret = 0;
++
++ if (drvdata->kbd_backlight) {
++ const u8 buf[] = { FEATURE_KBD_REPORT_ID, 0xba, 0xc5, 0xc4,
++ drvdata->kbd_backlight->cdev.brightness };
++ ret = asus_kbd_set_report(hdev, buf, sizeof(buf));
++ if (ret < 0) {
++ hid_err(hdev, "Asus failed to set keyboard backlight: %d\n", ret);
++ goto asus_resume_err;
++ }
++ }
++
++asus_resume_err:
++ return ret;
++}
++
+ static int __maybe_unused asus_reset_resume(struct hid_device *hdev)
+ {
+ struct asus_drvdata *drvdata = hid_get_drvdata(hdev);
+@@ -1294,6 +1312,7 @@ static struct hid_driver asus_driver = {
+ .input_configured = asus_input_configured,
+ #ifdef CONFIG_PM
+ .reset_resume = asus_reset_resume,
++ .resume = asus_resume,
+ #endif
+ .event = asus_event,
+ .raw_event = asus_raw_event