rtlwifi: rtl8192ce: Fix driver problem when radio switch off at module load
authorLarry Finger <Larry.Finger@lwfinger.net>
Wed, 22 Dec 2010 01:40:40 +0000 (19:40 -0600)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 22 Dec 2010 20:43:31 +0000 (15:43 -0500)
If the radio enable switch is off when the driver is loaded, it is not
possible to get radio output until the driver is unloaded and reloaded
with the switch on.

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/rtl8192ce/hw.c

index f6cc07369d7543bbee1fb4ab4a4335babb4d265d..cf0b73e51fc2875e87711be58ddf2ef1bf736908 100644 (file)
@@ -251,16 +251,14 @@ void rtl_init_rfkill(struct ieee80211_hw *hw)
        bool blocked;
        u8 valid = 0;
 
-       /*set init state to rf on */
-       rtlpriv->rfkill.rfkill_state = 1;
-
        radio_state = rtlpriv->cfg->ops->radio_onoff_checking(hw, &valid);
 
-       if (valid) {
-               RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG,
-                        (KERN_INFO "wireless switch is %s\n",
-                         rtlpriv->rfkill.rfkill_state ? "on" : "off"));
+       /*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");
 
+       if (valid) {
                rtlpriv->rfkill.rfkill_state = radio_state;
 
                blocked = (rtlpriv->rfkill.rfkill_state == 1) ? 0 : 1;
index 1266dbe44176d497272d9f53f8291442e445f5f3..1c41a0c93506b733e6f457ce698b66b37a76789c 100644 (file)
@@ -962,17 +962,6 @@ int rtl92ce_hw_init(struct ieee80211_hw *hw)
        rtl_cam_reset_all_entry(hw);
        rtl92ce_enable_hw_security_config(hw);
        ppsc->rfpwr_state = ERFON;
-       tmp_u1b = rtl_read_byte(rtlpriv, REG_MAC_PINMUX_CFG)&(~BIT(3));
-       rtl_write_byte(rtlpriv, REG_MAC_PINMUX_CFG, tmp_u1b);
-       tmp_u1b = rtl_read_byte(rtlpriv, REG_GPIO_IO_SEL);
-       ppsc->rfoff_reason |= (tmp_u1b & BIT(3)) ? 0 : RF_CHANGE_BY_HW;
-       if (ppsc->rfoff_reason > RF_CHANGE_BY_PS)
-               rtl_ps_set_rf_state(hw, ERFOFF, ppsc->rfoff_reason, true);
-       else {
-               ppsc->rfpwr_state = ERFON;
-               ppsc->rfoff_reason = 0;
-               rtlpriv->cfg->ops->led_control(hw, LED_CTL_POWER_ON);
-       }
        rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ETHER_ADDR, mac->mac_addr);
        _rtl92ce_enable_aspm_back_door(hw);
        rtlpriv->intf_ops->enable_aspm(hw);