realtek: dsa: support active-high LEDs
[openwrt/staging/ldir.git] / target / linux / realtek / files-5.15 / drivers / net / dsa / rtl83xx / rtl930x.c
index 7e4f13fbad787596821cad96c36291fd2903e7a9..5a899f32bab44373b1b2b63e27e6dd1c3f9d0034 100644 (file)
@@ -21,6 +21,8 @@
 #define RTL930X_VLAN_PORT_TAG_STS_CTRL_IGR_P_OTAG_KEEP_MASK    GENMASK(1,1)
 #define RTL930X_VLAN_PORT_TAG_STS_CTRL_IGR_P_ITAG_KEEP_MASK    GENMASK(0,0)
 
+#define RTL930X_LED_GLB_ACTIVE_LOW                             BIT(22)
+
 extern struct mutex smi_lock;
 extern struct rtl83xx_soc_info soc_info;
 
@@ -2431,6 +2433,12 @@ static void rtl930x_led_init(struct rtl838x_switch_priv *priv)
        /* Set LED mode to serial (0x1) */
        sw_w32_mask(0x3, 0x1, RTL930X_LED_GLB_CTRL);
 
+       /* Set LED active state */
+       if (of_property_read_bool(node, "active-low"))
+               sw_w32_mask(RTL930X_LED_GLB_ACTIVE_LOW, 0, RTL930X_LED_GLB_CTRL);
+       else
+               sw_w32_mask(0, RTL930X_LED_GLB_ACTIVE_LOW, RTL930X_LED_GLB_CTRL);
+
        /* Set port type masks */
        sw_w32(pm, RTL930X_LED_PORT_COPR_MASK_CTRL);
        sw_w32(pm, RTL930X_LED_PORT_FIB_MASK_CTRL);