]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: support configurable LED interface mode on RTL930x 23160/head
authorManuel Stocker <mensi@mensi.ch>
Wed, 29 Apr 2026 19:25:21 +0000 (21:25 +0200)
committerHauke Mehrtens <hauke@hauke-m.de>
Sat, 2 May 2026 23:32:52 +0000 (01:32 +0200)
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>
target/linux/realtek/dts/macros.dtsi
target/linux/realtek/files-6.18/drivers/net/dsa/rtl83xx/rtl930x.c

index a0e7ce33ba9e080cc6a3eef012948c5aa8644506..0e2846b9a782124fcfc2a872e67745da593db80d 100644 (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
index f6f16249556c932d7ce574ddf37f302391c12855..18c83112a70447e4cbca5f0cefdcb2dcb7d8d648 100644 (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"))