diff mbox series

[G,1/3] Bluetooth: btusb: btrtl: Add support for RTL8852A

Message ID 20210415035559.25743-2-aaron.ma@canonical.com
State New
Headers show
Series add realtek 8852 bluetooth support | expand

Commit Message

Aaron Ma April 15, 2021, 3:55 a.m. UTC
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>
---
 drivers/bluetooth/btrtl.c | 17 +++++++++++++++++
 drivers/bluetooth/btusb.c |  4 ++++
 2 files changed, 21 insertions(+)

Comments

Stefan Bader April 15, 2021, 9:19 a.m. UTC | #1
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 },
>
Aaron Ma April 15, 2021, 9:33 a.m. UTC | #2
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
Stefan Bader April 15, 2021, 9:44 a.m. UTC | #3
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
Aaron Ma April 15, 2021, 9:58 a.m. UTC | #4
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
>
Stefan Bader April 23, 2021, 9:29 a.m. UTC | #5
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 mbox series

Patch

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 },