The registers used in this function are located at different offsets in RTL8852CU compared to other chips. Use the right registers for each chip. Signed-off-by: Bitterblue Smith --- v2: - No change, messed up sending v1. --- drivers/net/wireless/realtek/rtw89/usb.c | 25 +++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/drivers/net/wireless/realtek/rtw89/usb.c b/drivers/net/wireless/realtek/rtw89/usb.c index e749a37ac1b5..1c65fbdf7673 100644 --- a/drivers/net/wireless/realtek/rtw89/usb.c +++ b/drivers/net/wireless/realtek/rtw89/usb.c @@ -772,10 +772,29 @@ static int rtw89_usb_ops_mac_pre_deinit(struct rtw89_dev *rtwdev) static int rtw89_usb_ops_mac_post_init(struct rtw89_dev *rtwdev) { struct rtw89_usb *rtwusb = rtw89_usb_priv(rtwdev); + u32 usb3_mac_npi_config_intf_0, usb_endpoint_0, usb_endpoint_2; enum usb_device_speed speed; u32 ep; - rtw89_write32_clr(rtwdev, R_AX_USB3_MAC_NPI_CONFIG_INTF_0, + switch (rtwdev->chip->chip_id) { + case RTL8851B: + case RTL8852A: + case RTL8852B: + usb3_mac_npi_config_intf_0 = R_AX_USB3_MAC_NPI_CONFIG_INTF_0; + usb_endpoint_0 = R_AX_USB_ENDPOINT_0; + usb_endpoint_2 = R_AX_USB_ENDPOINT_2; + break; + case RTL8852C: + usb3_mac_npi_config_intf_0 = R_AX_USB3_MAC_NPI_CONFIG_INTF_0_V1; + usb_endpoint_0 = R_AX_USB_ENDPOINT_0_V1; + usb_endpoint_2 = R_AX_USB_ENDPOINT_2_V1; + break; + default: + rtw89_err(rtwdev, "%s: unknown chip\n", __func__); + return -EOPNOTSUPP; + } + + rtw89_write32_clr(rtwdev, usb3_mac_npi_config_intf_0, B_AX_SSPHY_LFPS_FILTER); speed = rtwusb->udev->speed; @@ -791,9 +810,9 @@ static int rtw89_usb_ops_mac_post_init(struct rtw89_dev *rtwdev) if (ep == 8) continue; - rtw89_write8_mask(rtwdev, R_AX_USB_ENDPOINT_0, + rtw89_write8_mask(rtwdev, usb_endpoint_0, B_AX_EP_IDX, ep); - rtw89_write8(rtwdev, R_AX_USB_ENDPOINT_2 + 1, NUMP); + rtw89_write8(rtwdev, usb_endpoint_2 + 1, NUMP); } return 0; -- 2.50.0