]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtl8xxxu: Fix RX channel width reported by RTL8192FU
authorBitterblue Smith <rtl8821cerfe2@gmail.com>
Thu, 20 Nov 2025 14:13:17 +0000 (16:13 +0200)
committerPing-Ke Shih <pkshih@realtek.com>
Fri, 21 Nov 2025 05:33:29 +0000 (13:33 +0800)
The other chips report the RX channel width in the RX descriptor,
but this one doesn't.

Get the RX channel width from the PHY status.

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/1c6c1fd4-92f6-4327-a24e-f0747ab21819@gmail.com
drivers/net/wireless/realtek/rtl8xxxu/core.c

index 739456640ca8be4e84b3ebdb8c7c7a5bce11c01a..a18f73aea83741c8f4459c72ada788cd05fa8c97 100644 (file)
@@ -5701,7 +5701,7 @@ static void jaguar2_rx_parse_phystats_type1(struct rtl8xxxu_priv *priv,
                         !rtl8xxxu_is_sta_sta(priv) &&
                         (rtl8xxxu_is_packet_match_bssid(priv, hdr, 0) ||
                          rtl8xxxu_is_packet_match_bssid(priv, hdr, 1));
-       u8 pwdb_max = 0;
+       u8 pwdb_max = 0, rxsc;
        int rx_path;
 
        if (parse_cfo) {
@@ -5716,6 +5716,16 @@ static void jaguar2_rx_parse_phystats_type1(struct rtl8xxxu_priv *priv,
                pwdb_max = max(pwdb_max, phy_stats1->pwdb[rx_path]);
 
        rx_status->signal = pwdb_max - 110;
+
+       if (rxmcs >= DESC_RATE_6M && rxmcs <= DESC_RATE_54M)
+               rxsc = phy_stats1->l_rxsc;
+       else
+               rxsc = phy_stats1->ht_rxsc;
+
+       if (phy_stats1->rf_mode == 0 || rxsc == 1 || rxsc == 2)
+               rx_status->bw = RATE_INFO_BW_20;
+       else
+               rx_status->bw = RATE_INFO_BW_40;
 }
 
 static void jaguar2_rx_parse_phystats_type2(struct rtl8xxxu_priv *priv,