Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

wifi: rtw89: collect and send RF parameters to firmware for WoWLAN

For WoWLAN mode, we only collect and send RF parameters to Firmware
without writing RF registers. So we add one function to practice it.

Signed-off-by: Chih-Kang Chang <gary.chang@realtek.com>
Signed-off-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20221027052707.14605-2-pkshih@realtek.com

authored by

Chih-Kang Chang and committed by
Kalle Valo
d9112042 46245bc4

+31 -4
+1 -1
drivers/net/wireless/realtek/rtw89/core.c
··· 2962 2962 return ret; 2963 2963 2964 2964 rtw89_phy_init_bb_reg(rtwdev); 2965 - rtw89_phy_init_rf_reg(rtwdev); 2965 + rtw89_phy_init_rf_reg(rtwdev, false); 2966 2966 2967 2967 rtw89_btc_ntfy_init(rtwdev, BTC_MODE_NORMAL); 2968 2968
+29 -2
drivers/net/wireless/realtek/rtw89/phy.c
··· 801 801 } 802 802 EXPORT_SYMBOL(rtw89_phy_write_rf_v1); 803 803 804 + static bool rtw89_chip_rf_v1(struct rtw89_dev *rtwdev) 805 + { 806 + return rtwdev->chip->ops->write_rf == rtw89_phy_write_rf_v1; 807 + } 808 + 804 809 static void rtw89_phy_bb_reset(struct rtw89_dev *rtwdev, 805 810 enum rtw89_phy_idx phy_idx) 806 811 { ··· 1128 1123 return ret; 1129 1124 } 1130 1125 1126 + static void rtw89_phy_config_rf_reg_noio(struct rtw89_dev *rtwdev, 1127 + const struct rtw89_reg2_def *reg, 1128 + enum rtw89_rf_path rf_path, 1129 + void *extra_data) 1130 + { 1131 + u32 addr = reg->addr; 1132 + 1133 + if (addr == 0xfe || addr == 0xfd || addr == 0xfc || addr == 0xfb || 1134 + addr == 0xfa || addr == 0xf9) 1135 + return; 1136 + 1137 + if (rtw89_chip_rf_v1(rtwdev) && addr < 0x100) 1138 + return; 1139 + 1140 + rtw89_phy_cofig_rf_reg_store(rtwdev, reg, rf_path, 1141 + (struct rtw89_fw_h2c_rf_reg_info *)extra_data); 1142 + } 1143 + 1131 1144 static void rtw89_phy_config_rf_reg(struct rtw89_dev *rtwdev, 1132 1145 const struct rtw89_reg2_def *reg, 1133 1146 enum rtw89_rf_path rf_path, ··· 1358 1335 return rtw89_phy_read32(rtwdev, 0x8080); 1359 1336 } 1360 1337 1361 - void rtw89_phy_init_rf_reg(struct rtw89_dev *rtwdev) 1338 + void rtw89_phy_init_rf_reg(struct rtw89_dev *rtwdev, bool noio) 1362 1339 { 1363 1340 void (*config)(struct rtw89_dev *rtwdev, const struct rtw89_reg2_def *reg, 1364 1341 enum rtw89_rf_path rf_path, void *data); ··· 1374 1351 for (path = RF_PATH_A; path < chip->rf_path_num; path++) { 1375 1352 rf_table = chip->rf_table[path]; 1376 1353 rf_reg_info->rf_path = rf_table->rf_path; 1377 - config = rf_table->config ? rf_table->config : rtw89_phy_config_rf_reg; 1354 + if (noio) 1355 + config = rtw89_phy_config_rf_reg_noio; 1356 + else 1357 + config = rf_table->config ? rf_table->config : 1358 + rtw89_phy_config_rf_reg; 1378 1359 rtw89_phy_init_reg(rtwdev, rf_table, config, (void *)rf_reg_info); 1379 1360 if (rtw89_phy_config_rf_reg_fw(rtwdev, rf_reg_info)) 1380 1361 rtw89_warn(rtwdev, "rf path %d reg h2c config failed\n",
+1 -1
drivers/net/wireless/realtek/rtw89/phy.h
··· 500 500 bool rtw89_phy_write_rf_v1(struct rtw89_dev *rtwdev, enum rtw89_rf_path rf_path, 501 501 u32 addr, u32 mask, u32 data); 502 502 void rtw89_phy_init_bb_reg(struct rtw89_dev *rtwdev); 503 - void rtw89_phy_init_rf_reg(struct rtw89_dev *rtwdev); 503 + void rtw89_phy_init_rf_reg(struct rtw89_dev *rtwdev, bool noio); 504 504 void rtw89_phy_config_rf_reg_v1(struct rtw89_dev *rtwdev, 505 505 const struct rtw89_reg2_def *reg, 506 506 enum rtw89_rf_path rf_path,