diff options
-rw-r--r-- | queue-6.6/platform-loongarch-laptop-add-backlight-power-control-support.patch | 145 | ||||
-rw-r--r-- | queue-6.6/series | 1 |
2 files changed, 146 insertions, 0 deletions
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 index 0000000000..754a69387d --- /dev/null +++ b/queue-6.6/platform-loongarch-laptop-add-backlight-power-control-support.patch @@ -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; + } diff --git a/queue-6.6/series b/queue-6.6/series index 3514a7e807..56ebb47c16 100644 --- a/queue-6.6/series +++ b/queue-6.6/series @@ -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 |