Re: [PATCH net-next,v2 1/2] net: phy: add LED dimming support
From: Andrew Lunn <andrew@lunn.ch>
Date: 2025-04-05 19:45:20
Also in:
linux-leds, lkml
On Sat, Apr 05, 2025 at 09:09:53PM +0200, Aleksander Jan Bajkowski wrote:
Some PHYs support LED dimming. The use case is a router that dims LEDs at night. PHYs from different manufacturers support a different number of brightness levels, so it was necessary to extend the API with the led_max_brightness() function. If this function is omitted, a default value is used, assuming that only two levels are supported. Signed-off-by: Aleksander Jan Bajkowski <redacted> Reviewed-by: Daniel Golle <daniel@makrotopia.org>
The merge window is still open at the moment, so you will need to repost next week.
quoted hunk ↗ jump to hunk
--- drivers/net/phy/phy_device.c | 7 ++++++- include/linux/phy.h | 7 +++++++ 2 files changed, 13 insertions(+), 1 deletion(-)diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c index 675fbd225378..4011ececca70 100644 --- a/drivers/net/phy/phy_device.c +++ b/drivers/net/phy/phy_device.c@@ -3106,7 +3106,12 @@ static int of_phy_led(struct phy_device *phydev, cdev->hw_control_get_device = phy_led_hw_control_get_device; #endif - cdev->max_brightness = 1; + if (phydev->drv->led_max_brightness) + cdev->max_brightness = + phydev->drv->led_max_brightness(phydev, index); + else + cdev->max_brightness = 1;
+ /** + * @led_max_brightness: Maximum number of brightness levels + * supported by hardware. When only two levels are supported + * i.e. LED_ON and LED_OFF the function can be omitted. + */ + int (*led_max_brightness)(struct phy_device *dev, u8 index);
We might want to consider types here. led_classdev->max_brightness is an unsigned int. Your callback returns int, so it could include -EOPNOTSUPP, -EINVAL, -ENODEV etc. There is no check for an error code, so max_brightness is going to end up ~ 2^32, and not work very well. Andrew