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);