From 15229763faabc644f151b10125d5d93d407822b3 Mon Sep 17 00:00:00 2001 From: Maxim Laschinksy Date: Wed, 21 Jan 2026 08:27:41 +0100 Subject: [PATCH] leds: led-class-multicolor: Accept trailing RGB components - Allow shorter writes for <=3 sub-LEDs (e.g. "R,G") - Improve sysfs usability for RGB patterns - Maintain compatibility with full-length writes Signed-off-by: Maxim Laschinsky --- drivers/leds/led-class-multicolor.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/leds/led-class-multicolor.c b/drivers/leds/led-class-multicolor.c index ec62a4811613..f3fd043cb185 100644 --- a/drivers/leds/led-class-multicolor.c +++ b/drivers/leds/led-class-multicolor.c @@ -42,22 +42,27 @@ static ssize_t multi_intensity_store(struct device *dev, mutex_lock(&led_cdev->led_access); - for (i = 0; i < mcled_cdev->num_colors; i++) { + for (i = 0; i < LED_COLOR_ID_MAX; i++) { ret = sscanf(buf + offset, "%i%n", &intensity_value[i], &nrchars); - if (ret != 1) { - ret = -EINVAL; - goto err_out; - } + if (ret != 1) + break; offset += nrchars; } + /* Expect newline; reject surplus trailing chars */ offset++; if (offset < size) { ret = -EINVAL; goto err_out; } + /* Require at least the physical number of colors */ + if (i < mcled_cdev->num_colors) { + ret = -EINVAL; + goto err_out; + } + for (i = 0; i < mcled_cdev->num_colors; i++) mcled_cdev->subled_info[i].intensity = intensity_value[i];