Bitterblue Smith <rtl8821cerfe2@xxxxxxxxx> wrote: > 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 <rtl8821cerfe2@xxxxxxxxx> > --- > v2: > - No change, messed up sending v1. > --- > drivers/net/wireless/realtek/rtw89/usb.c | 29 ++++++++++++++++++++---- > 1 file changed, 24 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/wireless/realtek/rtw89/usb.c b/drivers/net/wireless/realtek/rtw89/usb.c > index eb9978a60d04..e749a37ac1b5 100644 > --- a/drivers/net/wireless/realtek/rtw89/usb.c > +++ b/drivers/net/wireless/realtek/rtw89/usb.c > @@ -726,20 +726,39 @@ static int rtw89_usb_ops_deinit(struct rtw89_dev *rtwdev) > > static int rtw89_usb_ops_mac_pre_init(struct rtw89_dev *rtwdev) > { > + u32 usb_host_request_2, usb_wlan0_1, hci_func_en; > u32 val32; > > - rtw89_write32_set(rtwdev, R_AX_USB_HOST_REQUEST_2, B_AX_R_USBIO_MODE); > + switch (rtwdev->chip->chip_id) { > + case RTL8851B: > + case RTL8852A: > + case RTL8852B: > + usb_host_request_2 = R_AX_USB_HOST_REQUEST_2; > + usb_wlan0_1 = R_AX_USB_WLAN0_1; > + hci_func_en = R_AX_HCI_FUNC_EN; Like comment in 02/11, rtw89_usb_info can help if you like that style. Otherwise, Acked-by: Ping-Ke Shih <pkshih@xxxxxxxxxxx> > + break; > + case RTL8852C: > + usb_host_request_2 = R_AX_USB_HOST_REQUEST_2_V1; > + usb_wlan0_1 = R_AX_USB_WLAN0_1_V1; > + hci_func_en = R_AX_HCI_FUNC_EN_V1; > + break; > + default: > + rtw89_err(rtwdev, "%s: unknown chip\n", __func__); > + return -EOPNOTSUPP; > + } > + > + rtw89_write32_set(rtwdev, usb_host_request_2, B_AX_R_USBIO_MODE); > > /* fix USB IO hang suggest by chihhanli@xxxxxxxxxxx */ > - rtw89_write32_clr(rtwdev, R_AX_USB_WLAN0_1, > + rtw89_write32_clr(rtwdev, usb_wlan0_1, > B_AX_USBRX_RST | B_AX_USBTX_RST); > > - val32 = rtw89_read32(rtwdev, R_AX_HCI_FUNC_EN); > + val32 = rtw89_read32(rtwdev, hci_func_en); > val32 &= ~(B_AX_HCI_RXDMA_EN | B_AX_HCI_TXDMA_EN); > - rtw89_write32(rtwdev, R_AX_HCI_FUNC_EN, val32); > + rtw89_write32(rtwdev, hci_func_en, val32); > > val32 |= B_AX_HCI_RXDMA_EN | B_AX_HCI_TXDMA_EN; > - rtw89_write32(rtwdev, R_AX_HCI_FUNC_EN, val32); > + rtw89_write32(rtwdev, hci_func_en, val32); > /* fix USB TRX hang suggest by chihhanli@xxxxxxxxxxx */ > > return 0; > -- > 2.50.0