[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAAhV-H7RBcaAP8WjjrX20cvuMixarqyeTLoMPdb8QMztz_648g@mail.gmail.com>
Date: Tue, 3 Jun 2025 12:16:57 +0800
From: Huacai Chen <chenhuacai@...nel.org>
To: Yao Zi <ziyao@...root.org>
Cc: Jianmin Lv <lvjianmin@...ngson.cn>, WANG Xuerui <kernel@...0n.name>,
linux-kernel@...r.kernel.org, loongarch@...ts.linux.dev,
Mingcong Bai <jeffbai@...c.io>, Kexy Biscuit <kexybiscuit@...c.io>
Subject: Re: [PATCH 2/2] platform/loongarch: laptop: Support backlight power control
On Sat, May 31, 2025 at 7:39 PM Yao Zi <ziyao@...root.org> wrote:
>
> loongson_laptop_turn_{on,off}_backlight() are designed for controlling
> 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
> power state of the backlight as well. Tested on TongFang L860-T2 3A5000
> laptop.
>
> Signed-off-by: Yao Zi <ziyao@...root.org>
> ---
> drivers/platform/loongarch/loongson-laptop.c | 53 +++++++-------------
> 1 file changed, 19 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/platform/loongarch/loongson-laptop.c b/drivers/platform/loongarch/loongson-laptop.c
> index 828bd62e3596..f01e53b1c84d 100644
> --- a/drivers/platform/loongarch/loongson-laptop.c
> +++ b/drivers/platform/loongarch/loongson-laptop.c
> @@ -56,8 +56,6 @@ static struct input_dev *generic_inputdev;
> 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 int loongson_laptop_backlight_update(struct backlight_device *bd);
>
> /* 2. ACPI Helpers and device model */
> @@ -354,6 +352,22 @@ 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);
> @@ -363,6 +377,8 @@ static int loongson_laptop_backlight_update(struct backlight_device *bd)
> if (ec_set_brightness(lvl))
> return -EIO;
>
> + ec_backlight_set_power(bd->props.power == BACKLIGHT_POWER_ON ? true : false);
It is better to check the status before setting, because the EC
firmware may not be as robust as needed, a checking can reduce
interactions between kernel and EC.
There is an example: dp_aux_backlight_update_status() in
drivers/gpu/drm/display/drm_dp_helper.c.
> +
> return 0;
> }
>
> @@ -394,6 +410,7 @@ static int laptop_backlight_register(void)
>
> props.brightness = ec_get_brightness();
> props.max_brightness = status;
> + props.power = BACKLIGHT_POWER_ON;
> props.type = BACKLIGHT_PLATFORM;
>
> backlight_device_register("loongson_laptop",
> @@ -402,38 +419,6 @@ static int laptop_backlight_register(void)
> 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;
> -}
I prefer to keep them, in downstream kernels there are users of them,
I don't want to add them back if one day those users are upstream.
Huacai
> -
> static int __init event_init(struct generic_sub_driver *sub_driver)
> {
> int ret;
> --
> 2.49.0
>
>
Powered by blists - more mailing lists