]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: rtw89: phy: update edcca log parsing for RTL8922D
authorEric Huang <echuang@realtek.com>
Sat, 17 Jan 2026 04:41:52 +0000 (12:41 +0800)
committerPing-Ke Shih <pkshih@realtek.com>
Thu, 22 Jan 2026 02:14:17 +0000 (10:14 +0800)
Before this change the rtw89_phy_edcca_log routine didn't handled
RTL8922D. This update expands the logic to recognize RTL8922D EDCCA
reports.

Signed-off-by: Eric Huang <echuang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Link: https://patch.msgid.link/20260117044157.2392958-5-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/phy.c

index 6fd903b44bdb35204ff18244b4768276883c577f..c9bd3b7c54894bc8e4423bdf010b7d528a2fd379 100644 (file)
@@ -7980,6 +7980,7 @@ static void rtw89_phy_edcca_log(struct rtw89_dev *rtwdev, struct rtw89_bb_ctx *b
        bool flag_fb, flag_p20, flag_s20, flag_s40, flag_s80;
        s8 pwdb_fb, pwdb_p20, pwdb_s20, pwdb_s40, pwdb_s80;
        u8 path, per20_bitmap = 0;
+       u8 pwdb_sel = 5;
        u8 pwdb[8];
        u32 tmp;
 
@@ -7991,12 +7992,14 @@ static void rtw89_phy_edcca_log(struct rtw89_dev *rtwdev, struct rtw89_bb_ctx *b
        else
                edcca_p_regs = &edcca_regs->p[RTW89_PHY_0];
 
-       if (rtwdev->chip->chip_id == RTL8922A)
-               rtw89_phy_write32_mask(rtwdev, edcca_regs->rpt_sel_be,
-                                      edcca_regs->rpt_sel_be_mask, 0);
-
        rtw89_phy_write32_mask(rtwdev, edcca_p_regs->rpt_sel,
                               edcca_p_regs->rpt_sel_mask, 0);
+       if (rtwdev->chip->chip_id == RTL8922A || rtwdev->chip->chip_id == RTL8922D) {
+               rtw89_phy_write32_mask(rtwdev, edcca_regs->rpt_sel_be,
+                                      edcca_regs->rpt_sel_be_mask, 0);
+               per20_bitmap = rtw89_phy_read32_mask(rtwdev, edcca_p_regs->rpt_a,
+                                                    MASKBYTE0);
+       }
        tmp = rtw89_phy_read32(rtwdev, edcca_p_regs->rpt_b);
        path = u32_get_bits(tmp, B_EDCCA_RPT_B_PATH_MASK);
        flag_s80 = u32_get_bits(tmp, B_EDCCA_RPT_B_S80);
@@ -8008,13 +8011,16 @@ static void rtw89_phy_edcca_log(struct rtw89_dev *rtwdev, struct rtw89_bb_ctx *b
        pwdb_p20 = u32_get_bits(tmp, MASKBYTE2);
        pwdb_fb = u32_get_bits(tmp, MASKBYTE3);
 
+       if (rtwdev->chip->chip_id == RTL8922D)
+               pwdb_sel = 2;
+
        rtw89_phy_write32_mask(rtwdev, edcca_p_regs->rpt_sel,
-                              edcca_p_regs->rpt_sel_mask, 5);
+                              edcca_p_regs->rpt_sel_mask, pwdb_sel);
        tmp = rtw89_phy_read32(rtwdev, edcca_p_regs->rpt_b);
        pwdb_s80 = u32_get_bits(tmp, MASKBYTE1);
        pwdb_s40 = u32_get_bits(tmp, MASKBYTE2);
 
-       if (rtwdev->chip->chip_id == RTL8922A) {
+       if (rtwdev->chip->chip_id == RTL8922A || rtwdev->chip->chip_id == RTL8922D) {
                rtw89_phy_write32_mask(rtwdev, edcca_regs->rpt_sel_be,
                                       edcca_regs->rpt_sel_be_mask, 4);
                tmp = rtw89_phy_read32(rtwdev, edcca_p_regs->rpt_b);
@@ -8022,8 +8028,6 @@ static void rtw89_phy_edcca_log(struct rtw89_dev *rtwdev, struct rtw89_bb_ctx *b
                pwdb[1] = u32_get_bits(tmp, MASKBYTE2);
                pwdb[2] = u32_get_bits(tmp, MASKBYTE1);
                pwdb[3] = u32_get_bits(tmp, MASKBYTE0);
-               per20_bitmap = rtw89_phy_read32_mask(rtwdev, edcca_p_regs->rpt_a,
-                                                    MASKBYTE0);
 
                rtw89_phy_write32_mask(rtwdev, edcca_regs->rpt_sel_be,
                                       edcca_regs->rpt_sel_be_mask, 5);