From: Lee Jones <lee@kernel.org>
To: Martijn de Gouw <martijn.de.gouw@prodrive-technologies.com>
Cc: Jean-Jacques Hiblot <jjhiblot@traphandler.com>,
Pavel Machek <pavel@kernel.org>,
linux-leds@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH] leds: group-multicolor: Add support for initial value.
Date: Wed, 25 Mar 2026 15:40:17 +0000 [thread overview]
Message-ID: <20260325154017.GE1141718@google.com> (raw)
In-Reply-To: <20260316201321.2789158-1-martijn.de.gouw@prodrive-technologies.com>
On Mon, 16 Mar 2026, Martijn de Gouw wrote:
> When the driver is loaded, it turned off all LEDs in the group. This
> patch changes the driver to take over existing LED states and set
> the brighness and intensity in the group accordingly.
>
> Signed-off-by: Martijn de Gouw <martijn.de.gouw@prodrive-technologies.com>
> ---
> Changes in v3:
> - Use is_on boolean instead of storing the max_brightness twice
> - Link to v2: https://lore.kernel.org/linux-leds/20251124210521.2064660-1-martijn.de.gouw@prodrive-technologies.com/
>
> Changes in v2:
> - Fix multiline comments
> - Improve comments
> - Link to v1: https://lore.kernel.org/linux-leds/20251111204556.2803878-1-martijn.de.gouw@prodrive-technologies.com/
>
> ---
> drivers/leds/rgb/leds-group-multicolor.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/leds/rgb/leds-group-multicolor.c b/drivers/leds/rgb/leds-group-multicolor.c
> index 548c7dd63ba1e..ab46537697d76 100644
> --- a/drivers/leds/rgb/leds-group-multicolor.c
> +++ b/drivers/leds/rgb/leds-group-multicolor.c
> @@ -69,6 +69,7 @@ static int leds_gmc_probe(struct platform_device *pdev)
> struct mc_subled *subled;
> struct leds_multicolor *priv;
> unsigned int max_brightness = 0;
> + bool is_on = false;
> int i, ret, count = 0, common_flags = 0;
>
> priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
> @@ -96,6 +97,13 @@ static int leds_gmc_probe(struct platform_device *pdev)
>
> max_brightness = max(max_brightness, led_cdev->max_brightness);
>
> + /*
> + * If any LED is on, set brightness to the max brightness.
> + * The actual brightness of the LED is set as intensity value.
> + */
> + if (led_cdev->brightness)
> + is_on = true;
> +
> count++;
> }
>
> @@ -109,14 +117,16 @@ static int leds_gmc_probe(struct platform_device *pdev)
>
> subled[i].color_index = led_cdev->color;
>
> - /* Configure the LED intensity to its maximum */
> - subled[i].intensity = max_brightness;
> + /* Configure the LED intensity to its current brightness */
> + subled[i].intensity = DIV_ROUND_CLOSEST(led_cdev->brightness * max_brightness,
> + led_cdev->max_brightness);
There are a couple of potential issues on this line.
'led_cdev->max_brightness' could theoretically be zero, which would
cause a division-by-zero fault. While the core tries to prevent this, a
defensive check might be worth while.
The multiplication 'led_cdev->brightness * max_brightness' could overflow
if both values are large. It would be safer to cast the multiplication
to u64, like: (u64)led_cdev->brightness
Finally, and this applies to the read in the first loop as well, the
brightness field of a led_classdev is protected by 'led_sem'. To avoid a
race condition with userspace (e.g., writing to the brightness via
sysfs), we should acquire this lock before reading 'led_cdev->brightness'.
> }
>
> /* Initialise the multicolor's LED class device */
> cdev = &priv->mc_cdev.led_cdev;
> cdev->brightness_set_blocking = leds_gmc_set;
> cdev->max_brightness = max_brightness;
> + cdev->brightness = is_on ? max_brightness : 0;
> cdev->color = LED_COLOR_ID_MULTI;
> priv->mc_cdev.num_colors = count;
>
> --
> 2.39.2
>
>
--
Lee Jones [李琼斯]
next prev parent reply other threads:[~2026-03-25 15:40 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-16 20:13 [PATCH] leds: group-multicolor: Add support for initial value Martijn de Gouw
2026-03-25 15:40 ` Lee Jones [this message]
-- strict thread matches above, loose matches on Subject: below --
2026-02-09 17:15 Martijn de Gouw
2026-03-05 18:11 ` Lee Jones
2025-11-11 20:45 Martijn de Gouw
2025-11-19 16:51 ` Lee Jones
2025-11-19 18:24 ` Martijn de Gouw
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260325154017.GE1141718@google.com \
--to=lee@kernel.org \
--cc=jjhiblot@traphandler.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=martijn.de.gouw@prodrive-technologies.com \
--cc=pavel@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.