]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtl8xxxu: Fix HT40 channel config for RTL8192CU, RTL8723AU
authorBitterblue Smith <rtl8821cerfe2@gmail.com>
Thu, 20 Nov 2025 14:10:01 +0000 (16:10 +0200)
committerPing-Ke Shih <pkshih@realtek.com>
Fri, 21 Nov 2025 05:32:55 +0000 (13:32 +0800)
Flip the response rate subchannel. It was backwards, causing low
speeds when using 40 MHz channel width. "iw dev ... station dump"
showed a low RX rate, 11M or less.

Also fix the channel width field of RF6052_REG_MODE_AG.

Tested only with RTL8192CU, but these settings are identical for
RTL8723AU.

Signed-off-by: Bitterblue Smith <rtl8821cerfe2@gmail.com>
Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/1f46571d-855b-43e1-8bfc-abacceb96043@gmail.com
drivers/net/wireless/realtek/rtl8xxxu/core.c

index d82cb771431401bfc4f1065ca999a792bdd62757..be8ee6c300341ea8b26564e9ec86d422bbdfaba4 100644 (file)
@@ -1252,7 +1252,7 @@ void rtl8xxxu_gen1_config_channel(struct ieee80211_hw *hw)
                opmode &= ~BW_OPMODE_20MHZ;
                rtl8xxxu_write8(priv, REG_BW_OPMODE, opmode);
                rsr &= ~RSR_RSC_BANDWIDTH_40M;
-               if (sec_ch_above)
+               if (!sec_ch_above)
                        rsr |= RSR_RSC_UPPER_SUB_CHANNEL;
                else
                        rsr |= RSR_RSC_LOWER_SUB_CHANNEL;
@@ -1321,9 +1321,8 @@ void rtl8xxxu_gen1_config_channel(struct ieee80211_hw *hw)
 
        for (i = RF_A; i < priv->rf_paths; i++) {
                val32 = rtl8xxxu_read_rfreg(priv, i, RF6052_REG_MODE_AG);
-               if (hw->conf.chandef.width == NL80211_CHAN_WIDTH_40)
-                       val32 &= ~MODE_AG_CHANNEL_20MHZ;
-               else
+               val32 &= ~MODE_AG_BW_MASK;
+               if (hw->conf.chandef.width != NL80211_CHAN_WIDTH_40)
                        val32 |= MODE_AG_CHANNEL_20MHZ;
                rtl8xxxu_write_rfreg(priv, i, RF6052_REG_MODE_AG, val32);
        }