From: Yan-Hsuan Chuang <[email protected]>

Add support for doing IQK in firmware

Signed-off-by: Yan-Hsuan Chuang <[email protected]>
---
 drivers/net/wireless/realtek/rtw88/rtw8822c.c | 16 ++++++++++++++++
 drivers/net/wireless/realtek/rtw88/rtw8822c.h |  2 ++
 2 files changed, 18 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c 
b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
index e11bbc3..176ca5f 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
@@ -1876,6 +1876,22 @@ static void rtw8822c_false_alarm_statistics(struct 
rtw_dev *rtwdev)
 
 static void rtw8822c_do_iqk(struct rtw_dev *rtwdev)
 {
+       struct rtw_iqk_para para = {0};
+       u8 iqk_chk;
+       int counter;
+
+       para.clear = 1;
+       rtw_fw_do_iqk(rtwdev, &para);
+
+       for (counter = 0; counter < 300; counter++) {
+               iqk_chk = rtw_read8(rtwdev, REG_RPT_CIP);
+               if (iqk_chk == 0xaa)
+                       break;
+               msleep(20);
+       }
+       rtw_write8(rtwdev, REG_IQKSTAT, 0x0);
+
+       rtw_dbg(rtwdev, RTW_DBG_RFK, "iqk counter=%d\n", counter);
 }
 
 /* for coex */
diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.h 
b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
index 5ee1de4..14a8894 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.h
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.h
@@ -176,6 +176,7 @@ struct rtw8822c_efuse {
 #define REG_TXF7       0x1ab0
 #define REG_CCK_SOURCE 0x1abc
 #define BIT_NBI_EN             BIT(30)
+#define REG_IQKSTAT    0x1b10
 #define REG_TXANT      0x1c28
 #define REG_ENCCK      0x1c3c
 #define BIT_CCK_BLK_EN         BIT(1)
@@ -197,6 +198,7 @@ struct rtw8822c_efuse {
 #define REG_OFDM_FACNT3        0x2d0c
 #define REG_OFDM_FACNT4        0x2d10
 #define REG_OFDM_FACNT5        0x2d20
+#define REG_RPT_CIP    0x2d9c
 #define REG_OFDM_TXCNT 0x2de0
 #define REG_ORITXCODE2 0x4100
 #define REG_3WIRE2     0x410c
-- 
2.7.4

Reply via email to