The RTL8703AS appears to be a variant of RTL8723BS which doesn't support 40 MHz channel width, so read the chip variant from efuse and disable support for 40 MHz. Signed-off-by: Bitterblue Smith --- v2: - Split into a separate patch. - Get the byte from the efuse physical map stored in RAM instead of reading it again from the chip. - Use macros for the address, mask, and chip variants. --- drivers/net/wireless/realtek/rtw88/rtw8723b.c | 13 +++++++++++++ drivers/net/wireless/realtek/rtw88/rtw8723b.h | 3 +++ 2 files changed, 16 insertions(+) diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723b.c b/drivers/net/wireless/realtek/rtw88/rtw8723b.c index f550c8708e01..48102baf66fc 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8723b.c +++ b/drivers/net/wireless/realtek/rtw88/rtw8723b.c @@ -2376,6 +2376,18 @@ static void rtw8723b_read_package_type(struct rtw_dev *rtwdev, u8 *phy_map) } } +static void rtw8723b_read_chip_variant(struct rtw_dev *rtwdev, u8 *phy_map) +{ + u8 val_1fb, variant; + + val_1fb = phy_map[RTW8723B_EFUSE_PACKAGE_TYPE]; + variant = u8_get_bits(val_1fb, RTW8723B_VARIANT_MASK); + + if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_SDIO && + variant == RTW8723B_VARIANT_8703AS) + rtwdev->efuse.hw_cap.bw &= ~BIT(RTW_CHANNEL_WIDTH_40); +} + static int rtw8723b_read_efuse(struct rtw_dev *rtwdev, u8 *log_map, u8 *phy_map) { struct rtw_efuse *efuse = &rtwdev->efuse; @@ -2402,6 +2414,7 @@ static int rtw8723b_read_efuse(struct rtw_dev *rtwdev, u8 *log_map, u8 *phy_map) BIT(RTW_CHANNEL_WIDTH_40); rtw8723b_read_package_type(rtwdev, phy_map); + rtw8723b_read_chip_variant(rtwdev, phy_map); return 0; } diff --git a/drivers/net/wireless/realtek/rtw88/rtw8723b.h b/drivers/net/wireless/realtek/rtw88/rtw8723b.h index f1eaf7ab2a81..39b92ec5153b 100644 --- a/drivers/net/wireless/realtek/rtw88/rtw8723b.h +++ b/drivers/net/wireless/realtek/rtw88/rtw8723b.h @@ -19,6 +19,9 @@ enum rtw8723b_package_type { #define RTW8723B_EFUSE_PACKAGE_TYPE 0x1fb #define RTW8723B_PACKAGE_TYPE_MASK GENMASK(2, 0) +#define RTW8723B_VARIANT_MASK GENMASK(5, 4) +#define RTW8723B_VARIANT_8723BS 0x3 +#define RTW8723B_VARIANT_8703AS 0x2 extern const struct rtw_chip_info rtw8723b_hw_spec; -- 2.55.0