From 79a6d2aab21b62c644d45eb4807ed99edfbbb7a9 Mon Sep 17 00:00:00 2001 From: Manuel Stocker Date: Wed, 29 Apr 2026 21:25:21 +0200 Subject: [PATCH] realtek: support configurable LED interface mode on RTL930x Add support for changing the LED mode via the device tree. Currently it always defaults to SERIAL mode. With this change, one can also use the SINGLE_COLOR_SCAN and BI_COLOR_SCAN modes. Signed-off-by: Manuel Stocker Link: https://github.com/openwrt/openwrt/pull/23160 Signed-off-by: Hauke Mehrtens --- target/linux/realtek/dts/macros.dtsi | 7 ++++++- .../realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c | 6 ++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/target/linux/realtek/dts/macros.dtsi b/target/linux/realtek/dts/macros.dtsi index a0e7ce33ba..0e2846b9a7 100644 --- a/target/linux/realtek/dts/macros.dtsi +++ b/target/linux/realtek/dts/macros.dtsi @@ -70,7 +70,7 @@ managed = "in-band-status"; \ }; -// LED Set mode definitions +/* LED Set mode definitions */ #define RTL93XX_LED_SET_NONE (0) #define RTL93XX_LED_SET_10G (1 << 0) #define RTL93XX_LED_SET_5G (1 << 1) @@ -85,3 +85,8 @@ #define RTL93XX_LED_SET_TX (1 << 13) #define RTL93XX_LED_SET_COLLISION (1 << 14) #define RTL93XX_LED_SET_DUPLEX (1 << 15) + +/* LED Interface modes */ +#define RTL93XX_LED_MODE_SERIAL 1 +#define RTL93XX_LED_MODE_SINGLE_COLOR_SCAN 2 +#define RTL93XX_LED_MODE_BI_COLOR_SCAN 3 diff --git a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c index f6f1624955..18c83112a7 100644 --- a/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c +++ b/target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c @@ -2610,6 +2610,7 @@ static void rtl930x_led_init(struct rtl838x_switch_priv *priv) struct device_node *node; struct device *dev = priv->dev; u8 leds_in_set[4] = {}; + u32 led_mode = 1; u32 pm = 0; node = of_find_compatible_node(NULL, NULL, "realtek,rtl9300-leds"); @@ -2683,8 +2684,9 @@ static void rtl930x_led_init(struct rtl838x_switch_priv *priv) sw_w32_mask(0, set << pos, RTL930X_LED_PORT_FIB_SET_SEL_CTRL(i)); } - /* Set LED mode to serial (0x1) */ - sw_w32_mask(0x3, 0x1, RTL930X_LED_GLB_CTRL); + /* Set LED mode */ + of_property_read_u32(node, "realtek,led-mode", &led_mode); + sw_w32_mask(0x3, led_mode & 0x3, RTL930X_LED_GLB_CTRL); /* Set LED active state */ if (of_property_read_bool(node, "active-low"))