diff mbox series

[2/4] rtlwifi: rtl8723ae: Don't use dm.undec_sm_pwdb for input

Message ID DB7PR07MB5353656A6EDA15D210CE098FE48E0@DB7PR07MB5353.eurprd07.prod.outlook.com
State Awaiting Upstream
Delegated to: David Miller
Headers show
Series rtlwifi: Fix issues with rtl8723ae | expand

Commit Message

Bernd Edlinger Jan. 4, 2019, 12:48 p.m. UTC
gain control when no beacon was received in the connected state.

This avoids sporadic "Connection to AP ... lost" errors.

Signed-off-by: Bernd Edlinger <bernd.edlinger@hotmail.de>
---
  drivers/net/wireless/realtek/rtlwifi/core.c         | 2 ++
  drivers/net/wireless/realtek/rtlwifi/rtl8723ae/dm.c | 8 ++++++++
  2 files changed, 10 insertions(+)
diff mbox series

Patch

diff --git a/drivers/net/wireless/realtek/rtlwifi/core.c b/drivers/net/wireless/realtek/rtlwifi/core.c
index 4bf7967..ce23339 100644
--- a/drivers/net/wireless/realtek/rtlwifi/core.c
+++ b/drivers/net/wireless/realtek/rtlwifi/core.c
@@ -1957,5 +1957,7 @@  void rtl_dm_diginit(struct ieee80211_hw *hw, u32 cur_igvalue)
  	dm_digtable->bt30_cur_igi = 0x32;
  	dm_digtable->pre_cck_pd_state = CCK_PD_STAGE_MAX;
  	dm_digtable->cur_cck_pd_state = CCK_PD_STAGE_LOWRSSI;
+	dm_digtable->pre_cck_fa_state = 0;
+	dm_digtable->cur_cck_fa_state = 0;
  }
  EXPORT_SYMBOL(rtl_dm_diginit);
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/dm.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/dm.c
index 42a6fba..902b944 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/dm.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723ae/dm.c
@@ -151,8 +151,14 @@  static u8 rtl8723e_dm_initial_gain_min_pwdb(struct ieee80211_hw *hw)
  {
  	struct rtl_priv *rtlpriv = rtl_priv(hw);
  	struct dig_t *dm_digtable = &rtlpriv->dm_digtable;
+	struct rtl_mac *mac = rtl_mac(rtlpriv);
  	long rssi_val_min = 0;
  
+	if (mac->link_state == MAC80211_LINKED &&
+	    mac->opmode == NL80211_IFTYPE_STATION &&
+	    rtlpriv->link_info.bcn_rx_inperiod == 0)
+		return 0;
+
  	if ((dm_digtable->curmultista_cstate == DIG_MULTISTA_CONNECT) &&
  	    (dm_digtable->cursta_cstate == DIG_STA_CONNECT)) {
  		if (rtlpriv->dm.entry_min_undec_sm_pwdb != 0)
@@ -417,6 +423,8 @@  static void rtl8723e_dm_cck_packet_detection_thresh(struct ieee80211_hw *hw)
  		} else {
  			rtl_set_bbreg(hw, RCCK0_CCA, MASKBYTE2, 0xcd);
  			rtl_set_bbreg(hw, RCCK0_SYSTEM, MASKBYTE1, 0x47);
+			dm_digtable->pre_cck_fa_state = 0;
+			dm_digtable->cur_cck_fa_state = 0;
  
  		}
  		dm_digtable->pre_cck_pd_state = dm_digtable->cur_cck_pd_state;