Some chip package types need different parts of the RF initialisation table, so read the package type from efuse. Signed-off-by: Bitterblue Smith --- v2: - Get the byte from the efuse physical map stored in RAM instead of reading it again from the chip. - Use macros for the address and the mask. - Read only the package type. The chip variant is now in patch 3. --- drivers/net/wireless/realtek/rtw88/rtw8723b.c | 29 +++++++++++++++++++ drivers/net/wireless/realtek/rtw88/rtw8723b.h | 11 +++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723b.c b/drivers/net/wireless/realtek/rtw88/rtw8723b.c index 0179f09140ef..f550c8708e01 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8723b.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8723b.c @@ -2349,6 +2349,33 @@ static void rtw8723b_fill_txdesc_checksum(struct rtw_dev *rtwdev, fill_txdesc_checksum_common(txdesc, 16); } +static void rtw8723b_read_package_type(struct rtw_dev *rtwdev, u8 *phy_map) +{ + struct rtw_hal *hal = &rtwdev->hal; + u8 val_1fb, package; + + val_1fb = phy_map[RTW8723B_EFUSE_PACKAGE_TYPE]; + package = u8_get_bits(val_1fb, RTW8723B_PACKAGE_TYPE_MASK); + + switch (package) { + case 0x4: + hal->pkg_type = RTW8723B_PACKAGE_TFBGA79; + break; + case 0x5: + hal->pkg_type = RTW8723B_PACKAGE_TFBGA90; + break; + case 0x6: + hal->pkg_type = RTW8723B_PACKAGE_QFN68; + break; + case 0x7: + hal->pkg_type = RTW8723B_PACKAGE_TFBGA80; + break; + default: + hal->pkg_type = RTW8723B_PACKAGE_DEFAULT; + break; + } +} + static int rtw8723b_read_efuse(struct rtw_dev *rtwdev, u8 *log_map, u8 *phy_map) { struct rtw_efuse *efuse = &rtwdev->efuse; @@ -2374,6 +2401,8 @@ static int rtw8723b_read_efuse(struct rtw_dev *rtwdev, u8 *log_map, u8 *phy_map) efuse->hw_cap.bw = BIT(RTW_CHANNEL_WIDTH_20) | BIT(RTW_CHANNEL_WIDTH_40); + rtw8723b_read_package_type(rtwdev, phy_map); + return 0; } diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723b.h b/drivers/net/wireless/realtek/rtw88/rtw8723b.h index cf93b93ede81..f1eaf7ab2a81 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8723b.h +++ b/drivers/net/wireless/realtek/rtw88/rtw8723b.h @@ -9,6 +9,17 @@ #include "rtw8723x.h" +enum rtw8723b_package_type { + RTW8723B_PACKAGE_DEFAULT, + RTW8723B_PACKAGE_QFN68, + RTW8723B_PACKAGE_TFBGA90, + RTW8723B_PACKAGE_TFBGA80, + RTW8723B_PACKAGE_TFBGA79, +}; + +#define RTW8723B_EFUSE_PACKAGE_TYPE 0x1fb +#define RTW8723B_PACKAGE_TYPE_MASK GENMASK(2, 0) + extern const struct rtw_chip_info rtw8723b_hw_spec; #endif -- 2.55.0