]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.6-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 23 Jun 2025 09:14:42 +0000 (11:14 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 23 Jun 2025 09:14:42 +0000 (11:14 +0200)
added patches:
platform-loongarch-laptop-add-backlight-power-control-support.patch

queue-6.6/platform-loongarch-laptop-add-backlight-power-control-support.patch [new file with mode: 0644]
queue-6.6/series

diff --git a/queue-6.6/platform-loongarch-laptop-add-backlight-power-control-support.patch b/queue-6.6/platform-loongarch-laptop-add-backlight-power-control-support.patch
new file mode 100644 (file)
index 0000000..754a693
--- /dev/null
@@ -0,0 +1,145 @@
+From 53c762b47f726e4079a1f06f684bce2fc0d56fba Mon Sep 17 00:00:00 2001
+From: Yao Zi <ziyao@disroot.org>
+Date: Thu, 5 Jun 2025 20:34:46 +0800
+Subject: platform/loongarch: laptop: Add backlight power control support
+
+From: Yao Zi <ziyao@disroot.org>
+
+commit 53c762b47f726e4079a1f06f684bce2fc0d56fba upstream.
+
+loongson_laptop_turn_{on,off}_backlight() are designed for controlling
+the power of the backlight, but they aren't really used in the driver
+previously.
+
+Unify these two functions since they only differ in arguments passed to
+ACPI method, and wire up loongson_laptop_backlight_update() to update
+the power state of the backlight as well. Tested on the TongFang L860-T2
+Loongson-3A5000 laptop.
+
+Cc: stable@vger.kernel.org
+Fixes: 6246ed09111f ("LoongArch: Add ACPI-based generic laptop driver")
+Signed-off-by: Yao Zi <ziyao@disroot.org>
+Signed-off-by: Huacai Chen <chenhuacai@loongson.cn>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/platform/loongarch/loongson-laptop.c |   73 +++++++++++++--------------
+ 1 file changed, 37 insertions(+), 36 deletions(-)
+
+--- a/drivers/platform/loongarch/loongson-laptop.c
++++ b/drivers/platform/loongarch/loongson-laptop.c
+@@ -56,8 +56,7 @@ static struct input_dev *generic_inputde
+ static acpi_handle hotkey_handle;
+ static struct key_entry hotkey_keycode_map[GENERIC_HOTKEY_MAP_MAX];
+-int loongson_laptop_turn_on_backlight(void);
+-int loongson_laptop_turn_off_backlight(void);
++static bool bl_powered;
+ static int loongson_laptop_backlight_update(struct backlight_device *bd);
+ /* 2. ACPI Helpers and device model */
+@@ -354,16 +353,42 @@ static int ec_backlight_level(u8 level)
+       return level;
+ }
++static int ec_backlight_set_power(bool state)
++{
++      int status;
++      union acpi_object arg0 = { ACPI_TYPE_INTEGER };
++      struct acpi_object_list args = { 1, &arg0 };
++
++      arg0.integer.value = state;
++      status = acpi_evaluate_object(NULL, "\\BLSW", &args, NULL);
++      if (ACPI_FAILURE(status)) {
++              pr_info("Loongson lvds error: 0x%x\n", status);
++              return -EIO;
++      }
++
++      return 0;
++}
++
+ static int loongson_laptop_backlight_update(struct backlight_device *bd)
+ {
+-      int lvl = ec_backlight_level(bd->props.brightness);
++      bool target_powered = !backlight_is_blank(bd);
++      int ret = 0, lvl = ec_backlight_level(bd->props.brightness);
+       if (lvl < 0)
+               return -EIO;
++
+       if (ec_set_brightness(lvl))
+               return -EIO;
+-      return 0;
++      if (target_powered != bl_powered) {
++              ret = ec_backlight_set_power(target_powered);
++              if (ret < 0)
++                      return ret;
++
++              bl_powered = target_powered;
++      }
++
++      return ret;
+ }
+ static int loongson_laptop_get_brightness(struct backlight_device *bd)
+@@ -384,7 +409,7 @@ static const struct backlight_ops backli
+ static int laptop_backlight_register(void)
+ {
+-      int status = 0;
++      int status = 0, ret;
+       struct backlight_properties props;
+       memset(&props, 0, sizeof(props));
+@@ -392,44 +417,20 @@ static int laptop_backlight_register(voi
+       if (!acpi_evalf(hotkey_handle, &status, "ECLL", "d"))
+               return -EIO;
++      ret = ec_backlight_set_power(true);
++      if (ret)
++              return ret;
++
++      bl_powered = true;
++
+       props.max_brightness = status;
+       props.brightness = ec_get_brightness();
++      props.power = FB_BLANK_UNBLANK;
+       props.type = BACKLIGHT_PLATFORM;
+       backlight_device_register("loongson_laptop",
+                               NULL, NULL, &backlight_laptop_ops, &props);
+-      return 0;
+-}
+-
+-int loongson_laptop_turn_on_backlight(void)
+-{
+-      int status;
+-      union acpi_object arg0 = { ACPI_TYPE_INTEGER };
+-      struct acpi_object_list args = { 1, &arg0 };
+-
+-      arg0.integer.value = 1;
+-      status = acpi_evaluate_object(NULL, "\\BLSW", &args, NULL);
+-      if (ACPI_FAILURE(status)) {
+-              pr_info("Loongson lvds error: 0x%x\n", status);
+-              return -ENODEV;
+-      }
+-
+-      return 0;
+-}
+-
+-int loongson_laptop_turn_off_backlight(void)
+-{
+-      int status;
+-      union acpi_object arg0 = { ACPI_TYPE_INTEGER };
+-      struct acpi_object_list args = { 1, &arg0 };
+-
+-      arg0.integer.value = 0;
+-      status = acpi_evaluate_object(NULL, "\\BLSW", &args, NULL);
+-      if (ACPI_FAILURE(status)) {
+-              pr_info("Loongson lvds error: 0x%x\n", status);
+-              return -ENODEV;
+-      }
+       return 0;
+ }
index 3514a7e80752412ee18adc67cd998f33b6aef356..56ebb47c164e4ef0731cdca95652193ac754188a 100644 (file)
@@ -276,3 +276,4 @@ arm-dts-am335x-bone-common-increase-mdio-reset-deassert-time.patch
 arm-dts-am335x-bone-common-increase-mdio-reset-deassert-delay-to-50ms.patch
 revert-cpufreq-tegra186-share-policy-per-cluster.patch
 smb-client-fix-first-command-failure-during-re-negotiation.patch
+platform-loongarch-laptop-add-backlight-power-control-support.patch