]> git.proxmox.com Git - mirror_ubuntu-kernels.git/commitdiff
wifi: rtw89: support deep ps mode for rtw8852c
authorChin-Yen Lee <timlee@realtek.com>
Thu, 8 Sep 2022 05:12:54 +0000 (13:12 +0800)
committerKalle Valo <kvalo@kernel.org>
Mon, 12 Sep 2022 11:52:33 +0000 (14:52 +0300)
rtw8852c could support deep ps mode if the firmware version
is greater than 0.17.34.

Signed-off-by: Chin-Yen Lee <timlee@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/20220908051257.25353-7-pkshih@realtek.com
drivers/net/wireless/realtek/rtw89/core.c
drivers/net/wireless/realtek/rtw89/core.h
drivers/net/wireless/realtek/rtw89/fw.c
drivers/net/wireless/realtek/rtw89/rtw8852c.c

index 8c64af9157e49f31f55f93a6899ec21ab066981d..5c5716a14a9b6cc08485a2e6886d08163df17373 100644 (file)
@@ -1708,7 +1708,8 @@ static enum rtw89_ps_mode rtw89_update_ps_mode(struct rtw89_dev *rtwdev)
 {
        const struct rtw89_chip_info *chip = rtwdev->chip;
 
-       if (rtw89_disable_ps_mode || !chip->ps_mode_supported)
+       if (rtw89_disable_ps_mode || !chip->ps_mode_supported ||
+           RTW89_CHK_FW_FEATURE(NO_DEEP_PS, &rtwdev->fw))
                return RTW89_PS_MODE_NONE;
 
        if (chip->ps_mode_supported & BIT(RTW89_PS_MODE_PWR_GATED))
index 55c843d83972640aa5e7b3eb24ff85cbc2980b59..b68ac1a0965fbfa778553011bda4b4d0744d3f0e 100644 (file)
@@ -2734,6 +2734,7 @@ enum rtw89_fw_feature {
        RTW89_FW_FEATURE_SCAN_OFFLOAD,
        RTW89_FW_FEATURE_TX_WAKE,
        RTW89_FW_FEATURE_CRASH_TRIGGER,
+       RTW89_FW_FEATURE_NO_DEEP_PS,
 };
 
 struct rtw89_fw_suit {
index 56f84c32454001bc0bf6bbf771e95861e3a16b70..ef32e675c4d91658ff7ad69e58710dba66525b70 100644 (file)
@@ -225,6 +225,7 @@ static const struct __fw_feat_cfg fw_feat_tbl[] = {
        __CFG_FW_FEAT(RTL8852A, ge, 0, 13, 35, 0, SCAN_OFFLOAD),
        __CFG_FW_FEAT(RTL8852A, ge, 0, 13, 35, 0, TX_WAKE),
        __CFG_FW_FEAT(RTL8852A, ge, 0, 13, 36, 0, CRASH_TRIGGER),
+       __CFG_FW_FEAT(RTL8852C, le, 0, 27, 33, 0, NO_DEEP_PS),
 };
 
 static void rtw89_fw_recognize_features(struct rtw89_dev *rtwdev)
index e661b0b3af595c4f8fcd1f2097fa456647a75601..0d92518a1e0df66c7c4c1c5726bef4305b738c06 100644 (file)
@@ -3059,7 +3059,9 @@ const struct rtw89_chip_info rtw8852c_chip_info = {
        .rf_para_ulink          = rtw89_btc_8852c_rf_ul,
        .rf_para_dlink_num      = ARRAY_SIZE(rtw89_btc_8852c_rf_dl),
        .rf_para_dlink          = rtw89_btc_8852c_rf_dl,
-       .ps_mode_supported      = 0,
+       .ps_mode_supported      = BIT(RTW89_PS_MODE_RFOFF) |
+                                 BIT(RTW89_PS_MODE_CLK_GATED) |
+                                 BIT(RTW89_PS_MODE_PWR_GATED),
        .low_power_hci_modes    = BIT(RTW89_PS_MODE_CLK_GATED) |
                                  BIT(RTW89_PS_MODE_PWR_GATED),
        .h2c_cctl_func_id       = H2C_FUNC_MAC_CCTLINFO_UD_V1,