Message ID | 20210415035559.25743-2-aaron.ma@canonical.com |
---|---|
State | New |
Headers | show |
Series | add realtek 8852 bluetooth support | expand |
On 15.04.21 05:55, Aaron Ma wrote: > From: Max Chou <max.chou@realtek.com> > > BugLink: https://bugs.launchpad.net/bugs/1924207 > > Add the support for RTL8852A BT controller on USB interface. > 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#= 10 Spd=12 MxCh= 0 > D: Ver= 1.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 > P: Vendor=0bda ProdID=c852 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@realtek.com> > Signed-off-by: Marcel Holtmann <marcel@holtmann.org> > (backported from commit 0d484db60fc0c5f8848939a61004c6fa01fad61a) > Signed-off-by: Aaron Ma <aaron.ma@canonical.com> > --- Would this not also be needed on Focal? -Stefan > drivers/bluetooth/btrtl.c | 17 +++++++++++++++++ > drivers/bluetooth/btusb.c | 4 ++++ > 2 files changed, 21 insertions(+) > > diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c > index 35fb96dae337..21ef2396bab1 100644 > --- a/drivers/bluetooth/btrtl.c > +++ b/drivers/bluetooth/btrtl.c > @@ -25,6 +25,7 @@ > #define RTL_ROM_LMP_8821A 0x8821 > #define RTL_ROM_LMP_8761A 0x8761 > #define RTL_ROM_LMP_8822B 0x8822 > +#define RTL_ROM_LMP_8852A 0x8852 > #define RTL_CONFIG_MAGIC 0x8723ab55 > > #define IC_MATCH_FL_LMPSUBV (1 << 0) > @@ -169,6 +170,18 @@ static const struct id_table ic_id_table[] = { > .has_rom_version = true, > .fw_name = "rtl_bt/rtl8822b_fw.bin", > .cfg_name = "rtl_bt/rtl8822b_config" }, > + > + /* 8852A */ > + { .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV | > + IC_MATCH_FL_HCIVER | IC_MATCH_FL_HCIBUS, > + .lmp_subver = RTL_ROM_LMP_8852A, > + .hci_rev = 0xa, > + .hci_ver = 0xb, > + .hci_bus = HCI_USB, > + .config_needed = false, > + .has_rom_version = true, > + .fw_name = "rtl_bt/rtl8852au_fw.bin", > + .cfg_name = "rtl_bt/rtl8852au_config" }, > }; > > static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev, > @@ -276,6 +289,7 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev, > { RTL_ROM_LMP_8821A, 10 }, /* 8821C */ > { RTL_ROM_LMP_8822B, 13 }, /* 8822C */ > { RTL_ROM_LMP_8761A, 14 }, /* 8761B */ > + { RTL_ROM_LMP_8852A, 18 }, /* 8852A */ > }; > > min_size = sizeof(struct rtl_epatch_header) + sizeof(extension_sig) + 3; > @@ -706,6 +720,7 @@ int btrtl_download_firmware(struct hci_dev *hdev, > case RTL_ROM_LMP_8821A: > case RTL_ROM_LMP_8761A: > case RTL_ROM_LMP_8822B: > + case RTL_ROM_LMP_8852A: > return btrtl_setup_rtl8723b(hdev, btrtl_dev); > default: > rtl_dev_info(hdev, "assuming no firmware upload needed"); > @@ -881,3 +896,5 @@ MODULE_FIRMWARE("rtl_bt/rtl8821a_fw.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8821a_config.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8822b_fw.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8822b_config.bin"); > +MODULE_FIRMWARE("rtl_bt/rtl8852au_fw.bin"); > +MODULE_FIRMWARE("rtl_bt/rtl8852au_config.bin"); > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > index 01e69551b233..14b69e3ea244 100644 > --- a/drivers/bluetooth/btusb.c > +++ b/drivers/bluetooth/btusb.c > @@ -360,6 +360,10 @@ static const struct usb_device_id blacklist_table[] = { > { USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01), > .driver_info = BTUSB_IGNORE }, > > + /* Realtek 8852AE Bluetooth devices */ > + { USB_DEVICE(0x0bda, 0xc852), .driver_info = BTUSB_REALTEK | > + BTUSB_WIDEBAND_SPEECH }, > + > /* Realtek Bluetooth devices */ > { USB_VENDOR_AND_INTERFACE_INFO(0x0bda, 0xe0, 0x01, 0x01), > .driver_info = BTUSB_REALTEK }, >
On 4/15/21 5:19 PM, Stefan Bader wrote: >> > > Would this not also be needed on Focal? I thought focal will get this patch from hwe-5.8 kernel after groovy kernel. If you like it in 5.4 kernel, please let me know. Aaron > > -Stefan
On 15.04.21 11:33, Aaron Ma wrote: > On 4/15/21 5:19 PM, Stefan Bader wrote: >>> >> >> Would this not also be needed on Focal? > > I thought focal will get this patch from hwe-5.8 kernel after groovy kernel. > > If you like it in 5.4 kernel, please let me know. > > Aaron > >> >> -Stefan Not so much about what *I* want. But the cover email has "[SRU][F/G/H]" which means usually hirsute:linux, groovy:linux, and focal:linux. Probably should be suspicious that then there is a "OEM-5.10" patch. So you seem to have meant "[SRU][F:OEM-5.10,G/H]", is that correct? -Stefan
On 4/15/21 5:44 PM, Stefan Bader wrote: > On 15.04.21 11:33, Aaron Ma wrote: >> On 4/15/21 5:19 PM, Stefan Bader wrote: >>>> >>> >>> Would this not also be needed on Focal? >> >> I thought focal will get this patch from hwe-5.8 kernel after groovy kernel. >> >> If you like it in 5.4 kernel, please let me know. >> >> Aaron >> >>> >>> -Stefan > > Not so much about what *I* want. But the cover email has "[SRU][F/G/H]" which means usually hirsute:linux, groovy:linux, and focal:linux. Probably should be suspicious that then there is a "OEM-5.10" patch. > So you seem to have meant "[SRU][F:OEM-5.10,G/H]", is that correct? > Correct, sorry for be confusing. I did remove focal in buglink, but miss the title. Thanks for correction. Aaron > -Stefan >
On 15.04.21 05:55, Aaron Ma wrote: > From: Max Chou <max.chou@realtek.com> > > BugLink: https://bugs.launchpad.net/bugs/1924207 > > Add the support for RTL8852A BT controller on USB interface. > 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#= 10 Spd=12 MxCh= 0 > D: Ver= 1.00 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs= 1 > P: Vendor=0bda ProdID=c852 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@realtek.com> > Signed-off-by: Marcel Holtmann <marcel@holtmann.org> > (backported from commit 0d484db60fc0c5f8848939a61004c6fa01fad61a) > Signed-off-by: Aaron Ma <aaron.ma@canonical.com> > --- Applied to groovy:linux/master-next. Thanks. -Stefan > drivers/bluetooth/btrtl.c | 17 +++++++++++++++++ > drivers/bluetooth/btusb.c | 4 ++++ > 2 files changed, 21 insertions(+) > > diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c > index 35fb96dae337..21ef2396bab1 100644 > --- a/drivers/bluetooth/btrtl.c > +++ b/drivers/bluetooth/btrtl.c > @@ -25,6 +25,7 @@ > #define RTL_ROM_LMP_8821A 0x8821 > #define RTL_ROM_LMP_8761A 0x8761 > #define RTL_ROM_LMP_8822B 0x8822 > +#define RTL_ROM_LMP_8852A 0x8852 > #define RTL_CONFIG_MAGIC 0x8723ab55 > > #define IC_MATCH_FL_LMPSUBV (1 << 0) > @@ -169,6 +170,18 @@ static const struct id_table ic_id_table[] = { > .has_rom_version = true, > .fw_name = "rtl_bt/rtl8822b_fw.bin", > .cfg_name = "rtl_bt/rtl8822b_config" }, > + > + /* 8852A */ > + { .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV | > + IC_MATCH_FL_HCIVER | IC_MATCH_FL_HCIBUS, > + .lmp_subver = RTL_ROM_LMP_8852A, > + .hci_rev = 0xa, > + .hci_ver = 0xb, > + .hci_bus = HCI_USB, > + .config_needed = false, > + .has_rom_version = true, > + .fw_name = "rtl_bt/rtl8852au_fw.bin", > + .cfg_name = "rtl_bt/rtl8852au_config" }, > }; > > static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev, > @@ -276,6 +289,7 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev, > { RTL_ROM_LMP_8821A, 10 }, /* 8821C */ > { RTL_ROM_LMP_8822B, 13 }, /* 8822C */ > { RTL_ROM_LMP_8761A, 14 }, /* 8761B */ > + { RTL_ROM_LMP_8852A, 18 }, /* 8852A */ > }; > > min_size = sizeof(struct rtl_epatch_header) + sizeof(extension_sig) + 3; > @@ -706,6 +720,7 @@ int btrtl_download_firmware(struct hci_dev *hdev, > case RTL_ROM_LMP_8821A: > case RTL_ROM_LMP_8761A: > case RTL_ROM_LMP_8822B: > + case RTL_ROM_LMP_8852A: > return btrtl_setup_rtl8723b(hdev, btrtl_dev); > default: > rtl_dev_info(hdev, "assuming no firmware upload needed"); > @@ -881,3 +896,5 @@ MODULE_FIRMWARE("rtl_bt/rtl8821a_fw.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8821a_config.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8822b_fw.bin"); > MODULE_FIRMWARE("rtl_bt/rtl8822b_config.bin"); > +MODULE_FIRMWARE("rtl_bt/rtl8852au_fw.bin"); > +MODULE_FIRMWARE("rtl_bt/rtl8852au_config.bin"); > diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > index 01e69551b233..14b69e3ea244 100644 > --- a/drivers/bluetooth/btusb.c > +++ b/drivers/bluetooth/btusb.c > @@ -360,6 +360,10 @@ static const struct usb_device_id blacklist_table[] = { > { USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01), > .driver_info = BTUSB_IGNORE }, > > + /* Realtek 8852AE Bluetooth devices */ > + { USB_DEVICE(0x0bda, 0xc852), .driver_info = BTUSB_REALTEK | > + BTUSB_WIDEBAND_SPEECH }, > + > /* Realtek Bluetooth devices */ > { USB_VENDOR_AND_INTERFACE_INFO(0x0bda, 0xe0, 0x01, 0x01), > .driver_info = BTUSB_REALTEK }, >
diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c index 35fb96dae337..21ef2396bab1 100644 --- a/drivers/bluetooth/btrtl.c +++ b/drivers/bluetooth/btrtl.c @@ -25,6 +25,7 @@ #define RTL_ROM_LMP_8821A 0x8821 #define RTL_ROM_LMP_8761A 0x8761 #define RTL_ROM_LMP_8822B 0x8822 +#define RTL_ROM_LMP_8852A 0x8852 #define RTL_CONFIG_MAGIC 0x8723ab55 #define IC_MATCH_FL_LMPSUBV (1 << 0) @@ -169,6 +170,18 @@ static const struct id_table ic_id_table[] = { .has_rom_version = true, .fw_name = "rtl_bt/rtl8822b_fw.bin", .cfg_name = "rtl_bt/rtl8822b_config" }, + + /* 8852A */ + { .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV | + IC_MATCH_FL_HCIVER | IC_MATCH_FL_HCIBUS, + .lmp_subver = RTL_ROM_LMP_8852A, + .hci_rev = 0xa, + .hci_ver = 0xb, + .hci_bus = HCI_USB, + .config_needed = false, + .has_rom_version = true, + .fw_name = "rtl_bt/rtl8852au_fw.bin", + .cfg_name = "rtl_bt/rtl8852au_config" }, }; static const struct id_table *btrtl_match_ic(u16 lmp_subver, u16 hci_rev, @@ -276,6 +289,7 @@ static int rtlbt_parse_firmware(struct hci_dev *hdev, { RTL_ROM_LMP_8821A, 10 }, /* 8821C */ { RTL_ROM_LMP_8822B, 13 }, /* 8822C */ { RTL_ROM_LMP_8761A, 14 }, /* 8761B */ + { RTL_ROM_LMP_8852A, 18 }, /* 8852A */ }; min_size = sizeof(struct rtl_epatch_header) + sizeof(extension_sig) + 3; @@ -706,6 +720,7 @@ int btrtl_download_firmware(struct hci_dev *hdev, case RTL_ROM_LMP_8821A: case RTL_ROM_LMP_8761A: case RTL_ROM_LMP_8822B: + case RTL_ROM_LMP_8852A: return btrtl_setup_rtl8723b(hdev, btrtl_dev); default: rtl_dev_info(hdev, "assuming no firmware upload needed"); @@ -881,3 +896,5 @@ MODULE_FIRMWARE("rtl_bt/rtl8821a_fw.bin"); MODULE_FIRMWARE("rtl_bt/rtl8821a_config.bin"); MODULE_FIRMWARE("rtl_bt/rtl8822b_fw.bin"); MODULE_FIRMWARE("rtl_bt/rtl8822b_config.bin"); +MODULE_FIRMWARE("rtl_bt/rtl8852au_fw.bin"); +MODULE_FIRMWARE("rtl_bt/rtl8852au_config.bin"); diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 01e69551b233..14b69e3ea244 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -360,6 +360,10 @@ static const struct usb_device_id blacklist_table[] = { { USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01), .driver_info = BTUSB_IGNORE }, + /* Realtek 8852AE Bluetooth devices */ + { USB_DEVICE(0x0bda, 0xc852), .driver_info = BTUSB_REALTEK | + BTUSB_WIDEBAND_SPEECH }, + /* Realtek Bluetooth devices */ { USB_VENDOR_AND_INTERFACE_INFO(0x0bda, 0xe0, 0x01, 0x01), .driver_info = BTUSB_REALTEK },