mirror of
https://github.com/torvalds/linux.git
synced 2026-05-31 10:33:41 +02:00
wifi: rtw89: 52c: rfk: disable DPK during MCC
DPK is one kind of RF calibration. When MCC (multi-channel concurrency) start/stop, DPK needs to do extra things to be off/on. We add a chanctx callback type, RTW89_CHANCTX_CALLBACK_RFK, and register it for RTL8852C to deal with DPK according to MCC states. Signed-off-by: Zong-Zhe Yang <kevin_yang@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/20230908031145.20931-4-pkshih@realtek.com
This commit is contained in:
parent
c83ff9a3a2
commit
6e9d6f8254
|
|
@ -3429,6 +3429,7 @@ enum rtw89_chanctx_state {
|
|||
|
||||
enum rtw89_chanctx_callbacks {
|
||||
RTW89_CHANCTX_CALLBACK_PLACEHOLDER,
|
||||
RTW89_CHANCTX_CALLBACK_RFK,
|
||||
|
||||
NUM_OF_RTW89_CHANCTX_CALLBACKS,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
/* Copyright(c) 2019-2022 Realtek Corporation
|
||||
*/
|
||||
|
||||
#include "chan.h"
|
||||
#include "coex.h"
|
||||
#include "debug.h"
|
||||
#include "fw.h"
|
||||
|
|
@ -1776,6 +1777,7 @@ static void rtw8852c_rfk_init(struct rtw89_dev *rtwdev)
|
|||
rtwdev->is_tssi_mode[RF_PATH_B] = false;
|
||||
memset(rfk_mcc, 0, sizeof(*rfk_mcc));
|
||||
rtw8852c_lck_init(rtwdev);
|
||||
rtw8852c_dpk_init(rtwdev);
|
||||
|
||||
rtw8852c_rck(rtwdev);
|
||||
rtw8852c_dack(rtwdev);
|
||||
|
|
@ -2748,6 +2750,10 @@ static int rtw8852c_mac_disable_bb_rf(struct rtw89_dev *rtwdev)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct rtw89_chanctx_listener rtw8852c_chanctx_listener = {
|
||||
.callbacks[RTW89_CHANCTX_CALLBACK_RFK] = rtw8852c_rfk_chanctx_cb,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static const struct wiphy_wowlan_support rtw_wowlan_stub_8852c = {
|
||||
.flags = WIPHY_WOWLAN_MAGIC_PKT | WIPHY_WOWLAN_DISCONNECT,
|
||||
|
|
@ -2841,6 +2847,7 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
|
|||
.byr_table = &rtw89_8852c_byr_table,
|
||||
.dflt_parms = &rtw89_8852c_dflt_parms,
|
||||
.rfe_parms_conf = NULL,
|
||||
.chanctx_listener = &rtw8852c_chanctx_listener,
|
||||
.txpwr_factor_rf = 2,
|
||||
.txpwr_factor_mac = 1,
|
||||
.dig_table = NULL,
|
||||
|
|
|
|||
|
|
@ -4265,6 +4265,14 @@ void rtw8852c_rx_dck_track(struct rtw89_dev *rtwdev)
|
|||
rtw89_btc_ntfy_wl_rfk(rtwdev, phy_map, BTC_WRFKT_RXDCK, BTC_WRFK_STOP);
|
||||
}
|
||||
|
||||
void rtw8852c_dpk_init(struct rtw89_dev *rtwdev)
|
||||
{
|
||||
struct rtw89_dpk_info *dpk = &rtwdev->dpk;
|
||||
|
||||
dpk->is_dpk_enable = true;
|
||||
dpk->is_dpk_reload_en = false;
|
||||
}
|
||||
|
||||
void rtw8852c_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
|
||||
{
|
||||
u32 tx_en;
|
||||
|
|
@ -4274,8 +4282,6 @@ void rtw8852c_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx)
|
|||
rtw89_chip_stop_sch_tx(rtwdev, phy_idx, &tx_en, RTW89_SCH_TX_SEL_ALL);
|
||||
_wait_rx_mode(rtwdev, _kpath(rtwdev, phy_idx));
|
||||
|
||||
rtwdev->dpk.is_dpk_enable = true;
|
||||
rtwdev->dpk.is_dpk_reload_en = false;
|
||||
_dpk(rtwdev, phy_idx, false);
|
||||
|
||||
rtw89_chip_resume_sch_tx(rtwdev, phy_idx, tx_en);
|
||||
|
|
@ -4413,3 +4419,26 @@ void rtw8852c_wifi_scan_notify(struct rtw89_dev *rtwdev,
|
|||
else
|
||||
rtw8852c_tssi_default_txagc(rtwdev, phy_idx, false);
|
||||
}
|
||||
|
||||
void rtw8852c_rfk_chanctx_cb(struct rtw89_dev *rtwdev,
|
||||
enum rtw89_chanctx_state state)
|
||||
{
|
||||
struct rtw89_dpk_info *dpk = &rtwdev->dpk;
|
||||
u8 path;
|
||||
|
||||
switch (state) {
|
||||
case RTW89_CHANCTX_STATE_MCC_START:
|
||||
dpk->is_dpk_enable = false;
|
||||
for (path = 0; path < RTW8852C_DPK_RF_PATH; path++)
|
||||
_dpk_onoff(rtwdev, path, false);
|
||||
break;
|
||||
case RTW89_CHANCTX_STATE_MCC_STOP:
|
||||
dpk->is_dpk_enable = true;
|
||||
for (path = 0; path < RTW8852C_DPK_RF_PATH; path++)
|
||||
_dpk_onoff(rtwdev, path, false);
|
||||
rtw8852c_dpk(rtwdev, RTW89_PHY_0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ void rtw8852c_dack(struct rtw89_dev *rtwdev);
|
|||
void rtw8852c_iqk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx);
|
||||
void rtw8852c_rx_dck(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy_idx, bool is_afe);
|
||||
void rtw8852c_rx_dck_track(struct rtw89_dev *rtwdev);
|
||||
void rtw8852c_dpk_init(struct rtw89_dev *rtwdev);
|
||||
void rtw8852c_dpk(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
|
||||
void rtw8852c_dpk_track(struct rtw89_dev *rtwdev);
|
||||
void rtw8852c_tssi(struct rtw89_dev *rtwdev, enum rtw89_phy_idx phy);
|
||||
|
|
@ -25,5 +26,7 @@ void rtw8852c_set_channel_rf(struct rtw89_dev *rtwdev,
|
|||
enum rtw89_phy_idx phy_idx);
|
||||
void rtw8852c_lck_init(struct rtw89_dev *rtwdev);
|
||||
void rtw8852c_lck_track(struct rtw89_dev *rtwdev);
|
||||
void rtw8852c_rfk_chanctx_cb(struct rtw89_dev *rtwdev,
|
||||
enum rtw89_chanctx_state state);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user