Commit 6f9ff246 authored by Max Chou's avatar Max Chou Committed by Marcel Holtmann

Bluetooth: btrtl: Refine the ic_id_table for clearer and more regular

Enhance the ic_id_table that it's able to maintain regularly.
To judge which chip should be initialized by LMP subversion, HCI revision,
 HCI version and HCI bus which were given in the ic_id_table.
Also, refine the incorrect LMP subversion of ROM for RTL8723D and
RTL8723A.
Suggested-by: default avatarAlex Lu <alex_lu@realsil.com.cn>
Signed-off-by: default avatarMax Chou <max.chou@realtek.com>
Signed-off-by: default avatarMarcel Holtmann <marcel@holtmann.org>
parent 73280f13
...@@ -18,10 +18,8 @@ ...@@ -18,10 +18,8 @@
#define VERSION "0.1" #define VERSION "0.1"
#define RTL_EPATCH_SIGNATURE "Realtech" #define RTL_EPATCH_SIGNATURE "Realtech"
#define RTL_ROM_LMP_3499 0x3499
#define RTL_ROM_LMP_8723A 0x1200 #define RTL_ROM_LMP_8723A 0x1200
#define RTL_ROM_LMP_8723B 0x8723 #define RTL_ROM_LMP_8723B 0x8723
#define RTL_ROM_LMP_8723D 0x8873
#define RTL_ROM_LMP_8821A 0x8821 #define RTL_ROM_LMP_8821A 0x8821
#define RTL_ROM_LMP_8761A 0x8761 #define RTL_ROM_LMP_8761A 0x8761
#define RTL_ROM_LMP_8822B 0x8822 #define RTL_ROM_LMP_8822B 0x8822
...@@ -31,10 +29,13 @@ ...@@ -31,10 +29,13 @@
#define IC_MATCH_FL_HCIREV (1 << 1) #define IC_MATCH_FL_HCIREV (1 << 1)
#define IC_MATCH_FL_HCIVER (1 << 2) #define IC_MATCH_FL_HCIVER (1 << 2)
#define IC_MATCH_FL_HCIBUS (1 << 3) #define IC_MATCH_FL_HCIBUS (1 << 3)
#define IC_INFO(lmps, hcir) \ #define IC_INFO(lmps, hcir, hciv, bus) \
.match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV, \ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV | \
IC_MATCH_FL_HCIVER | IC_MATCH_FL_HCIBUS, \
.lmp_subver = (lmps), \ .lmp_subver = (lmps), \
.hci_rev = (hcir) .hci_rev = (hcir), \
.hci_ver = (hciv), \
.hci_bus = (bus)
struct id_table { struct id_table {
__u16 match_flags; __u16 match_flags;
...@@ -58,112 +59,85 @@ struct btrtl_device_info { ...@@ -58,112 +59,85 @@ struct btrtl_device_info {
}; };
static const struct id_table ic_id_table[] = { static const struct id_table ic_id_table[] = {
{ IC_MATCH_FL_LMPSUBV, RTL_ROM_LMP_8723A, 0x0, /* 8723A */
.config_needed = false, { IC_INFO(RTL_ROM_LMP_8723A, 0xb, 0x6, HCI_USB),
.has_rom_version = false,
.fw_name = "rtl_bt/rtl8723a_fw.bin",
.cfg_name = NULL },
{ IC_MATCH_FL_LMPSUBV, RTL_ROM_LMP_3499, 0x0,
.config_needed = false, .config_needed = false,
.has_rom_version = false, .has_rom_version = false,
.fw_name = "rtl_bt/rtl8723a_fw.bin", .fw_name = "rtl_bt/rtl8723a_fw.bin",
.cfg_name = NULL }, .cfg_name = NULL },
/* 8723BS */ /* 8723BS */
{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV | { IC_INFO(RTL_ROM_LMP_8723B, 0xb, 0x6, HCI_UART),
IC_MATCH_FL_HCIVER | IC_MATCH_FL_HCIBUS,
.lmp_subver = RTL_ROM_LMP_8723B,
.hci_rev = 0xb,
.hci_ver = 6,
.hci_bus = HCI_UART,
.config_needed = true, .config_needed = true,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8723bs_fw.bin", .fw_name = "rtl_bt/rtl8723bs_fw.bin",
.cfg_name = "rtl_bt/rtl8723bs_config" }, .cfg_name = "rtl_bt/rtl8723bs_config" },
/* 8723B */ /* 8723B */
{ IC_INFO(RTL_ROM_LMP_8723B, 0xb), { IC_INFO(RTL_ROM_LMP_8723B, 0xb, 0x6, HCI_USB),
.config_needed = false, .config_needed = false,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8723b_fw.bin", .fw_name = "rtl_bt/rtl8723b_fw.bin",
.cfg_name = "rtl_bt/rtl8723b_config" }, .cfg_name = "rtl_bt/rtl8723b_config" },
/* 8723D */ /* 8723D */
{ IC_INFO(RTL_ROM_LMP_8723B, 0xd), { IC_INFO(RTL_ROM_LMP_8723B, 0xd, 0x8, HCI_USB),
.config_needed = true, .config_needed = true,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8723d_fw.bin", .fw_name = "rtl_bt/rtl8723d_fw.bin",
.cfg_name = "rtl_bt/rtl8723d_config" }, .cfg_name = "rtl_bt/rtl8723d_config" },
/* 8723DS */ /* 8723DS */
{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV | { IC_INFO(RTL_ROM_LMP_8723B, 0xd, 0x8, HCI_UART),
IC_MATCH_FL_HCIVER | IC_MATCH_FL_HCIBUS,
.lmp_subver = RTL_ROM_LMP_8723B,
.hci_rev = 0xd,
.hci_ver = 8,
.hci_bus = HCI_UART,
.config_needed = true, .config_needed = true,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8723ds_fw.bin", .fw_name = "rtl_bt/rtl8723ds_fw.bin",
.cfg_name = "rtl_bt/rtl8723ds_config" }, .cfg_name = "rtl_bt/rtl8723ds_config" },
/* 8723DU */
{ IC_INFO(RTL_ROM_LMP_8723D, 0x826C),
.config_needed = true,
.has_rom_version = true,
.fw_name = "rtl_bt/rtl8723d_fw.bin",
.cfg_name = "rtl_bt/rtl8723d_config" },
/* 8821A */ /* 8821A */
{ IC_INFO(RTL_ROM_LMP_8821A, 0xa), { IC_INFO(RTL_ROM_LMP_8821A, 0xa, 0x6, HCI_USB),
.config_needed = false, .config_needed = false,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8821a_fw.bin", .fw_name = "rtl_bt/rtl8821a_fw.bin",
.cfg_name = "rtl_bt/rtl8821a_config" }, .cfg_name = "rtl_bt/rtl8821a_config" },
/* 8821C */ /* 8821C */
{ IC_INFO(RTL_ROM_LMP_8821A, 0xc), { IC_INFO(RTL_ROM_LMP_8821A, 0xc, 0x8, HCI_USB),
.config_needed = false, .config_needed = false,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8821c_fw.bin", .fw_name = "rtl_bt/rtl8821c_fw.bin",
.cfg_name = "rtl_bt/rtl8821c_config" }, .cfg_name = "rtl_bt/rtl8821c_config" },
/* 8761A */ /* 8761A */
{ IC_INFO(RTL_ROM_LMP_8761A, 0xa), { IC_INFO(RTL_ROM_LMP_8761A, 0xa, 0x6, HCI_USB),
.config_needed = false, .config_needed = false,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8761a_fw.bin", .fw_name = "rtl_bt/rtl8761a_fw.bin",
.cfg_name = "rtl_bt/rtl8761a_config" }, .cfg_name = "rtl_bt/rtl8761a_config" },
/* 8761B */ /* 8761B */
{ IC_INFO(RTL_ROM_LMP_8761A, 0xb), { IC_INFO(RTL_ROM_LMP_8761A, 0xb, 0xa, HCI_USB),
.config_needed = false, .config_needed = false,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8761b_fw.bin", .fw_name = "rtl_bt/rtl8761b_fw.bin",
.cfg_name = "rtl_bt/rtl8761b_config" }, .cfg_name = "rtl_bt/rtl8761b_config" },
/* 8822C with UART interface */ /* 8822C with UART interface */
{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV | { IC_INFO(RTL_ROM_LMP_8822B, 0xc, 0xa, HCI_UART),
IC_MATCH_FL_HCIBUS,
.lmp_subver = RTL_ROM_LMP_8822B,
.hci_rev = 0x000c,
.hci_ver = 0x0a,
.hci_bus = HCI_UART,
.config_needed = true, .config_needed = true,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8822cs_fw.bin", .fw_name = "rtl_bt/rtl8822cs_fw.bin",
.cfg_name = "rtl_bt/rtl8822cs_config" }, .cfg_name = "rtl_bt/rtl8822cs_config" },
/* 8822C with USB interface */ /* 8822C with USB interface */
{ IC_INFO(RTL_ROM_LMP_8822B, 0xc), { IC_INFO(RTL_ROM_LMP_8822B, 0xc, 0xa, HCI_USB),
.config_needed = false, .config_needed = false,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8822cu_fw.bin", .fw_name = "rtl_bt/rtl8822cu_fw.bin",
.cfg_name = "rtl_bt/rtl8822cu_config" }, .cfg_name = "rtl_bt/rtl8822cu_config" },
/* 8822B */ /* 8822B */
{ IC_INFO(RTL_ROM_LMP_8822B, 0xb), { IC_INFO(RTL_ROM_LMP_8822B, 0xb, 0x7, HCI_USB),
.config_needed = true, .config_needed = true,
.has_rom_version = true, .has_rom_version = true,
.fw_name = "rtl_bt/rtl8822b_fw.bin", .fw_name = "rtl_bt/rtl8822b_fw.bin",
...@@ -654,7 +628,6 @@ int btrtl_download_firmware(struct hci_dev *hdev, ...@@ -654,7 +628,6 @@ int btrtl_download_firmware(struct hci_dev *hdev,
switch (btrtl_dev->ic_info->lmp_subver) { switch (btrtl_dev->ic_info->lmp_subver) {
case RTL_ROM_LMP_8723A: case RTL_ROM_LMP_8723A:
case RTL_ROM_LMP_3499:
return btrtl_setup_rtl8723a(hdev, btrtl_dev); return btrtl_setup_rtl8723a(hdev, btrtl_dev);
case RTL_ROM_LMP_8723B: case RTL_ROM_LMP_8723B:
case RTL_ROM_LMP_8821A: case RTL_ROM_LMP_8821A:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment