return true;
 }
 EXPORT_SYMBOL(rtl_cmd_send_packet);
+
+void rtl_init_sw_leds(struct ieee80211_hw *hw)
+{
+       struct rtl_priv *rtlpriv = rtl_priv(hw);
+
+       rtlpriv->ledctl.sw_led0 = LED_PIN_LED0;
+       rtlpriv->ledctl.sw_led1 = LED_PIN_LED1;
+}
+EXPORT_SYMBOL(rtl_init_sw_leds);
+
 const struct ieee80211_ops rtl_ops = {
        .start = rtl_op_start,
        .stop = rtl_op_stop,
 
 };
 
 extern const struct ieee80211_ops rtl_ops;
+
+void rtl_init_sw_leds(struct ieee80211_hw *hw);
 void rtl_fw_cb(const struct firmware *firmware, void *context);
 void rtl_wowlan_fw_cb(const struct firmware *firmware, void *context);
 void rtl_addr_delay(u32 addr);
 
                err = -ENODEV;
                goto fail3;
        }
-       rtlpriv->cfg->ops->init_sw_leds(hw);
+       rtl_init_sw_leds(hw);
 
        /*aspm */
        rtl_pci_init_aspm(hw);
 
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        if (rtlpriv->rtlhal.up_first_time)
                return;
 
        if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS)
-               rtl88ee_sw_led_on(hw, pled0);
+               rtl88ee_sw_led_on(hw, pin0);
        else if (ppsc->rfoff_reason == RF_CHANGE_BY_INIT)
-               rtl88ee_sw_led_on(hw, pled0);
+               rtl88ee_sw_led_on(hw, pin0);
        else
-               rtl88ee_sw_led_off(hw, pled0);
+               rtl88ee_sw_led_off(hw, pin0);
 }
 
 static bool _rtl88ee_init_mac(struct ieee80211_hw *hw)
 
 #include "reg.h"
 #include "led.h"
 
-static void _rtl88ee_init_led(struct ieee80211_hw *hw,
-                             struct rtl_led *pled, enum rtl_led_pin ledpin)
-{
-       pled->hw = hw;
-       pled->ledpin = ledpin;
-       pled->ledon = false;
-}
-
-void rtl88ee_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl88ee_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u8 ledcfg;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                break;
        default:
                rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
-                       "switch case %#x not processed\n", pled->ledpin);
+                       "switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = true;
 }
 
-void rtl88ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl88ee_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 ledcfg;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                break;
        default:
                rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
-                       "switch case %#x not processed\n", pled->ledpin);
+                       "switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = false;
-}
-
-void rtl88ee_init_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       _rtl88ee_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
-       _rtl88ee_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
 }
 
 static void _rtl88ee_sw_led_control(struct ieee80211_hw *hw,
                                    enum led_ctl_mode ledaction)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        switch (ledaction) {
        case LED_CTL_POWER_ON:
        case LED_CTL_LINK:
        case LED_CTL_NO_LINK:
-               rtl88ee_sw_led_on(hw, pled0);
+               rtl88ee_sw_led_on(hw, pin0);
                break;
        case LED_CTL_POWER_OFF:
-               rtl88ee_sw_led_off(hw, pled0);
+               rtl88ee_sw_led_off(hw, pin0);
                break;
        default:
                break;
 
 #ifndef __RTL92CE_LED_H__
 #define __RTL92CE_LED_H__
 
-void rtl88ee_init_sw_leds(struct ieee80211_hw *hw);
-void rtl88ee_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl88ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
+void rtl88ee_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl88ee_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
 void rtl88ee_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
 
 #endif
 
        .tx_polling = rtl88ee_tx_polling,
        .enable_hw_sec = rtl88ee_enable_hw_security_config,
        .set_key = rtl88ee_set_key,
-       .init_sw_leds = rtl88ee_init_sw_leds,
        .get_bbreg = rtl88e_phy_query_bb_reg,
        .set_bbreg = rtl88e_phy_set_bb_reg,
        .get_rfreg = rtl88e_phy_query_rf_reg,
 
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        if (rtlpci->up_first_time)
                return;
 
        if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS)
-               rtl92ce_sw_led_on(hw, pled0);
+               rtl92ce_sw_led_on(hw, pin0);
        else if (ppsc->rfoff_reason == RF_CHANGE_BY_INIT)
-               rtl92ce_sw_led_on(hw, pled0);
+               rtl92ce_sw_led_on(hw, pin0);
        else
-               rtl92ce_sw_led_off(hw, pled0);
+               rtl92ce_sw_led_off(hw, pin0);
 }
 
 static bool _rtl92ce_init_mac(struct ieee80211_hw *hw)
 
 #include "reg.h"
 #include "led.h"
 
-static void _rtl92ce_init_led(struct ieee80211_hw *hw,
-                             struct rtl_led *pled, enum rtl_led_pin ledpin)
-{
-       pled->hw = hw;
-       pled->ledpin = ledpin;
-       pled->ledon = false;
-}
-
-void rtl92ce_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92ce_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u8 ledcfg;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD, "LedAddr:%X ledpin=%d\n",
-               REG_LEDCFG2, pled->ledpin);
+               REG_LEDCFG2, pin);
 
        ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, REG_LEDCFG2, (ledcfg & 0x0f) | BIT(5));
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = true;
 }
 
-void rtl92ce_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92ce_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 ledcfg;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD, "LedAddr:%X ledpin=%d\n",
-               REG_LEDCFG2, pled->ledpin);
+               REG_LEDCFG2, pin);
 
        ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, REG_LEDCFG2, (ledcfg | BIT(3)));
                break;
        default:
-               pr_info("switch case %#x not processed\n", pled->ledpin);
+               pr_info("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = false;
-}
-
-void rtl92ce_init_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       _rtl92ce_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
-       _rtl92ce_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
 }
 
 static void _rtl92ce_sw_led_control(struct ieee80211_hw *hw,
                                    enum led_ctl_mode ledaction)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        switch (ledaction) {
        case LED_CTL_POWER_ON:
        case LED_CTL_LINK:
        case LED_CTL_NO_LINK:
-               rtl92ce_sw_led_on(hw, pled0);
+               rtl92ce_sw_led_on(hw, pin0);
                break;
        case LED_CTL_POWER_OFF:
-               rtl92ce_sw_led_off(hw, pled0);
+               rtl92ce_sw_led_off(hw, pin0);
                break;
        default:
                break;
 
 #ifndef __RTL92CE_LED_H__
 #define __RTL92CE_LED_H__
 
-void rtl92ce_init_sw_leds(struct ieee80211_hw *hw);
-void rtl92ce_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl92ce_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
+void rtl92ce_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl92ce_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
 void rtl92ce_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
 
 #endif
 
        .tx_polling = rtl92ce_tx_polling,
        .enable_hw_sec = rtl92ce_enable_hw_security_config,
        .set_key = rtl92ce_set_key,
-       .init_sw_leds = rtl92ce_init_sw_leds,
        .get_bbreg = rtl92c_phy_query_bb_reg,
        .set_bbreg = rtl92c_phy_set_bb_reg,
        .set_rfreg = rtl92ce_phy_set_rf_reg,
 
 #include "reg.h"
 #include "led.h"
 
-static void _rtl92cu_init_led(struct ieee80211_hw *hw,
-                             struct rtl_led *pled, enum rtl_led_pin ledpin)
-{
-       pled->hw = hw;
-       pled->ledpin = ledpin;
-       pled->ledon = false;
-}
-
-static void rtl92cu_deinit_led(struct rtl_led *pled)
-{
-}
-
-void rtl92cu_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92cu_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u8 ledcfg;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD, "LedAddr:%X ledpin=%d\n",
-               REG_LEDCFG2, pled->ledpin);
+               REG_LEDCFG2, pin);
        ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, REG_LEDCFG2, (ledcfg & 0x0f) | BIT(5));
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = true;
 }
 
-void rtl92cu_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92cu_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 ledcfg;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD, "LedAddr:%X ledpin=%d\n",
-               REG_LEDCFG2, pled->ledpin);
+               REG_LEDCFG2, pin);
        ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, REG_LEDCFG2, (ledcfg | BIT(3)));
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = false;
-}
-
-void rtl92cu_init_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       _rtl92cu_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
-       _rtl92cu_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
-}
-
-void rtl92cu_deinit_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       rtl92cu_deinit_led(&rtlpriv->ledctl.sw_led0);
-       rtl92cu_deinit_led(&rtlpriv->ledctl.sw_led1);
-}
-
-static void _rtl92cu_sw_led_control(struct ieee80211_hw *hw,
-                                   enum led_ctl_mode ledaction)
-{
 }
 
 void rtl92cu_led_control(struct ieee80211_hw *hw,
-                       enum led_ctl_mode ledaction)
+                        enum led_ctl_mode ledaction)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
                return;
        }
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD, "ledaction %d\n", ledaction);
-       _rtl92cu_sw_led_control(hw, ledaction);
 }
 
 #ifndef __RTL92CU_LED_H__
 #define __RTL92CU_LED_H__
 
-void rtl92cu_init_sw_leds(struct ieee80211_hw *hw);
-void rtl92cu_deinit_sw_leds(struct ieee80211_hw *hw);
-void rtl92cu_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl92cu_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
+void rtl92cu_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl92cu_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
 void rtl92cu_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
 
 #endif
 
        .led_control = rtl92cu_led_control,
        .enable_hw_sec = rtl92cu_enable_hw_security_config,
        .set_key = rtl92c_set_key,
-       .init_sw_leds = rtl92cu_init_sw_leds,
-       .deinit_sw_leds = rtl92cu_deinit_sw_leds,
        .get_bbreg = rtl92c_phy_query_bb_reg,
        .set_bbreg = rtl92c_phy_set_bb_reg,
        .get_rfreg = rtl92cu_phy_query_rf_reg,
 
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        if (rtlpci->up_first_time)
                return;
        if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS)
-               rtl92de_sw_led_on(hw, pled0);
+               rtl92de_sw_led_on(hw, pin0);
        else if (ppsc->rfoff_reason == RF_CHANGE_BY_INIT)
-               rtl92de_sw_led_on(hw, pled0);
+               rtl92de_sw_led_on(hw, pin0);
        else
-               rtl92de_sw_led_off(hw, pled0);
+               rtl92de_sw_led_off(hw, pin0);
 }
 
 static bool _rtl92de_init_mac(struct ieee80211_hw *hw)
 
 #include "reg.h"
 #include "led.h"
 
-static void _rtl92ce_init_led(struct ieee80211_hw *hw,
-                             struct rtl_led *pled, enum rtl_led_pin ledpin)
-{
-       pled->hw = hw;
-       pled->ledpin = ledpin;
-       pled->ledon = false;
-}
-
-void rtl92de_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92de_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u8 ledcfg;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD, "LedAddr:%X ledpin=%d\n",
-               REG_LEDCFG2, pled->ledpin);
+               REG_LEDCFG2, pin);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, REG_LEDCFG2, (ledcfg & 0x0f) | BIT(5));
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = true;
 }
 
-void rtl92de_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92de_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 ledcfg;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD, "LedAddr:%X ledpin=%d\n",
-               REG_LEDCFG2, pled->ledpin);
+               REG_LEDCFG2, pin);
 
        ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, REG_LEDCFG2, (ledcfg | BIT(3)));
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = false;
-}
-
-void rtl92de_init_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       _rtl92ce_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
-       _rtl92ce_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
 }
 
 static void _rtl92ce_sw_led_control(struct ieee80211_hw *hw,
                                    enum led_ctl_mode ledaction)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        switch (ledaction) {
        case LED_CTL_POWER_ON:
        case LED_CTL_LINK:
        case LED_CTL_NO_LINK:
-               rtl92de_sw_led_on(hw, pled0);
+               rtl92de_sw_led_on(hw, pin0);
                break;
        case LED_CTL_POWER_OFF:
-               rtl92de_sw_led_off(hw, pled0);
+               rtl92de_sw_led_off(hw, pin0);
                break;
        default:
                break;
 
 #ifndef __RTL92CE_LED_H__
 #define __RTL92CE_LED_H__
 
-void rtl92de_init_sw_leds(struct ieee80211_hw *hw);
-void rtl92de_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl92de_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
+void rtl92de_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl92de_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
 void rtl92de_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
 
 #endif
 
        .tx_polling = rtl92de_tx_polling,
        .enable_hw_sec = rtl92de_enable_hw_security_config,
        .set_key = rtl92de_set_key,
-       .init_sw_leds = rtl92de_init_sw_leds,
        .get_bbreg = rtl92d_phy_query_bb_reg,
        .set_bbreg = rtl92d_phy_set_bb_reg,
        .get_rfreg = rtl92d_phy_query_rf_reg,
 
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        if (rtlpriv->rtlhal.up_first_time)
                return;
 
        if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS)
-               rtl92ee_sw_led_on(hw, pled0);
+               rtl92ee_sw_led_on(hw, pin0);
        else if (ppsc->rfoff_reason == RF_CHANGE_BY_INIT)
-               rtl92ee_sw_led_on(hw, pled0);
+               rtl92ee_sw_led_on(hw, pin0);
        else
-               rtl92ee_sw_led_off(hw, pled0);
+               rtl92ee_sw_led_off(hw, pin0);
 }
 
 static bool _rtl92ee_init_mac(struct ieee80211_hw *hw)
 
 #include "reg.h"
 #include "led.h"
 
-static void _rtl92ee_init_led(struct ieee80211_hw *hw,
-                             struct rtl_led *pled, enum rtl_led_pin ledpin)
-{
-       pled->hw = hw;
-       pled->ledpin = ledpin;
-       pled->ledon = false;
-}
-
-void rtl92ee_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92ee_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u32 ledcfg;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                break;
        default:
                rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
-                       "switch case %#x not processed\n", pled->ledpin);
+                       "switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = true;
 }
 
-void rtl92ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92ee_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u32 ledcfg;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                break;
        default:
                rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
-                       "switch case %#x not processed\n", pled->ledpin);
+                       "switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = false;
-}
-
-void rtl92ee_init_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       _rtl92ee_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
-       _rtl92ee_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
 }
 
 static void _rtl92ee_sw_led_control(struct ieee80211_hw *hw,
                                    enum led_ctl_mode ledaction)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        switch (ledaction) {
        case LED_CTL_POWER_ON:
        case LED_CTL_LINK:
        case LED_CTL_NO_LINK:
-               rtl92ee_sw_led_on(hw, pled0);
+               rtl92ee_sw_led_on(hw, pin0);
                break;
        case LED_CTL_POWER_OFF:
-               rtl92ee_sw_led_off(hw, pled0);
+               rtl92ee_sw_led_off(hw, pin0);
                break;
        default:
                break;
 
 #ifndef __RTL92E_LED_H__
 #define __RTL92E_LED_H__
 
-void rtl92ee_init_sw_leds(struct ieee80211_hw *hw);
-void rtl92ee_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl92ee_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
+void rtl92ee_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl92ee_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
 void rtl92ee_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
 
 #endif
 
        .tx_polling = rtl92ee_tx_polling,
        .enable_hw_sec = rtl92ee_enable_hw_security_config,
        .set_key = rtl92ee_set_key,
-       .init_sw_leds = rtl92ee_init_sw_leds,
        .get_bbreg = rtl92ee_phy_query_bb_reg,
        .set_bbreg = rtl92ee_phy_set_bb_reg,
        .get_rfreg = rtl92ee_phy_query_rf_reg,
 
        /* After MACIO reset,we must refresh LED state. */
        if ((ppsc->rfoff_reason == RF_CHANGE_BY_IPS) ||
           (ppsc->rfoff_reason == 0)) {
-               struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+               enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
                enum rf_pwrstate rfpwr_state_toset;
                rfpwr_state_toset = _rtl92se_rf_onoff_detect(hw);
 
                if (rfpwr_state_toset == ERFON)
-                       rtl92se_sw_led_on(hw, pled0);
+                       rtl92se_sw_led_on(hw, pin0);
        }
 }
 
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_pci *rtlpci = rtl_pcidev(rtl_pcipriv(hw));
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        if (rtlpci->up_first_time)
                return;
 
        if (rtlpriv->psc.rfoff_reason == RF_CHANGE_BY_IPS)
-               rtl92se_sw_led_on(hw, pled0);
+               rtl92se_sw_led_on(hw, pin0);
        else
-               rtl92se_sw_led_off(hw, pled0);
+               rtl92se_sw_led_off(hw, pin0);
 }
 
 
 
 #include "reg.h"
 #include "led.h"
 
-static void _rtl92se_init_led(struct ieee80211_hw *hw,
-                             struct rtl_led *pled, enum rtl_led_pin ledpin)
-{
-       pled->hw = hw;
-       pled->ledpin = ledpin;
-       pled->ledon = false;
-}
-
-void rtl92se_init_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       _rtl92se_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
-       _rtl92se_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
-}
-
-void rtl92se_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92se_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u8 ledcfg;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD, "LedAddr:%X ledpin=%d\n",
-               LEDCFG, pled->ledpin);
+               LEDCFG, pin);
 
        ledcfg = rtl_read_byte(rtlpriv, LEDCFG);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, LEDCFG, ledcfg & 0x0f);
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = true;
 }
 
-void rtl92se_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl92se_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        struct rtl_priv *rtlpriv;
        u8 ledcfg;
        if (!rtlpriv || rtlpriv->max_fw_size)
                return;
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD, "LedAddr:%X ledpin=%d\n",
-               LEDCFG, pled->ledpin);
+               LEDCFG, pin);
 
        ledcfg = rtl_read_byte(rtlpriv, LEDCFG);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, LEDCFG, (ledcfg | BIT(3)));
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = false;
 }
 
 static void _rtl92se_sw_led_control(struct ieee80211_hw *hw,
                                    enum led_ctl_mode ledaction)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        switch (ledaction) {
        case LED_CTL_POWER_ON:
        case LED_CTL_LINK:
        case LED_CTL_NO_LINK:
-               rtl92se_sw_led_on(hw, pled0);
+               rtl92se_sw_led_on(hw, pin0);
                break;
        case LED_CTL_POWER_OFF:
-               rtl92se_sw_led_off(hw, pled0);
+               rtl92se_sw_led_off(hw, pin0);
                break;
        default:
                break;
 
 #ifndef __REALTEK_PCI92SE_LED_H__
 #define __REALTEK_PCI92SE_LED_H__
 
-void rtl92se_init_sw_leds(struct ieee80211_hw *hw);
-void rtl92se_sw_led_on(struct ieee80211_hw *hw,        struct rtl_led *pled);
-void rtl92se_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
+void rtl92se_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl92se_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
 void rtl92se_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
 
 #endif
 
        .tx_polling = rtl92se_tx_polling,
        .enable_hw_sec = rtl92se_enable_hw_security_config,
        .set_key = rtl92se_set_key,
-       .init_sw_leds = rtl92se_init_sw_leds,
        .get_bbreg = rtl92s_phy_query_bb_reg,
        .set_bbreg = rtl92s_phy_set_bb_reg,
        .get_rfreg = rtl92s_phy_query_rf_reg,
 
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        if (rtlpriv->rtlhal.up_first_time)
                return;
 
        if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS)
-               rtl8723e_sw_led_on(hw, pled0);
+               rtl8723e_sw_led_on(hw, pin0);
        else if (ppsc->rfoff_reason == RF_CHANGE_BY_INIT)
-               rtl8723e_sw_led_on(hw, pled0);
+               rtl8723e_sw_led_on(hw, pin0);
        else
-               rtl8723e_sw_led_off(hw, pled0);
+               rtl8723e_sw_led_off(hw, pin0);
 }
 
 static bool _rtl8712e_init_mac(struct ieee80211_hw *hw)
 
 #include "reg.h"
 #include "led.h"
 
-static void _rtl8723e_init_led(struct ieee80211_hw *hw,
-                              struct rtl_led *pled, enum rtl_led_pin ledpin)
-{
-       pled->hw = hw;
-       pled->ledpin = ledpin;
-       pled->ledon = false;
-}
-
-void rtl8723e_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl8723e_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u8 ledcfg;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, REG_LEDCFG1, ledcfg & 0x10);
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = true;
 }
 
-void rtl8723e_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl8723e_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 ledcfg;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
        ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
 
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = false;
-}
-
-void rtl8723e_init_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       _rtl8723e_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
-       _rtl8723e_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
 }
 
 static void _rtl8723e_sw_led_control(struct ieee80211_hw *hw,
                                     enum led_ctl_mode ledaction)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        switch (ledaction) {
        case LED_CTL_POWER_ON:
        case LED_CTL_LINK:
        case LED_CTL_NO_LINK:
-               rtl8723e_sw_led_on(hw, pled0);
+               rtl8723e_sw_led_on(hw, pin0);
                break;
        case LED_CTL_POWER_OFF:
-               rtl8723e_sw_led_off(hw, pled0);
+               rtl8723e_sw_led_off(hw, pin0);
                break;
        default:
                break;
 
 #ifndef __RTL92CE_LED_H__
 #define __RTL92CE_LED_H__
 
-void rtl8723e_init_sw_leds(struct ieee80211_hw *hw);
-void rtl8723e_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl8723e_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
+void rtl8723e_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl8723e_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
 void rtl8723e_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
 
 #endif
 
        .tx_polling = rtl8723e_tx_polling,
        .enable_hw_sec = rtl8723e_enable_hw_security_config,
        .set_key = rtl8723e_set_key,
-       .init_sw_leds = rtl8723e_init_sw_leds,
        .get_bbreg = rtl8723_phy_query_bb_reg,
        .set_bbreg = rtl8723_phy_set_bb_reg,
        .get_rfreg = rtl8723e_phy_query_rf_reg,
 
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        if (rtlpriv->rtlhal.up_first_time)
                return;
 
        if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS)
-               rtl8723be_sw_led_on(hw, pled0);
+               rtl8723be_sw_led_on(hw, pin0);
        else if (ppsc->rfoff_reason == RF_CHANGE_BY_INIT)
-               rtl8723be_sw_led_on(hw, pled0);
+               rtl8723be_sw_led_on(hw, pin0);
        else
-               rtl8723be_sw_led_off(hw, pled0);
+               rtl8723be_sw_led_off(hw, pin0);
 }
 
 static bool _rtl8723be_init_mac(struct ieee80211_hw *hw)
 
 #include "reg.h"
 #include "led.h"
 
-static void _rtl8723be_init_led(struct ieee80211_hw *hw,  struct rtl_led *pled,
-                               enum rtl_led_pin ledpin)
-{
-       pled->hw = hw;
-       pled->ledpin = ledpin;
-       pled->ledon = false;
-}
-
-void rtl8723be_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl8723be_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u8 ledcfg;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                rtl_write_byte(rtlpriv, REG_LEDCFG1, ledcfg & 0x10);
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = true;
 }
 
-void rtl8723be_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl8723be_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 ledcfg;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
        ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
 
                break;
        default:
-               pr_err("switch case %#x not processed\n",
-                      pled->ledpin);
+               pr_err("switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = false;
-}
-
-void rtl8723be_init_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       _rtl8723be_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
-       _rtl8723be_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
 }
 
 static void _rtl8723be_sw_led_control(struct ieee80211_hw *hw,
                                      enum led_ctl_mode ledaction)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
 
        switch (ledaction) {
        case LED_CTL_POWER_ON:
        case LED_CTL_LINK:
        case LED_CTL_NO_LINK:
-               rtl8723be_sw_led_on(hw, pled0);
+               rtl8723be_sw_led_on(hw, pin0);
                break;
        case LED_CTL_POWER_OFF:
-               rtl8723be_sw_led_off(hw, pled0);
+               rtl8723be_sw_led_off(hw, pin0);
                break;
        default:
                break;
 
 #ifndef __RTL8723BE_LED_H__
 #define __RTL8723BE_LED_H__
 
-void rtl8723be_init_sw_leds(struct ieee80211_hw *hw);
-void rtl8723be_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl8723be_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
+void rtl8723be_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl8723be_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
 void rtl8723be_led_control(struct ieee80211_hw *hw,
                           enum led_ctl_mode ledaction);
 
 
        .tx_polling = rtl8723be_tx_polling,
        .enable_hw_sec = rtl8723be_enable_hw_security_config,
        .set_key = rtl8723be_set_key,
-       .init_sw_leds = rtl8723be_init_sw_leds,
        .get_bbreg = rtl8723_phy_query_bb_reg,
        .set_bbreg = rtl8723_phy_set_bb_reg,
        .get_rfreg = rtl8723be_phy_query_rf_reg,
 
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
 
        if (rtlpriv->rtlhal.up_first_time)
 
        if (ppsc->rfoff_reason == RF_CHANGE_BY_IPS)
                if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE)
-                       rtl8812ae_sw_led_on(hw, pled0);
+                       rtl8812ae_sw_led_on(hw, pin0);
                else
-                       rtl8821ae_sw_led_on(hw, pled0);
+                       rtl8821ae_sw_led_on(hw, pin0);
        else if (ppsc->rfoff_reason == RF_CHANGE_BY_INIT)
                if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE)
-                       rtl8812ae_sw_led_on(hw, pled0);
+                       rtl8812ae_sw_led_on(hw, pin0);
                else
-                       rtl8821ae_sw_led_on(hw, pled0);
+                       rtl8821ae_sw_led_on(hw, pin0);
        else
                if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE)
-                       rtl8812ae_sw_led_off(hw, pled0);
+                       rtl8812ae_sw_led_off(hw, pin0);
                else
-                       rtl8821ae_sw_led_off(hw, pled0);
+                       rtl8821ae_sw_led_off(hw, pin0);
 }
 
 static bool _rtl8821ae_init_mac(struct ieee80211_hw *hw)
 
 #include "reg.h"
 #include "led.h"
 
-static void _rtl8821ae_init_led(struct ieee80211_hw *hw,
-                               struct rtl_led *pled,
-                               enum rtl_led_pin ledpin)
-{
-       pled->hw = hw;
-       pled->ledpin = ledpin;
-       pled->ledon = false;
-}
-
-void rtl8821ae_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl8821ae_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u8 ledcfg;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                break;
        default:
                rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
-                       "switch case %#x not processed\n", pled->ledpin);
+                       "switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = true;
 }
 
-void rtl8812ae_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl8812ae_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u16     ledreg = REG_LEDCFG1;
        u8      ledcfg = 0;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_LED0:
                ledreg = REG_LEDCFG1;
                break;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
                "In SwLedOn, LedAddr:%X LEDPIN=%d\n",
-               ledreg, pled->ledpin);
+               ledreg, pin);
 
        ledcfg =  rtl_read_byte(rtlpriv, ledreg);
        ledcfg |= BIT(5); /*Set 0x4c[21]*/
        ledcfg &= ~(BIT(7) | BIT(6) | BIT(3) | BIT(2) | BIT(1) | BIT(0));
                /*Clear 0x4c[23:22] and 0x4c[19:16]*/
        rtl_write_byte(rtlpriv, ledreg, ledcfg); /*SW control led0 on.*/
-       pled->ledon = true;
 }
 
-void rtl8821ae_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl8821ae_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
        u8 ledcfg;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
-               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pled->ledpin);
+               "LedAddr:%X ledpin=%d\n", REG_LEDCFG2, pin);
 
        ledcfg = rtl_read_byte(rtlpriv, REG_LEDCFG2);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_GPIO0:
                break;
        case LED_PIN_LED0:
                break;
        default:
                rtl_dbg(rtlpriv, COMP_ERR, DBG_LOUD,
-                       "switch case %#x not processed\n", pled->ledpin);
+                       "switch case %#x not processed\n", pin);
                break;
        }
-       pled->ledon = false;
 }
 
-void rtl8812ae_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
+void rtl8812ae_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin)
 {
        u16 ledreg = REG_LEDCFG1;
        struct rtl_priv *rtlpriv = rtl_priv(hw);
 
-       switch (pled->ledpin) {
+       switch (pin) {
        case LED_PIN_LED0:
                ledreg = REG_LEDCFG1;
                break;
 
        rtl_dbg(rtlpriv, COMP_LED, DBG_LOUD,
                "In SwLedOff,LedAddr:%X LEDPIN=%d\n",
-               ledreg, pled->ledpin);
+               ledreg, pin);
        /*Open-drain arrangement for controlling the LED*/
        if (rtlpriv->ledctl.led_opendrain) {
                u8 ledcfg = rtl_read_byte(rtlpriv, ledreg);
        } else {
                rtl_write_byte(rtlpriv, ledreg, 0x28);
        }
-
-       pled->ledon = false;
-}
-
-void rtl8821ae_init_sw_leds(struct ieee80211_hw *hw)
-{
-       struct rtl_priv *rtlpriv = rtl_priv(hw);
-
-       _rtl8821ae_init_led(hw, &rtlpriv->ledctl.sw_led0, LED_PIN_LED0);
-       _rtl8821ae_init_led(hw, &rtlpriv->ledctl.sw_led1, LED_PIN_LED1);
 }
 
 static void _rtl8821ae_sw_led_control(struct ieee80211_hw *hw,
                                      enum led_ctl_mode ledaction)
 {
        struct rtl_priv *rtlpriv = rtl_priv(hw);
-       struct rtl_led *pled0 = &rtlpriv->ledctl.sw_led0;
+       enum rtl_led_pin pin0 = rtlpriv->ledctl.sw_led0;
        struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
 
        switch (ledaction) {
        case LED_CTL_LINK:
        case LED_CTL_NO_LINK:
                if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE)
-                       rtl8812ae_sw_led_on(hw, pled0);
+                       rtl8812ae_sw_led_on(hw, pin0);
                else
-                       rtl8821ae_sw_led_on(hw, pled0);
+                       rtl8821ae_sw_led_on(hw, pin0);
                break;
        case LED_CTL_POWER_OFF:
                if (rtlhal->hw_type == HARDWARE_TYPE_RTL8812AE)
-                       rtl8812ae_sw_led_off(hw, pled0);
+                       rtl8812ae_sw_led_off(hw, pin0);
                else
-                       rtl8821ae_sw_led_off(hw, pled0);
+                       rtl8821ae_sw_led_off(hw, pin0);
                break;
        default:
                break;
 
 #ifndef __RTL8821AE_LED_H__
 #define __RTL8821AE_LED_H__
 
-void rtl8821ae_init_sw_leds(struct ieee80211_hw *hw);
-void rtl8821ae_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl8812ae_sw_led_on(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl8821ae_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
-void rtl8812ae_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled);
+void rtl8821ae_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl8812ae_sw_led_on(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl8821ae_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
+void rtl8812ae_sw_led_off(struct ieee80211_hw *hw, enum rtl_led_pin pin);
 void rtl8821ae_led_control(struct ieee80211_hw *hw,
                           enum led_ctl_mode ledaction);
 
 
        .tx_polling = rtl8821ae_tx_polling,
        .enable_hw_sec = rtl8821ae_enable_hw_security_config,
        .set_key = rtl8821ae_set_key,
-       .init_sw_leds = rtl8821ae_init_sw_leds,
        .get_bbreg = rtl8821ae_phy_query_bb_reg,
        .set_bbreg = rtl8821ae_phy_set_bb_reg,
        .get_rfreg = rtl8821ae_phy_query_rf_reg,
 
                pr_err("Can't init_sw_vars\n");
                goto error_out;
        }
-       rtlpriv->cfg->ops->init_sw_leds(hw);
+       rtl_init_sw_leds(hw);
 
        err = ieee80211_register_hw(hw);
        if (err) {
        rtl_usb_deinit(hw);
        rtl_deinit_core(hw);
        kfree(rtlpriv->usb_data);
-       rtlpriv->cfg->ops->deinit_sw_leds(hw);
        rtlpriv->cfg->ops->deinit_sw_vars(hw);
        _rtl_usb_io_handler_release(hw);
        usb_put_dev(rtlusb->udev);
 
        struct rtl_info_element info_element[];
 } __packed;
 
-/*LED related.*/
-/*ledpin Identify how to implement this SW led.*/
-struct rtl_led {
-       void *hw;
-       enum rtl_led_pin ledpin;
-       bool ledon;
-};
-
 struct rtl_led_ctl {
        bool led_opendrain;
-       struct rtl_led sw_led0;
-       struct rtl_led sw_led1;
+       enum rtl_led_pin sw_led0;
+       enum rtl_led_pin sw_led1;
 };
 
 struct rtl_qos_parameters {
        void (*set_key)(struct ieee80211_hw *hw, u32 key_index,
                        u8 *macaddr, bool is_group, u8 enc_algo,
                        bool is_wepkey, bool clear_all);
-       void (*init_sw_leds)(struct ieee80211_hw *hw);
-       void (*deinit_sw_leds)(struct ieee80211_hw *hw);
        u32 (*get_bbreg)(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask);
        void (*set_bbreg)(struct ieee80211_hw *hw, u32 regaddr, u32 bitmask,
                          u32 data);