rtlwifi: rtl8192ce: Fix LED initialization
authorChaoming Li <chaoming_li@realsil.com.cn>
Sun, 10 Apr 2011 23:30:23 +0000 (18:30 -0500)
committerJohn W. Linville <linville@tuxdriver.com>
Tue, 12 Apr 2011 20:59:34 +0000 (16:59 -0400)
Driver rtl8192ce does not initialize the LED correctly.

Signed-off-by: Chaoming Li <chaoming_li@realsil.com.cn>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/rtlwifi/base.c
drivers/net/wireless/rtlwifi/pci.c
drivers/net/wireless/rtlwifi/rtl8192ce/led.c
drivers/net/wireless/rtlwifi/rtl8192ce/led.h
drivers/net/wireless/rtlwifi/rtl8192ce/sw.c

index dd5318ed78726b2224bbc1a64394bc18d749dca2..9477785f11680e12926365e3f0fc6f2a053bfbd9 100644 (file)
@@ -251,14 +251,16 @@ void rtl_init_rfkill(struct ieee80211_hw *hw)
        bool blocked;
        u8 valid = 0;
 
-       radio_state = rtlpriv->cfg->ops->radio_onoff_checking(hw, &valid);
+       /*set init state to on */
+       rtlpriv->rfkill.rfkill_state = 1;
+       wiphy_rfkill_set_hw_state(hw->wiphy, 0);
 
-       /*set init state to that of switch */
-       rtlpriv->rfkill.rfkill_state = radio_state;
-       printk(KERN_INFO "rtlwifi: wireless switch is %s\n",
-              rtlpriv->rfkill.rfkill_state ? "on" : "off");
+       radio_state = rtlpriv->cfg->ops->radio_onoff_checking(hw, &valid);
 
        if (valid) {
+               printk(KERN_INFO "rtlwifi: wireless switch is %s\n",
+                               rtlpriv->rfkill.rfkill_state ? "on" : "off");
+
                rtlpriv->rfkill.rfkill_state = radio_state;
 
                blocked = (rtlpriv->rfkill.rfkill_state == 1) ? 0 : 1;
index efded435d596a51500b01c2663bb3b062684aa63..59a150ce3064663dd12e801fc580808d9dca885c 100644 (file)
@@ -1785,7 +1785,8 @@ void rtl_pci_disconnect(struct pci_dev *pdev)
 
        rtl_pci_deinit(hw);
        rtl_deinit_core(hw);
-       rtlpriv->cfg->ops->deinit_sw_leds(hw);
+       if (rtlpriv->cfg->ops->deinit_sw_leds)
+               rtlpriv->cfg->ops->deinit_sw_leds(hw);
        _rtl_pci_io_handler_release(hw);
        rtlpriv->cfg->ops->deinit_sw_vars(hw);
 
index 7b1da8d7508f2416dce677bbe214d90f6b2011f0..d21b934b5c3373a68ca97086b973b53e1cd5718e 100644 (file)
 #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)
 {
        u8 ledcfg;
@@ -97,10 +105,10 @@ void rtl92ce_sw_led_off(struct ieee80211_hw *hw, struct rtl_led *pled)
 
 void rtl92ce_init_sw_leds(struct ieee80211_hw *hw)
 {
-}
+       struct rtl_pci_priv *pcipriv = rtl_pcipriv(hw);
 
-void rtl92ce_deinit_sw_leds(struct ieee80211_hw *hw)
-{
+       _rtl92ce_init_led(hw, &(pcipriv->ledctl.sw_led0), LED_PIN_LED0);
+       _rtl92ce_init_led(hw, &(pcipriv->ledctl.sw_led1), LED_PIN_LED1);
 }
 
 void _rtl92ce_sw_led_control(struct ieee80211_hw *hw,
index 10da3018f4b700eb6421d1cd2265b6c1d5b8a7de..94332b3af5b1e21cb951226a620432a833d01966 100644 (file)
@@ -31,7 +31,6 @@
 #define __RTL92CE_LED_H__
 
 void rtl92ce_init_sw_leds(struct ieee80211_hw *hw);
-void rtl92ce_deinit_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_led_control(struct ieee80211_hw *hw, enum led_ctl_mode ledaction);
index b1cc4d44f534b464198e63bfe7612b9da8b1ac1c..f4e2f3dcccaeb0efc1d245edea2a856bafe9a2c6 100644 (file)
@@ -131,7 +131,6 @@ static struct rtl_hal_ops rtl8192ce_hal_ops = {
        .enable_hw_sec = rtl92ce_enable_hw_security_config,
        .set_key = rtl92ce_set_key,
        .init_sw_leds = rtl92ce_init_sw_leds,
-       .deinit_sw_leds = rtl92ce_deinit_sw_leds,
        .get_bbreg = rtl92c_phy_query_bb_reg,
        .set_bbreg = rtl92c_phy_set_bb_reg,
        .get_rfreg = rtl92ce_phy_query_rf_reg,