wifi: rtw88: set pkg_type correctly for specific rtw8821c variants
authorSascha Hauer <s.hauer@pengutronix.de>
Mon, 17 Apr 2023 14:03:57 +0000 (16:03 +0200)
committerKalle Valo <kvalo@kernel.org>
Thu, 20 Apr 2023 12:34:38 +0000 (15:34 +0300)
According to the vendor driver the pkg_type has to be set to '1'
for some rtw8821c variants. As the pkg_type has been hardcoded to
'0', add a field for it in struct rtw_hal and set this correctly
in the rtw8821c part.
With this parsing of a rtw_table is influenced and check_positive()
in phy.c returns true for some cases here. The same is done in the
vendor driver. However, this has no visible effect on the driver
here.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Reviewed-by: Ping-Ke Shih <pkshih@realtek.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Signed-off-by: Kalle Valo <kvalo@kernel.org>
Link: https://lore.kernel.org/r/20230417140358.2240429-4-s.hauer@pengutronix.de
drivers/net/wireless/realtek/rtw88/main.c
drivers/net/wireless/realtek/rtw88/main.h
drivers/net/wireless/realtek/rtw88/rtw8821c.c

index 0ba81b87aad5507e2e402d9e7419b117e38f4061..5bf6b45815578feb766453db223e7a71c93119e7 100644 (file)
@@ -2008,7 +2008,7 @@ static int rtw_chip_board_info_setup(struct rtw_dev *rtwdev)
        if (!rfe_def)
                return -ENODEV;
 
-       rtw_phy_setup_phy_cond(rtwdev, 0);
+       rtw_phy_setup_phy_cond(rtwdev, hal->pkg_type);
 
        rtw_phy_init_tx_power(rtwdev);
        if (rfe_def->agc_btg_tbl)
index 621355f84d0280126817d6e9a64c8586ffdeb424..a290fb427e96e81696db71ee75d33ada17c83d75 100644 (file)
@@ -1900,6 +1900,7 @@ struct rtw_hal {
        u8 cut_version;
        u8 mp_chip;
        u8 oem_id;
+       u8 pkg_type;
        struct rtw_phy_cond phy_cond;
 
        u8 ps_mode;
index 619fb3adb832959fc00ab33efd103bf381956e8b..49d6c4ef68c57281d3172a3f88dc6e076beb8990 100644 (file)
@@ -47,6 +47,7 @@ enum rtw8821ce_rf_set {
 
 static int rtw8821c_read_efuse(struct rtw_dev *rtwdev, u8 *log_map)
 {
+       struct rtw_hal *hal = &rtwdev->hal;
        struct rtw_efuse *efuse = &rtwdev->efuse;
        struct rtw8821c_efuse *map;
        int i;
@@ -70,6 +71,8 @@ static int rtw8821c_read_efuse(struct rtw_dev *rtwdev, u8 *log_map)
        efuse->tx_bb_swing_setting_2g = map->tx_bb_swing_setting_2g;
        efuse->tx_bb_swing_setting_5g = map->tx_bb_swing_setting_5g;
 
+       hal->pkg_type = map->rfe_option & BIT(5) ? 1 : 0;
+
        for (i = 0; i < 4; i++)
                efuse->txpwr_idx_table[i] = map->txpwr_idx_table[i];