From: Manuel Stocker Date: Wed, 29 Apr 2026 19:25:21 +0000 (+0200) Subject: realtek: support configurable LED interface mode on RTL930x X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=79a6d2aab21b62c644d45eb4807ed99edfbbb7a9;p=thirdparty%2Fopenwrt.git 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 --- diff --git a/target/linux/realtek/dts/macros.dtsi b/target/linux/realtek/dts/macros.dtsi index a0e7ce33ba9..0e2846b9a78 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 f6f16249556..18c83112a70 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"))