aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless
diff options
context:
space:
mode:
authorLarry Finger <Larry.Finger@lwfinger.net>2010-12-21 20:40:40 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-12-22 15:43:31 -0500
commite6d8a817d00793eecd063b1548bbc954ab62b124 (patch)
tree3a39436d74d406d43f2443548b59d6773b2b442a /drivers/net/wireless
parent40d70dd12200ffeacfe9caaa8242e3ad2995bb5d (diff)
rtlwifi: rtl8192ce: Fix driver problem when radio switch off at module load
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>
Diffstat (limited to 'drivers/net/wireless')
-rw-r--r--drivers/net/wireless/rtlwifi/base.c12
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192ce/hw.c11
2 files changed, 5 insertions, 18 deletions
diff --git a/drivers/net/wireless/rtlwifi/base.c b/drivers/net/wireless/rtlwifi/base.c
index f6cc07369d7..cf0b73e51fc 100644
--- a/drivers/net/wireless/rtlwifi/base.c
+++ b/drivers/net/wireless/rtlwifi/base.c
@@ -251,16 +251,14 @@ void rtl_init_rfkill(struct ieee80211_hw *hw)
251 bool blocked; 251 bool blocked;
252 u8 valid = 0; 252 u8 valid = 0;
253 253
254 /*set init state to rf on */
255 rtlpriv->rfkill.rfkill_state = 1;
256
257 radio_state = rtlpriv->cfg->ops->radio_onoff_checking(hw, &valid); 254 radio_state = rtlpriv->cfg->ops->radio_onoff_checking(hw, &valid);
258 255
259 if (valid) { 256 /*set init state to that of switch */
260 RT_TRACE(rtlpriv, COMP_RF, DBG_DMESG, 257 rtlpriv->rfkill.rfkill_state = radio_state;
261 (KERN_INFO "wireless switch is %s\n", 258 printk(KERN_INFO "rtlwifi: wireless switch is %s\n",
262 rtlpriv->rfkill.rfkill_state ? "on" : "off")); 259 rtlpriv->rfkill.rfkill_state ? "on" : "off");
263 260
261 if (valid) {
264 rtlpriv->rfkill.rfkill_state = radio_state; 262 rtlpriv->rfkill.rfkill_state = radio_state;
265 263
266 blocked = (rtlpriv->rfkill.rfkill_state == 1) ? 0 : 1; 264 blocked = (rtlpriv->rfkill.rfkill_state == 1) ? 0 : 1;
diff --git a/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c b/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c
index 1266dbe4417..1c41a0c9350 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192ce/hw.c
@@ -962,17 +962,6 @@ int rtl92ce_hw_init(struct ieee80211_hw *hw)
962 rtl_cam_reset_all_entry(hw); 962 rtl_cam_reset_all_entry(hw);
963 rtl92ce_enable_hw_security_config(hw); 963 rtl92ce_enable_hw_security_config(hw);
964 ppsc->rfpwr_state = ERFON; 964 ppsc->rfpwr_state = ERFON;
965 tmp_u1b = rtl_read_byte(rtlpriv, REG_MAC_PINMUX_CFG)&(~BIT(3));
966 rtl_write_byte(rtlpriv, REG_MAC_PINMUX_CFG, tmp_u1b);
967 tmp_u1b = rtl_read_byte(rtlpriv, REG_GPIO_IO_SEL);
968 ppsc->rfoff_reason |= (tmp_u1b & BIT(3)) ? 0 : RF_CHANGE_BY_HW;
969 if (ppsc->rfoff_reason > RF_CHANGE_BY_PS)
970 rtl_ps_set_rf_state(hw, ERFOFF, ppsc->rfoff_reason, true);
971 else {
972 ppsc->rfpwr_state = ERFON;
973 ppsc->rfoff_reason = 0;
974 rtlpriv->cfg->ops->led_control(hw, LED_CTL_POWER_ON);
975 }
976 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ETHER_ADDR, mac->mac_addr); 965 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ETHER_ADDR, mac->mac_addr);
977 _rtl92ce_enable_aspm_back_door(hw); 966 _rtl92ce_enable_aspm_back_door(hw);
978 rtlpriv->intf_ops->enable_aspm(hw); 967 rtlpriv->intf_ops->enable_aspm(hw);