From 89381af99844cb77517d3fbdf67c8f0ca727b9a9 Mon Sep 17 00:00:00 2001 From: Kaloyan Naumov Date: Tue, 13 Oct 2026 17:30:30 +0000 Subject: [PATCH] realtek: rtl931x: set the LED interface mode from realtek,led-mode The rtl931x LED setup always selects serial mode. Boards whose port LEDs are wired for scan mode stay dark with it. The rtl930x driver already reads the interface mode from "realtek,led-mode"; read it on rtl931x too. Without the property the driver selects serial mode, as before. A value outside 1-3 is reported and also falls back to serial mode. No rtl931x DTS sets the property yet, so other boards are unchanged. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Kaloyan Naumov Link: https://github.com/openwrt/openwrt/pull/25576 Signed-off-by: Jonas Jelonek --- .../files-6.18/drivers/net/dsa/rtl83xx/rtl931x.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl931x.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl931x.c index 06d70cc2b5d..8109dbe35a5 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl931x.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl931x.c @@ -267,6 +267,7 @@ static void rtldsa_931x_led_init(struct otto_dsa_priv *priv) struct device *dev = priv->dev; struct device_node *node; u8 leds_in_set[4] = {}; + u32 led_mode = 1; u32 clk_freq; int ret; @@ -372,8 +373,13 @@ static void rtldsa_931x_led_init(struct otto_dsa_priv *priv) sw_w32_mask(0, set << pos, RTL931X_LED_PORT_FIB_SET_SEL_CTRL(i)); } - /* Set LED mode to serial (0x1) */ - sw_w32_mask(0x3, 0x1, RTL931X_LED_GLB_CTRL); + /* LED interface: 1 = serial (default), 2 = single-colour scan, 3 = bi-colour scan */ + of_property_read_u32(node, "realtek,led-mode", &led_mode); + if (led_mode < 1 || led_mode > 3) { + dev_warn(dev, "invalid realtek,led-mode %u, using serial\n", led_mode); + led_mode = 1; + } + sw_w32_mask(0x3, led_mode, RTL931X_LED_GLB_CTRL); if (of_property_read_bool(node, "active-low")) sw_w32_mask(RTL931X_LED_GLB_ACTIVE_LOW, 0, RTL931X_LED_GLB_CTRL);