aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtlwifi
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2015-06-23 04:03:18 -0400
committerDavid S. Miller <davem@davemloft.net>2015-06-23 04:03:18 -0400
commitfa433354f042105fc7a299253f904bb48dae0950 (patch)
tree7dc747d4f994713699a37080b0774f8315a1e1ef /drivers/net/wireless/rtlwifi
parent10ea5165e44ec8467e393a84ecfbf5732605d504 (diff)
parent40b503c76481aecf811a29a14a80c13b429b5e14 (diff)
Merge tag 'wireless-drivers-next-for-davem-2015-06-18' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== Major changes: mwifiex: * enhancements for AP mode: support verbose information in station dump command and also information about AP link. * enable power save by default brcmfmac: * fix module reload issue for PCIe * improving msgbuf protocol for PCIe devices * rework .get_station() cfg80211 callback operation * determine interface combinations upon device feature support ath9k: * ath9k_htc: add support of channel switch wil6210: * add modparam for bcast ring size * support hidden SSID * add per-MCS Rx stats ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/wireless/rtlwifi')
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8188ee/dm.c7
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c7
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c3
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/hw.c51
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/mac.c15
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/mac.h3
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/phy.c28
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/rf.c22
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192cu/trx.c2
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192de/dm.c7
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8192se/dm.c7
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8723be/dm.c7
-rw-r--r--drivers/net/wireless/rtlwifi/rtl8821ae/dm.c14
-rw-r--r--drivers/net/wireless/rtlwifi/wifi.h1
14 files changed, 63 insertions, 111 deletions
diff --git a/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c b/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c
index d930c1f78721..ce4da9d79fbd 100644
--- a/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c
+++ b/drivers/net/wireless/rtlwifi/rtl8188ee/dm.c
@@ -1123,23 +1123,22 @@ static void rtl88e_dm_init_txpower_tracking(struct ieee80211_hw *hw)
1123void rtl88e_dm_check_txpower_tracking(struct ieee80211_hw *hw) 1123void rtl88e_dm_check_txpower_tracking(struct ieee80211_hw *hw)
1124{ 1124{
1125 struct rtl_priv *rtlpriv = rtl_priv(hw); 1125 struct rtl_priv *rtlpriv = rtl_priv(hw);
1126 static u8 tm_trigger;
1127 1126
1128 if (!rtlpriv->dm.txpower_tracking) 1127 if (!rtlpriv->dm.txpower_tracking)
1129 return; 1128 return;
1130 1129
1131 if (!tm_trigger) { 1130 if (!rtlpriv->dm.tm_trigger) {
1132 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, BIT(17)|BIT(16), 1131 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, BIT(17)|BIT(16),
1133 0x03); 1132 0x03);
1134 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1133 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1135 "Trigger 88E Thermal Meter!!\n"); 1134 "Trigger 88E Thermal Meter!!\n");
1136 tm_trigger = 1; 1135 rtlpriv->dm.tm_trigger = 1;
1137 return; 1136 return;
1138 } else { 1137 } else {
1139 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1138 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1140 "Schedule TxPowerTracking !!\n"); 1139 "Schedule TxPowerTracking !!\n");
1141 dm_txpower_track_cb_therm(hw); 1140 dm_txpower_track_cb_therm(hw);
1142 tm_trigger = 0; 1141 rtlpriv->dm.tm_trigger = 0;
1143 } 1142 }
1144} 1143}
1145 1144
diff --git a/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c b/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c
index f5ee67cda73a..0aca6f47487c 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192c/dm_common.c
@@ -1169,23 +1169,22 @@ static void rtl92c_dm_check_txpower_tracking_thermal_meter(
1169 struct ieee80211_hw *hw) 1169 struct ieee80211_hw *hw)
1170{ 1170{
1171 struct rtl_priv *rtlpriv = rtl_priv(hw); 1171 struct rtl_priv *rtlpriv = rtl_priv(hw);
1172 static u8 tm_trigger;
1173 1172
1174 if (!rtlpriv->dm.txpower_tracking) 1173 if (!rtlpriv->dm.txpower_tracking)
1175 return; 1174 return;
1176 1175
1177 if (!tm_trigger) { 1176 if (!rtlpriv->dm.tm_trigger) {
1178 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, RFREG_OFFSET_MASK, 1177 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, RFREG_OFFSET_MASK,
1179 0x60); 1178 0x60);
1180 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1179 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1181 "Trigger 92S Thermal Meter!!\n"); 1180 "Trigger 92S Thermal Meter!!\n");
1182 tm_trigger = 1; 1181 rtlpriv->dm.tm_trigger = 1;
1183 return; 1182 return;
1184 } else { 1183 } else {
1185 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1184 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1186 "Schedule TxPowerTracking direct call!!\n"); 1185 "Schedule TxPowerTracking direct call!!\n");
1187 rtl92c_dm_txpower_tracking_directcall(hw); 1186 rtl92c_dm_txpower_tracking_directcall(hw);
1188 tm_trigger = 0; 1187 rtlpriv->dm.tm_trigger = 0;
1189 } 1188 }
1190} 1189}
1191 1190
diff --git a/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c b/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c
index 29983bc96a89..14b819ea8b71 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192c/fw_common.c
@@ -233,13 +233,14 @@ int rtl92c_download_fw(struct ieee80211_hw *hw)
233 pfwheader = (struct rtl92c_firmware_header *)rtlhal->pfirmware; 233 pfwheader = (struct rtl92c_firmware_header *)rtlhal->pfirmware;
234 pfwdata = (u8 *)rtlhal->pfirmware; 234 pfwdata = (u8 *)rtlhal->pfirmware;
235 fwsize = rtlhal->fwsize; 235 fwsize = rtlhal->fwsize;
236
237 if (IS_FW_HEADER_EXIST(pfwheader)) { 236 if (IS_FW_HEADER_EXIST(pfwheader)) {
238 RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG, 237 RT_TRACE(rtlpriv, COMP_FW, DBG_DMESG,
239 "Firmware Version(%d), Signature(%#x),Size(%d)\n", 238 "Firmware Version(%d), Signature(%#x),Size(%d)\n",
240 pfwheader->version, pfwheader->signature, 239 pfwheader->version, pfwheader->signature,
241 (int)sizeof(struct rtl92c_firmware_header)); 240 (int)sizeof(struct rtl92c_firmware_header));
242 241
242 rtlhal->fw_version = pfwheader->version;
243 rtlhal->fw_subversion = pfwheader->subversion;
243 pfwdata = pfwdata + sizeof(struct rtl92c_firmware_header); 244 pfwdata = pfwdata + sizeof(struct rtl92c_firmware_header);
244 fwsize = fwsize - sizeof(struct rtl92c_firmware_header); 245 fwsize = fwsize - sizeof(struct rtl92c_firmware_header);
245 } 246 }
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
index 189859617db8..767358a553fb 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
@@ -840,6 +840,26 @@ static void _rtl92cu_init_wmac_setting(struct ieee80211_hw *hw)
840 rtl92c_set_data_filter(hw, value16); 840 rtl92c_set_data_filter(hw, value16);
841} 841}
842 842
843static void _rtl92cu_init_beacon_parameters(struct ieee80211_hw *hw)
844{
845 struct rtl_priv *rtlpriv = rtl_priv(hw);
846 struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
847
848 rtl_write_word(rtlpriv, REG_BCN_CTRL, 0x1010);
849
850 /* TODO: Remove these magic number */
851 rtl_write_word(rtlpriv, REG_TBTT_PROHIBIT, 0x6404);
852 rtl_write_byte(rtlpriv, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME);
853 rtl_write_byte(rtlpriv, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME);
854 /* Change beacon AIFS to the largest number
855 * beacause test chip does not contension before sending beacon.
856 */
857 if (IS_NORMAL_CHIP(rtlhal->version))
858 rtl_write_word(rtlpriv, REG_BCNTCFG, 0x660F);
859 else
860 rtl_write_word(rtlpriv, REG_BCNTCFG, 0x66FF);
861}
862
843static int _rtl92cu_init_mac(struct ieee80211_hw *hw) 863static int _rtl92cu_init_mac(struct ieee80211_hw *hw)
844{ 864{
845 struct rtl_priv *rtlpriv = rtl_priv(hw); 865 struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -887,7 +907,7 @@ static int _rtl92cu_init_mac(struct ieee80211_hw *hw)
887 _rtl92cu_init_usb_aggregation(hw); 907 _rtl92cu_init_usb_aggregation(hw);
888 rtlpriv->cfg->ops->set_bw_mode(hw, NL80211_CHAN_HT20); 908 rtlpriv->cfg->ops->set_bw_mode(hw, NL80211_CHAN_HT20);
889 rtl92c_set_min_space(hw, IS_92C_SERIAL(rtlhal->version)); 909 rtl92c_set_min_space(hw, IS_92C_SERIAL(rtlhal->version));
890 rtl92c_init_beacon_parameters(hw, rtlhal->version); 910 _rtl92cu_init_beacon_parameters(hw);
891 rtl92c_init_ampdu_aggregation(hw); 911 rtl92c_init_ampdu_aggregation(hw);
892 rtl92c_init_beacon_max_error(hw); 912 rtl92c_init_beacon_max_error(hw);
893 return err; 913 return err;
@@ -987,7 +1007,6 @@ int rtl92cu_hw_init(struct ieee80211_hw *hw)
987 struct rtl_phy *rtlphy = &(rtlpriv->phy); 1007 struct rtl_phy *rtlphy = &(rtlpriv->phy);
988 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw)); 1008 struct rtl_ps_ctl *ppsc = rtl_psc(rtl_priv(hw));
989 int err = 0; 1009 int err = 0;
990 static bool iqk_initialized;
991 unsigned long flags; 1010 unsigned long flags;
992 1011
993 /* As this function can take a very long time (up to 350 ms) 1012 /* As this function can take a very long time (up to 350 ms)
@@ -1038,11 +1057,11 @@ int rtl92cu_hw_init(struct ieee80211_hw *hw)
1038 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ETHER_ADDR, mac->mac_addr); 1057 rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_ETHER_ADDR, mac->mac_addr);
1039 if (ppsc->rfpwr_state == ERFON) { 1058 if (ppsc->rfpwr_state == ERFON) {
1040 rtl92c_phy_set_rfpath_switch(hw, 1); 1059 rtl92c_phy_set_rfpath_switch(hw, 1);
1041 if (iqk_initialized) { 1060 if (rtlphy->iqk_initialized) {
1042 rtl92c_phy_iq_calibrate(hw, true); 1061 rtl92c_phy_iq_calibrate(hw, true);
1043 } else { 1062 } else {
1044 rtl92c_phy_iq_calibrate(hw, false); 1063 rtl92c_phy_iq_calibrate(hw, false);
1045 iqk_initialized = true; 1064 rtlphy->iqk_initialized = true;
1046 } 1065 }
1047 rtl92c_dm_check_txpower_tracking(hw); 1066 rtl92c_dm_check_txpower_tracking(hw);
1048 rtl92c_phy_lc_calibrate(hw); 1067 rtl92c_phy_lc_calibrate(hw);
@@ -1391,6 +1410,9 @@ void rtl92cu_card_disable(struct ieee80211_hw *hw)
1391 _CardDisableHWSM(hw); 1410 _CardDisableHWSM(hw);
1392 else 1411 else
1393 _CardDisableWithoutHWSM(hw); 1412 _CardDisableWithoutHWSM(hw);
1413
1414 /* after power off we should do iqk again */
1415 rtlpriv->phy.iqk_initialized = false;
1394} 1416}
1395 1417
1396void rtl92cu_set_check_bssid(struct ieee80211_hw *hw, bool check_bssid) 1418void rtl92cu_set_check_bssid(struct ieee80211_hw *hw, bool check_bssid)
@@ -1451,25 +1473,6 @@ int rtl92cu_set_network_type(struct ieee80211_hw *hw, enum nl80211_iftype type)
1451 return 0; 1473 return 0;
1452} 1474}
1453 1475
1454static void _InitBeaconParameters(struct ieee80211_hw *hw)
1455{
1456 struct rtl_priv *rtlpriv = rtl_priv(hw);
1457 struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
1458
1459 rtl_write_word(rtlpriv, REG_BCN_CTRL, 0x1010);
1460
1461 /* TODO: Remove these magic number */
1462 rtl_write_word(rtlpriv, REG_TBTT_PROHIBIT, 0x6404);
1463 rtl_write_byte(rtlpriv, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME);
1464 rtl_write_byte(rtlpriv, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME);
1465 /* Change beacon AIFS to the largest number
1466 * beacause test chip does not contension before sending beacon. */
1467 if (IS_NORMAL_CHIP(rtlhal->version))
1468 rtl_write_word(rtlpriv, REG_BCNTCFG, 0x660F);
1469 else
1470 rtl_write_word(rtlpriv, REG_BCNTCFG, 0x66FF);
1471}
1472
1473static void _beacon_function_enable(struct ieee80211_hw *hw) 1476static void _beacon_function_enable(struct ieee80211_hw *hw)
1474{ 1477{
1475 struct rtl_priv *rtlpriv = rtl_priv(hw); 1478 struct rtl_priv *rtlpriv = rtl_priv(hw);
@@ -1490,7 +1493,7 @@ void rtl92cu_set_beacon_related_registers(struct ieee80211_hw *hw)
1490 atim_window = 2; /*FIX MERGE */ 1493 atim_window = 2; /*FIX MERGE */
1491 rtl_write_word(rtlpriv, REG_ATIMWND, atim_window); 1494 rtl_write_word(rtlpriv, REG_ATIMWND, atim_window);
1492 rtl_write_word(rtlpriv, REG_BCN_INTERVAL, bcn_interval); 1495 rtl_write_word(rtlpriv, REG_BCN_INTERVAL, bcn_interval);
1493 _InitBeaconParameters(hw); 1496 _rtl92cu_init_beacon_parameters(hw);
1494 rtl_write_byte(rtlpriv, REG_SLOT, 0x09); 1497 rtl_write_byte(rtlpriv, REG_SLOT, 0x09);
1495 /* 1498 /*
1496 * Force beacon frame transmission even after receiving beacon frame 1499 * Force beacon frame transmission even after receiving beacon frame
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
index f3db6bc8596a..490a7cf7c702 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.c
@@ -641,21 +641,6 @@ void rtl92c_init_retry_function(struct ieee80211_hw *hw)
641 rtl_write_byte(rtlpriv, REG_ACKTO, 0x40); 641 rtl_write_byte(rtlpriv, REG_ACKTO, 0x40);
642} 642}
643 643
644void rtl92c_init_beacon_parameters(struct ieee80211_hw *hw,
645 enum version_8192c version)
646{
647 struct rtl_priv *rtlpriv = rtl_priv(hw);
648 struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
649
650 rtl_write_word(rtlpriv, REG_TBTT_PROHIBIT, 0x6404);/* ms */
651 rtl_write_byte(rtlpriv, REG_DRVERLYINT, DRIVER_EARLY_INT_TIME);/*ms*/
652 rtl_write_byte(rtlpriv, REG_BCNDMATIM, BCN_DMA_ATIME_INT_TIME);
653 if (IS_NORMAL_CHIP(rtlhal->version))
654 rtl_write_word(rtlpriv, REG_BCNTCFG, 0x660F);
655 else
656 rtl_write_word(rtlpriv, REG_BCNTCFG, 0x66FF);
657}
658
659void rtl92c_disable_fast_edca(struct ieee80211_hw *hw) 644void rtl92c_disable_fast_edca(struct ieee80211_hw *hw)
660{ 645{
661 struct rtl_priv *rtlpriv = rtl_priv(hw); 646 struct rtl_priv *rtlpriv = rtl_priv(hw);
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.h b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.h
index 58548e8f2c41..e34f0f14ccd7 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/mac.h
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/mac.h
@@ -70,9 +70,6 @@ void rtl92c_init_beacon_max_error(struct ieee80211_hw *hw);
70void rtl92c_init_rdg_setting(struct ieee80211_hw *hw); 70void rtl92c_init_rdg_setting(struct ieee80211_hw *hw);
71void rtl92c_init_retry_function(struct ieee80211_hw *hw); 71void rtl92c_init_retry_function(struct ieee80211_hw *hw);
72 72
73void rtl92c_init_beacon_parameters(struct ieee80211_hw *hw,
74 enum version_8192c version);
75
76void rtl92c_disable_fast_edca(struct ieee80211_hw *hw); 73void rtl92c_disable_fast_edca(struct ieee80211_hw *hw);
77void rtl92c_set_min_space(struct ieee80211_hw *hw, bool is2T); 74void rtl92c_set_min_space(struct ieee80211_hw *hw, bool is2T);
78 75
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c b/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c
index 12f6d474b492..c972fa50926d 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/phy.c
@@ -108,13 +108,8 @@ void rtl92cu_phy_set_rf_reg(struct ieee80211_hw *hw,
108bool rtl92cu_phy_mac_config(struct ieee80211_hw *hw) 108bool rtl92cu_phy_mac_config(struct ieee80211_hw *hw)
109{ 109{
110 bool rtstatus; 110 bool rtstatus;
111 struct rtl_priv *rtlpriv = rtl_priv(hw);
112 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
113 bool is92c = IS_92C_SERIAL(rtlhal->version);
114 111
115 rtstatus = _rtl92cu_phy_config_mac_with_headerfile(hw); 112 rtstatus = _rtl92cu_phy_config_mac_with_headerfile(hw);
116 if (is92c && IS_HARDWARE_TYPE_8192CE(rtlhal))
117 rtl_write_byte(rtlpriv, 0x14, 0x71);
118 return rtstatus; 113 return rtstatus;
119} 114}
120 115
@@ -122,7 +117,6 @@ bool rtl92cu_phy_bb_config(struct ieee80211_hw *hw)
122{ 117{
123 bool rtstatus = true; 118 bool rtstatus = true;
124 struct rtl_priv *rtlpriv = rtl_priv(hw); 119 struct rtl_priv *rtlpriv = rtl_priv(hw);
125 struct rtl_hal *rtlhal = rtl_hal(rtl_priv(hw));
126 u16 regval; 120 u16 regval;
127 u32 regval32; 121 u32 regval32;
128 u8 b_reg_hwparafile = 1; 122 u8 b_reg_hwparafile = 1;
@@ -134,17 +128,11 @@ bool rtl92cu_phy_bb_config(struct ieee80211_hw *hw)
134 rtl_write_byte(rtlpriv, REG_AFE_PLL_CTRL, 0x83); 128 rtl_write_byte(rtlpriv, REG_AFE_PLL_CTRL, 0x83);
135 rtl_write_byte(rtlpriv, REG_AFE_PLL_CTRL + 1, 0xdb); 129 rtl_write_byte(rtlpriv, REG_AFE_PLL_CTRL + 1, 0xdb);
136 rtl_write_byte(rtlpriv, REG_RF_CTRL, RF_EN | RF_RSTB | RF_SDMRSTB); 130 rtl_write_byte(rtlpriv, REG_RF_CTRL, RF_EN | RF_RSTB | RF_SDMRSTB);
137 if (IS_HARDWARE_TYPE_8192CE(rtlhal)) { 131 rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN, FEN_USBA | FEN_USBD |
138 rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN, FEN_PPLL | FEN_PCIEA | 132 FEN_BB_GLB_RSTn | FEN_BBRSTB);
139 FEN_DIO_PCIE | FEN_BB_GLB_RSTn | FEN_BBRSTB);
140 } else if (IS_HARDWARE_TYPE_8192CU(rtlhal)) {
141 rtl_write_byte(rtlpriv, REG_SYS_FUNC_EN, FEN_USBA | FEN_USBD |
142 FEN_BB_GLB_RSTn | FEN_BBRSTB);
143 }
144 regval32 = rtl_read_dword(rtlpriv, 0x87c); 133 regval32 = rtl_read_dword(rtlpriv, 0x87c);
145 rtl_write_dword(rtlpriv, 0x87c, regval32 & (~BIT(31))); 134 rtl_write_dword(rtlpriv, 0x87c, regval32 & (~BIT(31)));
146 if (IS_HARDWARE_TYPE_8192CU(rtlhal)) 135 rtl_write_byte(rtlpriv, REG_LDOHCI12_CTRL, 0x0f);
147 rtl_write_byte(rtlpriv, REG_LDOHCI12_CTRL, 0x0f);
148 rtl_write_byte(rtlpriv, REG_AFE_XTAL_CTRL + 1, 0x80); 136 rtl_write_byte(rtlpriv, REG_AFE_XTAL_CTRL + 1, 0x80);
149 if (b_reg_hwparafile == 1) 137 if (b_reg_hwparafile == 1)
150 rtstatus = _rtl92c_phy_bb8192c_config_parafile(hw); 138 rtstatus = _rtl92c_phy_bb8192c_config_parafile(hw);
@@ -162,7 +150,7 @@ bool _rtl92cu_phy_config_mac_with_headerfile(struct ieee80211_hw *hw)
162 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Read Rtl819XMACPHY_Array\n"); 150 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Read Rtl819XMACPHY_Array\n");
163 arraylength = rtlphy->hwparam_tables[MAC_REG].length ; 151 arraylength = rtlphy->hwparam_tables[MAC_REG].length ;
164 ptrarray = rtlphy->hwparam_tables[MAC_REG].pdata; 152 ptrarray = rtlphy->hwparam_tables[MAC_REG].pdata;
165 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Img:RTL8192CEMAC_2T_ARRAY\n"); 153 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Img:RTL8192CUMAC_2T_ARRAY\n");
166 for (i = 0; i < arraylength; i = i + 2) 154 for (i = 0; i < arraylength; i = i + 2)
167 rtl_write_byte(rtlpriv, ptrarray[i], (u8) ptrarray[i + 1]); 155 rtl_write_byte(rtlpriv, ptrarray[i], (u8) ptrarray[i + 1]);
168 return true; 156 return true;
@@ -259,18 +247,18 @@ bool rtl92cu_phy_config_rf_with_headerfile(struct ieee80211_hw *hw,
259 radiob_arraylen = rtlphy->hwparam_tables[RADIOB_2T].length; 247 radiob_arraylen = rtlphy->hwparam_tables[RADIOB_2T].length;
260 radiob_array_table = rtlphy->hwparam_tables[RADIOB_2T].pdata; 248 radiob_array_table = rtlphy->hwparam_tables[RADIOB_2T].pdata;
261 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 249 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
262 "Radio_A:RTL8192CERADIOA_2TARRAY\n"); 250 "Radio_A:RTL8192CURADIOA_2TARRAY\n");
263 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 251 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
264 "Radio_B:RTL8192CE_RADIOB_2TARRAY\n"); 252 "Radio_B:RTL8192CU_RADIOB_2TARRAY\n");
265 } else { 253 } else {
266 radioa_arraylen = rtlphy->hwparam_tables[RADIOA_1T].length; 254 radioa_arraylen = rtlphy->hwparam_tables[RADIOA_1T].length;
267 radioa_array_table = rtlphy->hwparam_tables[RADIOA_1T].pdata; 255 radioa_array_table = rtlphy->hwparam_tables[RADIOA_1T].pdata;
268 radiob_arraylen = rtlphy->hwparam_tables[RADIOB_1T].length; 256 radiob_arraylen = rtlphy->hwparam_tables[RADIOB_1T].length;
269 radiob_array_table = rtlphy->hwparam_tables[RADIOB_1T].pdata; 257 radiob_array_table = rtlphy->hwparam_tables[RADIOB_1T].pdata;
270 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 258 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
271 "Radio_A:RTL8192CE_RADIOA_1TARRAY\n"); 259 "Radio_A:RTL8192CU_RADIOA_1TARRAY\n");
272 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, 260 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE,
273 "Radio_B:RTL8192CE_RADIOB_1TARRAY\n"); 261 "Radio_B:RTL8192CU_RADIOB_1TARRAY\n");
274 } 262 }
275 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Radio No %x\n", rfpath); 263 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "Radio No %x\n", rfpath);
276 switch (rfpath) { 264 switch (rfpath) {
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c b/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c
index b878d56d2f4d..5624ade92cc0 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/rf.c
@@ -66,7 +66,6 @@ void rtl92cu_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
66{ 66{
67 struct rtl_priv *rtlpriv = rtl_priv(hw); 67 struct rtl_priv *rtlpriv = rtl_priv(hw);
68 struct rtl_phy *rtlphy = &(rtlpriv->phy); 68 struct rtl_phy *rtlphy = &(rtlpriv->phy);
69 struct rtl_hal *rtlhal = rtl_hal(rtlpriv);
70 struct rtl_mac *mac = rtl_mac(rtl_priv(hw)); 69 struct rtl_mac *mac = rtl_mac(rtl_priv(hw));
71 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw)); 70 struct rtl_efuse *rtlefuse = rtl_efuse(rtl_priv(hw));
72 u32 tx_agc[2] = { 0, 0 }, tmpval = 0; 71 u32 tx_agc[2] = { 0, 0 }, tmpval = 0;
@@ -74,14 +73,8 @@ void rtl92cu_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
74 u8 idx1, idx2; 73 u8 idx1, idx2;
75 u8 *ptr; 74 u8 *ptr;
76 75
77 if (rtlhal->interface == INTF_PCI) { 76 if ((rtlefuse->eeprom_regulatory != 0) || (rtlefuse->external_pa))
78 if (rtlefuse->eeprom_regulatory != 0) 77 turbo_scanoff = true;
79 turbo_scanoff = true;
80 } else {
81 if ((rtlefuse->eeprom_regulatory != 0) ||
82 (rtlefuse->external_pa))
83 turbo_scanoff = true;
84 }
85 if (mac->act_scanning) { 78 if (mac->act_scanning) {
86 tx_agc[RF90_PATH_A] = 0x3f3f3f3f; 79 tx_agc[RF90_PATH_A] = 0x3f3f3f3f;
87 tx_agc[RF90_PATH_B] = 0x3f3f3f3f; 80 tx_agc[RF90_PATH_B] = 0x3f3f3f3f;
@@ -90,11 +83,8 @@ void rtl92cu_phy_rf6052_set_cck_txpower(struct ieee80211_hw *hw,
90 (ppowerlevel[idx1] << 8) | 83 (ppowerlevel[idx1] << 8) |
91 (ppowerlevel[idx1] << 16) | 84 (ppowerlevel[idx1] << 16) |
92 (ppowerlevel[idx1] << 24); 85 (ppowerlevel[idx1] << 24);
93 if (rtlhal->interface == INTF_USB) { 86 if (tx_agc[idx1] > 0x20 && rtlefuse->external_pa)
94 if (tx_agc[idx1] > 0x20 && 87 tx_agc[idx1] = 0x20;
95 rtlefuse->external_pa)
96 tx_agc[idx1] = 0x20;
97 }
98 } 88 }
99 } else { 89 } else {
100 if (rtlpriv->dm.dynamic_txhighpower_lvl == 90 if (rtlpriv->dm.dynamic_txhighpower_lvl ==
@@ -452,9 +442,6 @@ static bool _rtl92c_phy_rf6052_config_parafile(struct ieee80211_hw *hw)
452 udelay(1); 442 udelay(1);
453 switch (rfpath) { 443 switch (rfpath) {
454 case RF90_PATH_A: 444 case RF90_PATH_A:
455 rtstatus = rtl92cu_phy_config_rf_with_headerfile(hw,
456 (enum radio_path) rfpath);
457 break;
458 case RF90_PATH_B: 445 case RF90_PATH_B:
459 rtstatus = rtl92cu_phy_config_rf_with_headerfile(hw, 446 rtstatus = rtl92cu_phy_config_rf_with_headerfile(hw,
460 (enum radio_path) rfpath); 447 (enum radio_path) rfpath);
@@ -483,7 +470,6 @@ static bool _rtl92c_phy_rf6052_config_parafile(struct ieee80211_hw *hw)
483 } 470 }
484 } 471 }
485 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "<---\n"); 472 RT_TRACE(rtlpriv, COMP_INIT, DBG_TRACE, "<---\n");
486 return rtstatus;
487phy_rf_cfg_fail: 473phy_rf_cfg_fail:
488 return rtstatus; 474 return rtstatus;
489} 475}
diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
index cbead007171f..95880fe4106e 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192cu/trx.c
@@ -321,7 +321,7 @@ bool rtl92cu_rx_query_desc(struct ieee80211_hw *hw,
321 stats->rate = (u8) GET_RX_DESC_RX_MCS(pdesc); 321 stats->rate = (u8) GET_RX_DESC_RX_MCS(pdesc);
322 stats->shortpreamble = (u16) GET_RX_DESC_SPLCP(pdesc); 322 stats->shortpreamble = (u16) GET_RX_DESC_SPLCP(pdesc);
323 stats->isampdu = (bool) (GET_RX_DESC_PAGGR(pdesc) == 1); 323 stats->isampdu = (bool) (GET_RX_DESC_PAGGR(pdesc) == 1);
324 stats->isampdu = (bool) ((GET_RX_DESC_PAGGR(pdesc) == 1) 324 stats->isfirst_ampdu = (bool)((GET_RX_DESC_PAGGR(pdesc) == 1)
325 && (GET_RX_DESC_FAGGR(pdesc) == 1)); 325 && (GET_RX_DESC_FAGGR(pdesc) == 1));
326 stats->timestamp_low = GET_RX_DESC_TSFL(pdesc); 326 stats->timestamp_low = GET_RX_DESC_TSFL(pdesc);
327 stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc); 327 stats->rx_is40Mhzpacket = (bool) GET_RX_DESC_BW(pdesc);
diff --git a/drivers/net/wireless/rtlwifi/rtl8192de/dm.c b/drivers/net/wireless/rtlwifi/rtl8192de/dm.c
index a1be5a68edfb..587b8c505a76 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192de/dm.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192de/dm.c
@@ -1240,23 +1240,22 @@ static void rtl92d_dm_initialize_txpower_tracking(struct ieee80211_hw *hw)
1240void rtl92d_dm_check_txpower_tracking_thermal_meter(struct ieee80211_hw *hw) 1240void rtl92d_dm_check_txpower_tracking_thermal_meter(struct ieee80211_hw *hw)
1241{ 1241{
1242 struct rtl_priv *rtlpriv = rtl_priv(hw); 1242 struct rtl_priv *rtlpriv = rtl_priv(hw);
1243 static u8 tm_trigger;
1244 1243
1245 if (!rtlpriv->dm.txpower_tracking) 1244 if (!rtlpriv->dm.txpower_tracking)
1246 return; 1245 return;
1247 1246
1248 if (!tm_trigger) { 1247 if (!rtlpriv->dm.tm_trigger) {
1249 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, BIT(17) | 1248 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, BIT(17) |
1250 BIT(16), 0x03); 1249 BIT(16), 0x03);
1251 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1250 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1252 "Trigger 92S Thermal Meter!!\n"); 1251 "Trigger 92S Thermal Meter!!\n");
1253 tm_trigger = 1; 1252 rtlpriv->dm.tm_trigger = 1;
1254 return; 1253 return;
1255 } else { 1254 } else {
1256 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1255 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1257 "Schedule TxPowerTracking direct call!!\n"); 1256 "Schedule TxPowerTracking direct call!!\n");
1258 rtl92d_dm_txpower_tracking_callback_thermalmeter(hw); 1257 rtl92d_dm_txpower_tracking_callback_thermalmeter(hw);
1259 tm_trigger = 0; 1258 rtlpriv->dm.tm_trigger = 0;
1260 } 1259 }
1261} 1260}
1262 1261
diff --git a/drivers/net/wireless/rtlwifi/rtl8192se/dm.c b/drivers/net/wireless/rtlwifi/rtl8192se/dm.c
index 575980b88658..9bae5a92e30f 100644
--- a/drivers/net/wireless/rtlwifi/rtl8192se/dm.c
+++ b/drivers/net/wireless/rtlwifi/rtl8192se/dm.c
@@ -200,7 +200,6 @@ static void _rtl92s_dm_check_txpowertracking_thermalmeter(
200{ 200{
201 struct rtl_priv *rtlpriv = rtl_priv(hw); 201 struct rtl_priv *rtlpriv = rtl_priv(hw);
202 struct rtl_phy *rtlphy = &(rtlpriv->phy); 202 struct rtl_phy *rtlphy = &(rtlpriv->phy);
203 static u8 tm_trigger;
204 u8 tx_power_checkcnt = 5; 203 u8 tx_power_checkcnt = 5;
205 204
206 /* 2T2R TP issue */ 205 /* 2T2R TP issue */
@@ -215,13 +214,13 @@ static void _rtl92s_dm_check_txpowertracking_thermalmeter(
215 return; 214 return;
216 } 215 }
217 216
218 if (!tm_trigger) { 217 if (!rtlpriv->dm.tm_trigger) {
219 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, 218 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER,
220 RFREG_OFFSET_MASK, 0x60); 219 RFREG_OFFSET_MASK, 0x60);
221 tm_trigger = 1; 220 rtlpriv->dm.tm_trigger = 1;
222 } else { 221 } else {
223 _rtl92s_dm_txpowertracking_callback_thermalmeter(hw); 222 _rtl92s_dm_txpowertracking_callback_thermalmeter(hw);
224 tm_trigger = 0; 223 rtlpriv->dm.tm_trigger = 0;
225 } 224 }
226} 225}
227 226
diff --git a/drivers/net/wireless/rtlwifi/rtl8723be/dm.c b/drivers/net/wireless/rtlwifi/rtl8723be/dm.c
index e77c3a46c94a..3a81cdba8ca3 100644
--- a/drivers/net/wireless/rtlwifi/rtl8723be/dm.c
+++ b/drivers/net/wireless/rtlwifi/rtl8723be/dm.c
@@ -909,23 +909,22 @@ static void rtl8723be_dm_txpower_tracking_callback_thermalmeter(
909void rtl8723be_dm_check_txpower_tracking(struct ieee80211_hw *hw) 909void rtl8723be_dm_check_txpower_tracking(struct ieee80211_hw *hw)
910{ 910{
911 struct rtl_priv *rtlpriv = rtl_priv(hw); 911 struct rtl_priv *rtlpriv = rtl_priv(hw);
912 static u8 tm_trigger;
913 912
914 if (!rtlpriv->dm.txpower_tracking) 913 if (!rtlpriv->dm.txpower_tracking)
915 return; 914 return;
916 915
917 if (!tm_trigger) { 916 if (!rtlpriv->dm.tm_trigger) {
918 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, BIT(17) | BIT(16), 917 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER, BIT(17) | BIT(16),
919 0x03); 918 0x03);
920 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 919 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
921 "Trigger 8723be Thermal Meter!!\n"); 920 "Trigger 8723be Thermal Meter!!\n");
922 tm_trigger = 1; 921 rtlpriv->dm.tm_trigger = 1;
923 return; 922 return;
924 } else { 923 } else {
925 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 924 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
926 "Schedule TxPowerTracking !!\n"); 925 "Schedule TxPowerTracking !!\n");
927 rtl8723be_dm_txpower_tracking_callback_thermalmeter(hw); 926 rtl8723be_dm_txpower_tracking_callback_thermalmeter(hw);
928 tm_trigger = 0; 927 rtlpriv->dm.tm_trigger = 0;
929 } 928 }
930} 929}
931 930
diff --git a/drivers/net/wireless/rtlwifi/rtl8821ae/dm.c b/drivers/net/wireless/rtlwifi/rtl8821ae/dm.c
index 342678d2ed42..b57cfd965196 100644
--- a/drivers/net/wireless/rtlwifi/rtl8821ae/dm.c
+++ b/drivers/net/wireless/rtlwifi/rtl8821ae/dm.c
@@ -1068,20 +1068,18 @@ static void rtl8812ae_dm_check_txpower_tracking_thermalmeter(
1068 struct ieee80211_hw *hw) 1068 struct ieee80211_hw *hw)
1069{ 1069{
1070 struct rtl_priv *rtlpriv = rtl_priv(hw); 1070 struct rtl_priv *rtlpriv = rtl_priv(hw);
1071 static u8 tm_trigger;
1072 1071
1073 if (!tm_trigger) { 1072 if (!rtlpriv->dm.tm_trigger) {
1074 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER_88E, 1073 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER_88E,
1075 BIT(17) | BIT(16), 0x03); 1074 BIT(17) | BIT(16), 0x03);
1076 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1075 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1077 "Trigger 8812 Thermal Meter!!\n"); 1076 "Trigger 8812 Thermal Meter!!\n");
1078 tm_trigger = 1; 1077 rtlpriv->dm.tm_trigger = 1;
1079 return; 1078 return;
1080 } 1079 }
1081 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 1080 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
1082 "Schedule TxPowerTracking direct call!!\n"); 1081 "Schedule TxPowerTracking direct call!!\n");
1083 rtl8812ae_dm_txpower_tracking_callback_thermalmeter(hw); 1082 rtl8812ae_dm_txpower_tracking_callback_thermalmeter(hw);
1084 tm_trigger = 0;
1085} 1083}
1086 1084
1087static void rtl8821ae_dm_iq_calibrate(struct ieee80211_hw *hw) 1085static void rtl8821ae_dm_iq_calibrate(struct ieee80211_hw *hw)
@@ -2519,21 +2517,19 @@ void rtl8821ae_dm_txpower_tracking_callback_thermalmeter(
2519void rtl8821ae_dm_check_txpower_tracking_thermalmeter(struct ieee80211_hw *hw) 2517void rtl8821ae_dm_check_txpower_tracking_thermalmeter(struct ieee80211_hw *hw)
2520{ 2518{
2521 struct rtl_priv *rtlpriv = rtl_priv(hw); 2519 struct rtl_priv *rtlpriv = rtl_priv(hw);
2522 static u8 tm_trigger; 2520 if (!rtlpriv->dm.tm_trigger) {
2523
2524 if (!tm_trigger) {
2525 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER_88E, BIT(17)|BIT(16), 2521 rtl_set_rfreg(hw, RF90_PATH_A, RF_T_METER_88E, BIT(17)|BIT(16),
2526 0x03); 2522 0x03);
2527 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 2523 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
2528 "Trigger 8821ae Thermal Meter!!\n"); 2524 "Trigger 8821ae Thermal Meter!!\n");
2529 tm_trigger = 1; 2525 rtlpriv->dm.tm_trigger = 1;
2530 return; 2526 return;
2531 } else { 2527 } else {
2532 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD, 2528 RT_TRACE(rtlpriv, COMP_POWER_TRACKING, DBG_LOUD,
2533 "Schedule TxPowerTracking !!\n"); 2529 "Schedule TxPowerTracking !!\n");
2534 2530
2535 rtl8821ae_dm_txpower_tracking_callback_thermalmeter(hw); 2531 rtl8821ae_dm_txpower_tracking_callback_thermalmeter(hw);
2536 tm_trigger = 0; 2532 rtlpriv->dm.tm_trigger = 0;
2537 } 2533 }
2538} 2534}
2539 2535
diff --git a/drivers/net/wireless/rtlwifi/wifi.h b/drivers/net/wireless/rtlwifi/wifi.h
index 51572912c53d..2b770b5e2620 100644
--- a/drivers/net/wireless/rtlwifi/wifi.h
+++ b/drivers/net/wireless/rtlwifi/wifi.h
@@ -1665,6 +1665,7 @@ struct rtl_dm {
1665 u8 last_dtp_lvl; 1665 u8 last_dtp_lvl;
1666 u8 thermalvalue_avg[AVG_THERMAL_NUM]; 1666 u8 thermalvalue_avg[AVG_THERMAL_NUM];
1667 u8 thermalvalue_avg_index; 1667 u8 thermalvalue_avg_index;
1668 u8 tm_trigger;
1668 bool done_txpower; 1669 bool done_txpower;
1669 u8 dynamic_txhighpower_lvl; /*Tx high power level */ 1670 u8 dynamic_txhighpower_lvl; /*Tx high power level */
1670 u8 dm_flag; /*Indicate each dynamic mechanism's status. */ 1671 u8 dm_flag; /*Indicate each dynamic mechanism's status. */