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 <mensi@mensi.ch>
Link: https://github.com/openwrt/openwrt/pull/23160
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
Manuel Stocker 2026-04-29 21:25:21 +02:00 committed by Hauke Mehrtens
parent 07e91bc11a
commit 79a6d2aab2
2 changed files with 10 additions and 3 deletions

View File

@ -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

View File

@ -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"))