Hi! Paul, If the USB VID is 0x0bda, it will be determined to Realtek device as below. /* Realtek Bluetooth devices */ { USB_VENDOR_AND_INTERFACE_INFO(0x0bda, 0xe0, 0x01, 0x01), .driver_info = BTUSB_REALTEK }, In btrtl.c, btrtl_setup_realtek() will judge what the chip is and start the initialization for firmware download. Hence, PID is not necessary. However, I will send the v2 for the ID info. Thanks for the advice. BRs, Max -----Original Message----- From: Paul Menzel <pmenzel@xxxxxxxxxxxxx> Sent: Tuesday, December 26, 2023 4:39 PM To: Max Chou <max.chou@xxxxxxxxxxx> Cc: marcel@xxxxxxxxxxxx; johan.hedberg@xxxxxxxxx; luiz.dentz@xxxxxxxxx; linux-bluetooth@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx; alex_lu@xxxxxxxxxxxxxx; Hilda Wu <hildawu@xxxxxxxxxxx>; Karen Hsu <karenhsu@xxxxxxxxxxx> Subject: Re: [PATCH] Bluetooth: btrtl: Add the support for RTL8852BT/RTL8852BE-VT External mail. Dear Max, Thank you for your patch. Am 26.12.23 um 02:57 schrieb max.chou@xxxxxxxxxxx: > From: Max Chou <max.chou@xxxxxxxxxxx> > > Add the support for RTL8852BT/RTL8852BE-VT BT controller on USB interface. It’d be great if you stated, how it differs from the existing devices. Judging from your diff, only the ids need to be added. > The necessary firmware will be submitted to linux-firmware project. > > The device info from /sys/kernel/debug/usb/devices as below. > > T: Bus=02 Lev=02 Prnt=02 Port=05 Cnt=01 Dev#= 8 Spd=12 MxCh= 0 > D: Ver= 1.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 > P: Vendor=0bda ProdID=8520 Rev= 0.00 > S: Manufacturer=Realtek > S: Product=Bluetooth Radio > S: SerialNumber=00e04c000001 > C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=500mA > I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb > E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=1ms > E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms > E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms > I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb > E: Ad=03(O) Atr=01(Isoc) MxPS= 0 Ivl=1ms > E: Ad=83(I) Atr=01(Isoc) MxPS= 0 Ivl=1ms > I: If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb > E: Ad=03(O) Atr=01(Isoc) MxPS= 9 Ivl=1ms > E: Ad=83(I) Atr=01(Isoc) MxPS= 9 Ivl=1ms > I: If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb > E: Ad=03(O) Atr=01(Isoc) MxPS= 17 Ivl=1ms > E: Ad=83(I) Atr=01(Isoc) MxPS= 17 Ivl=1ms > I: If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb > E: Ad=03(O) Atr=01(Isoc) MxPS= 25 Ivl=1ms > E: Ad=83(I) Atr=01(Isoc) MxPS= 25 Ivl=1ms > I: If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb > E: Ad=03(O) Atr=01(Isoc) MxPS= 33 Ivl=1ms > E: Ad=83(I) Atr=01(Isoc) MxPS= 33 Ivl=1ms > I: If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb > E: Ad=03(O) Atr=01(Isoc) MxPS= 49 Ivl=1ms > E: Ad=83(I) Atr=01(Isoc) MxPS= 49 Ivl=1ms > > Signed-off-by: Max Chou <max.chou@xxxxxxxxxxx> > --- > drivers/bluetooth/btrtl.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c > index 277d039ecbb4..cc50de69e8dc 100644 > --- a/drivers/bluetooth/btrtl.c > +++ b/drivers/bluetooth/btrtl.c > @@ -69,6 +69,7 @@ enum btrtl_chip_id { > CHIP_ID_8852B = 20, > CHIP_ID_8852C = 25, > CHIP_ID_8851B = 36, > + CHIP_ID_8852BT = 47, > }; > > struct id_table { > @@ -307,6 +308,15 @@ static const struct id_table ic_id_table[] = { > .fw_name = "rtl_bt/rtl8851bu_fw", > .cfg_name = "rtl_bt/rtl8851bu_config", > .hw_info = "rtl8851bu" }, > + > + /* 8852BT/8852BE-VT */ > + { IC_INFO(RTL_ROM_LMP_8852A, 0x87, 0xc, HCI_USB), > + .config_needed = false, > + .has_rom_version = true, > + .has_msft_ext = true, > + .fw_name = "rtl_bt/rtl8852btu_fw", > + .cfg_name = "rtl_bt/rtl8852btu_config", > + .hw_info = "rtl8852btu" }, > }; > > static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 > hci_rev, @@ -645,6 +655,7 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev, > { RTL_ROM_LMP_8852A, 20 }, /* 8852B */ > { RTL_ROM_LMP_8852A, 25 }, /* 8852C */ > { RTL_ROM_LMP_8851B, 36 }, /* 8851B */ > + { RTL_ROM_LMP_8852A, 47 }, /* 8852BT */ > }; > > if (btrtl_dev->fw_len <= 8) > @@ -1275,6 +1286,7 @@ void btrtl_set_quirks(struct hci_dev *hdev, struct btrtl_device_info *btrtl_dev) > case CHIP_ID_8852B: > case CHIP_ID_8852C: > case CHIP_ID_8851B: > + case CHIP_ID_8852BT: > set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks); > set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, > &hdev->quirks); > > @@ -1505,6 +1517,8 @@ MODULE_FIRMWARE("rtl_bt/rtl8852bs_fw.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8852bs_config.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8852bu_fw.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8852bu_config.bin"); > +MODULE_FIRMWARE("rtl_bt/rtl8852btu_fw.bin"); > +MODULE_FIRMWARE("rtl_bt/rtl8852btu_config.bin"); Should btu be ordered before bu? > MODULE_FIRMWARE("rtl_bt/rtl8852cu_fw.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8852cu_fw_v2.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8852cu_config.bin"); Kind regards, Paul