wifi: rtlwifi: rtl8192cu: Fix 2T2R chip type detection
authorBitterblue Smith <rtl8821cerfe2@gmail.com>
Tue, 13 Feb 2024 14:33:02 +0000 (16:33 +0200)
committerKalle Valo <kvalo@kernel.org>
Thu, 15 Feb 2024 11:10:47 +0000 (13:10 +0200)
rtl8192cu handles 1T1R devices (RTL8188CUS), 1T2R devices (RTL8191CU),
and 2T2R devices (RTL8192CU). The 2T2R devices were incorrectly detected
as 1T2R because of a mistake in the IS_92C_1T2R macro.

The visible effect of this is that the firmware was allowed to use
TX rates only up to MCS7.

Fix the IS_92C_1T2R macro.

Now my 2T2R device has much better upload speed.
Before: 46 Mbps.
After:  82 Mbps.

Also fix a debug message which was printing "RF_1T1R" even for 1T2R
chips.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Acked-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://msgid.link/ed960059-5c77-422d-ac4e-fe9fc9d0d296@gmail.com
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/def.h
drivers/net/wireless/realtek/rtlwifi/rtl8192cu/mac.c

index 91e4427ab022c9bc91f7f7eb346b23d810c1eb5e..4757f93b84e43f44b8ca4c2700b123f51312ed9c 100644 (file)
@@ -11,7 +11,7 @@
 #define CHIP_VENDOR_UMC_B_CUT          BIT(6)
 
 #define IS_92C_1T2R(version)           \
-       (((version) & CHIP_92C) && ((version) & CHIP_92C_1T2R))
+       (((version) & CHIP_92C_1T2R) == CHIP_92C_1T2R)
 
 #define IS_VENDOR_UMC(version)         \
        (((version) & CHIP_VENDOR_UMC) ? true : false)
index 4ff0d411819327fe51754f4ad694470b078b12e5..a76f2dc8a977c9c6b688082de4a553e2b8b99e8c 100644 (file)
@@ -101,7 +101,8 @@ void rtl92c_read_chip_version(struct ieee80211_hw *hw)
                rtlphy->rf_type = RF_1T1R;
        rtl_dbg(rtlpriv, COMP_INIT, DBG_LOUD,
                "Chip RF Type: %s\n",
-               rtlphy->rf_type == RF_2T2R ? "RF_2T2R" : "RF_1T1R");
+               rtlphy->rf_type == RF_2T2R ? "RF_2T2R" :
+               rtlphy->rf_type == RF_1T2R ? "RF_1T2R" : "RF_1T1R");
        if (get_rf_type(rtlphy) == RF_1T1R)
                rtlpriv->dm.rfpath_rxenable[0] = true;
        else