[PATCH] leds: set max_brightness to 1 for on/off-only drivers
From: MYYDAQ
Date: Tue Aug 25 2026 - 03:11:19 EST
The following drivers implement their brightness_set() callback as a
pure on/off switch: any nonzero brightness value turns the LED on, and
there is no way to request intermediate levels. They still keep the
default max_brightness of LED_FULL (255), so user space writing e.g.
"100" or "200" to the brightness sysfs attribute produces exactly the
same hardware state, which is misleading and violates the first item of
the drivers/leds/TODO list ("On/off LEDs should have max_brightness of
1").
Address this by setting max_brightness to 1 for all on/off-only LED
drivers in drivers/leds, and by using LED_ON instead of LED_FULL for
their initial brightness values and brightness_get() results:
ariel, bcm6328, bcm6358, cobalt-qube, cobalt-raq, hp6xx,
ipaq-micro, locomo, menf21bmc, net48xx, ot200, rb532, ss4200,
syscon, wrap
Signed-off-by: MYYDAQ <xmmntnbklsa917813@xxxxxxx>
---
drivers/leds/leds-ariel.c | 1 +
drivers/leds/leds-bcm6328.c | 3 ++-
drivers/leds/leds-bcm6358.c | 3 ++-
drivers/leds/leds-cobalt-qube.c | 3 ++-
drivers/leds/leds-cobalt-raq.c | 2 ++
drivers/leds/leds-hp6xx.c | 2 ++
drivers/leds/leds-ipaq-micro.c | 1 +
drivers/leds/leds-locomo.c | 2 ++
drivers/leds/leds-menf21bmc.c | 1 +
drivers/leds/leds-net48xx.c | 1 +
drivers/leds/leds-ot200.c | 1 +
drivers/leds/leds-rb532.c | 3 ++-
drivers/leds/leds-ss4200.c | 6 ++++--
drivers/leds/leds-syscon.c | 1 +
drivers/leds/leds-wrap.c | 3 +++
15 files changed, 27 insertions(+), 6 deletions(-)
diff --git a/drivers/leds/leds-ariel.c b/drivers/leds/leds-ariel.c
index dd319c7..9f1a11d 100644
--- a/drivers/leds/leds-ariel.c
+++ b/drivers/leds/leds-ariel.c
@@ -111,6 +111,7 @@ static int ariel_led_probe(struct platform_device *pdev)
leds[i].led_cdev.brightness_get = ariel_led_get;
leds[i].led_cdev.brightness_set = ariel_led_set;
leds[i].led_cdev.blink_set = ariel_blink_set;
+ leds[i].led_cdev.max_brightness = 1;
ret = devm_led_classdev_register(dev, &leds[i].led_cdev);
if (ret)
diff --git a/drivers/leds/leds-bcm6328.c b/drivers/leds/leds-bcm6328.c
index 592bbf4..0ccffc6 100644
--- a/drivers/leds/leds-bcm6328.c
+++ b/drivers/leds/leds-bcm6328.c
@@ -366,7 +366,7 @@ static int bcm6328_led(struct device *dev, struct device_node *nc, u32 reg,
val &= BCM6328_LED_MODE_MASK;
if ((led->active_low && val == BCM6328_LED_MODE_OFF) ||
(!led->active_low && val == BCM6328_LED_MODE_ON))
- led->cdev.brightness = LED_FULL;
+ led->cdev.brightness = LED_ON;
else
led->cdev.brightness = LED_OFF;
break;
@@ -378,6 +378,7 @@ static int bcm6328_led(struct device *dev, struct device_node *nc, u32 reg,
led->cdev.brightness_set = bcm6328_led_set;
led->cdev.blink_set = bcm6328_blink_set;
+ led->cdev.max_brightness = 1;
rc = devm_led_classdev_register_ext(dev, &led->cdev, &init_data);
if (rc < 0)
diff --git a/drivers/leds/leds-bcm6358.c b/drivers/leds/leds-bcm6358.c
index 51fcff2..291a587 100644
--- a/drivers/leds/leds-bcm6358.c
+++ b/drivers/leds/leds-bcm6358.c
@@ -122,7 +122,7 @@ static int bcm6358_led(struct device *dev, struct device_node *nc, u32 reg,
val = bcm6358_led_read(led->mem + BCM6358_REG_MODE);
val &= BIT(led->pin);
if ((led->active_low && !val) || (!led->active_low && val))
- led->cdev.brightness = LED_FULL;
+ led->cdev.brightness = LED_ON;
else
led->cdev.brightness = LED_OFF;
break;
@@ -133,6 +133,7 @@ static int bcm6358_led(struct device *dev, struct device_node *nc, u32 reg,
bcm6358_led_set(&led->cdev, led->cdev.brightness);
led->cdev.brightness_set = bcm6358_led_set;
+ led->cdev.max_brightness = 1;
rc = devm_led_classdev_register_ext(dev, &led->cdev, &init_data);
if (rc < 0)
diff --git a/drivers/leds/leds-cobalt-qube.c b/drivers/leds/leds-cobalt-qube.c
index ef22e1e..204d69e 100644
--- a/drivers/leds/leds-cobalt-qube.c
+++ b/drivers/leds/leds-cobalt-qube.c
@@ -29,7 +29,8 @@ static void qube_front_led_set(struct led_classdev *led_cdev,
static struct led_classdev qube_front_led = {
.name = "qube::front",
- .brightness = LED_FULL,
+ .brightness = LED_ON,
+ .max_brightness = 1,
.brightness_set = qube_front_led_set,
.default_trigger = "default-on",
};
diff --git a/drivers/leds/leds-cobalt-raq.c b/drivers/leds/leds-cobalt-raq.c
index 045c239..4d1735d 100644
--- a/drivers/leds/leds-cobalt-raq.c
+++ b/drivers/leds/leds-cobalt-raq.c
@@ -39,6 +39,7 @@ static void raq_web_led_set(struct led_classdev *led_cdev,
static struct led_classdev raq_web_led = {
.name = "raq::web",
.brightness_set = raq_web_led_set,
+ .max_brightness = 1,
};
static void raq_power_off_led_set(struct led_classdev *led_cdev,
@@ -60,6 +61,7 @@ static void raq_power_off_led_set(struct led_classdev *led_cdev,
static struct led_classdev raq_power_off_led = {
.name = "raq::power-off",
.brightness_set = raq_power_off_led_set,
+ .max_brightness = 1,
.default_trigger = "power-off",
};
diff --git a/drivers/leds/leds-hp6xx.c b/drivers/leds/leds-hp6xx.c
index 54af9e6..03a2638 100644
--- a/drivers/leds/leds-hp6xx.c
+++ b/drivers/leds/leds-hp6xx.c
@@ -42,6 +42,7 @@ static struct led_classdev hp6xx_red_led = {
.name = "hp6xx:red",
.default_trigger = "hp6xx-charge",
.brightness_set = hp6xxled_red_set,
+ .max_brightness = 1,
.flags = LED_CORE_SUSPENDRESUME,
};
@@ -49,6 +50,7 @@ static struct led_classdev hp6xx_green_led = {
.name = "hp6xx:green",
.default_trigger = "disk-activity",
.brightness_set = hp6xxled_green_set,
+ .max_brightness = 1,
.flags = LED_CORE_SUSPENDRESUME,
};
diff --git a/drivers/leds/leds-ipaq-micro.c b/drivers/leds/leds-ipaq-micro.c
index 504a95b..aae3e13 100644
--- a/drivers/leds/leds-ipaq-micro.c
+++ b/drivers/leds/leds-ipaq-micro.c
@@ -102,6 +102,7 @@ static struct led_classdev micro_led = {
.name = "led-ipaq-micro",
.brightness_set_blocking = micro_leds_brightness_set,
.blink_set = micro_leds_blink_set,
+ .max_brightness = 1,
.flags = LED_CORE_SUSPENDRESUME,
};
diff --git a/drivers/leds/leds-locomo.c b/drivers/leds/leds-locomo.c
index 9aa3fcc..8dc162f 100644
--- a/drivers/leds/leds-locomo.c
+++ b/drivers/leds/leds-locomo.c
@@ -43,12 +43,14 @@ static struct led_classdev locomo_led0 = {
.name = "locomo:amber:charge",
.default_trigger = "main-battery-charging",
.brightness_set = locomoled_brightness_set0,
+ .max_brightness = 1,
};
static struct led_classdev locomo_led1 = {
.name = "locomo:green:mail",
.default_trigger = "nand-disk",
.brightness_set = locomoled_brightness_set1,
+ .max_brightness = 1,
};
static int locomoled_probe(struct locomo_dev *ldev)
diff --git a/drivers/leds/leds-menf21bmc.c b/drivers/leds/leds-menf21bmc.c
index 6b1b471..8d7b234 100644
--- a/drivers/leds/leds-menf21bmc.c
+++ b/drivers/leds/leds-menf21bmc.c
@@ -82,6 +82,7 @@ static int menf21bmc_led_probe(struct platform_device *pdev)
for (i = 0; i < ARRAY_SIZE(leds); i++) {
leds[i].cdev.name = leds[i].name;
leds[i].cdev.brightness_set = menf21bmc_led_set;
+ leds[i].cdev.max_brightness = 1;
leds[i].i2c_client = i2c_client;
ret = devm_led_classdev_register(&pdev->dev, &leds[i].cdev);
if (ret < 0) {
diff --git a/drivers/leds/leds-net48xx.c b/drivers/leds/leds-net48xx.c
index a93468c..1dd9dc5 100644
--- a/drivers/leds/leds-net48xx.c
+++ b/drivers/leds/leds-net48xx.c
@@ -31,6 +31,7 @@ static void net48xx_error_led_set(struct led_classdev *led_cdev,
static struct led_classdev net48xx_error_led = {
.name = "net48xx::error",
.brightness_set = net48xx_error_led_set,
+ .max_brightness = 1,
.flags = LED_CORE_SUSPENDRESUME,
};
diff --git a/drivers/leds/leds-ot200.c b/drivers/leds/leds-ot200.c
index 12af112..17b72e3 100644
--- a/drivers/leds/leds-ot200.c
+++ b/drivers/leds/leds-ot200.c
@@ -123,6 +123,7 @@ static int ot200_led_probe(struct platform_device *pdev)
leds[i].cdev.name = leds[i].name;
leds[i].cdev.brightness_set = ot200_led_brightness_set;
+ leds[i].cdev.max_brightness = 1;
ret = devm_led_classdev_register(&pdev->dev, &leds[i].cdev);
if (ret < 0)
diff --git a/drivers/leds/leds-rb532.c b/drivers/leds/leds-rb532.c
index 782e1c1..aba17f5 100644
--- a/drivers/leds/leds-rb532.c
+++ b/drivers/leds/leds-rb532.c
@@ -27,12 +27,13 @@ static void rb532_led_set(struct led_classdev *cdev,
static enum led_brightness rb532_led_get(struct led_classdev *cdev)
{
- return (get_latch_u5() & LO_ULED) ? LED_FULL : LED_OFF;
+ return (get_latch_u5() & LO_ULED) ? LED_ON : LED_OFF;
}
static struct led_classdev rb532_uled = {
.name = "uled",
.brightness_set = rb532_led_set,
+ .max_brightness = 1,
.brightness_get = rb532_led_get,
.default_trigger = "nand-disk",
};
diff --git a/drivers/leds/leds-ss4200.c b/drivers/leds/leds-ss4200.c
index f24ca75..726b608 100644
--- a/drivers/leds/leds-ss4200.c
+++ b/drivers/leds/leds-ss4200.c
@@ -214,7 +214,8 @@ static u32 nasgpio_led_get_attr(struct led_classdev *led_cdev, u32 port)
/*
* There is actual brightness control in the hardware,
* but it is via smbus commands and not implemented
- * in this driver.
+ * in this driver, so the LED is treated as on/off and
+ * max_brightness is set to 1.
*/
static void nasgpio_led_set_brightness(struct led_classdev *led_cdev,
enum led_brightness brightness)
@@ -487,9 +488,10 @@ static int register_nasgpio_led(int led_nr)
led->name = nas_led->name;
led->brightness = LED_OFF;
if (nasgpio_led_get_attr(led, GP_LVL))
- led->brightness = LED_FULL;
+ led->brightness = LED_ON;
led->brightness_set = nasgpio_led_set_brightness;
led->blink_set = nasgpio_led_set_blink;
+ led->max_brightness = 1;
led->groups = nasgpio_led_groups;
return led_classdev_register(&nas_gpio_pci_dev->dev, led);
diff --git a/drivers/leds/leds-syscon.c b/drivers/leds/leds-syscon.c
index d633ad5..acee7db 100644
--- a/drivers/leds/leds-syscon.c
+++ b/drivers/leds/leds-syscon.c
@@ -110,6 +110,7 @@ static int syscon_led_probe(struct platform_device *pdev)
sled->state = false;
}
sled->cdev.brightness_set = syscon_led_set;
+ sled->cdev.max_brightness = 1;
ret = devm_led_classdev_register_ext(dev, &sled->cdev, &init_data);
if (ret < 0)
diff --git a/drivers/leds/leds-wrap.c b/drivers/leds/leds-wrap.c
index 794697e..348c06b 100644
--- a/drivers/leds/leds-wrap.c
+++ b/drivers/leds/leds-wrap.c
@@ -53,6 +53,7 @@ static void wrap_extra_led_set(struct led_classdev *led_cdev,
static struct led_classdev wrap_power_led = {
.name = "wrap::power",
.brightness_set = wrap_power_led_set,
+ .max_brightness = 1,
.default_trigger = "default-on",
.flags = LED_CORE_SUSPENDRESUME,
};
@@ -60,12 +61,14 @@ static struct led_classdev wrap_power_led = {
static struct led_classdev wrap_error_led = {
.name = "wrap::error",
.brightness_set = wrap_error_led_set,
+ .max_brightness = 1,
.flags = LED_CORE_SUSPENDRESUME,
};
static struct led_classdev wrap_extra_led = {
.name = "wrap::extra",
.brightness_set = wrap_extra_led_set,
+ .max_brightness = 1,
.flags = LED_CORE_SUSPENDRESUME,
};