Skip to content

Commit 6f9ff24

Browse files
rtkbt-maxholtmann
authored andcommitted
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: Alex Lu <[email protected]> Signed-off-by: Max Chou <[email protected]> Signed-off-by: Marcel Holtmann <[email protected]>
1 parent 73280f1 commit 6f9ff24

File tree

1 file changed

+19
-46
lines changed

1 file changed

+19
-46
lines changed

drivers/bluetooth/btrtl.c

Lines changed: 19 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,8 @@
1818
#define VERSION "0.1"
1919

2020
#define RTL_EPATCH_SIGNATURE "Realtech"
21-
#define RTL_ROM_LMP_3499 0x3499
2221
#define RTL_ROM_LMP_8723A 0x1200
2322
#define RTL_ROM_LMP_8723B 0x8723
24-
#define RTL_ROM_LMP_8723D 0x8873
2523
#define RTL_ROM_LMP_8821A 0x8821
2624
#define RTL_ROM_LMP_8761A 0x8761
2725
#define RTL_ROM_LMP_8822B 0x8822
@@ -31,10 +29,13 @@
3129
#define IC_MATCH_FL_HCIREV (1 << 1)
3230
#define IC_MATCH_FL_HCIVER (1 << 2)
3331
#define IC_MATCH_FL_HCIBUS (1 << 3)
34-
#define IC_INFO(lmps, hcir) \
35-
.match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV, \
32+
#define IC_INFO(lmps, hcir, hciv, bus) \
33+
.match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV | \
34+
IC_MATCH_FL_HCIVER | IC_MATCH_FL_HCIBUS, \
3635
.lmp_subver = (lmps), \
37-
.hci_rev = (hcir)
36+
.hci_rev = (hcir), \
37+
.hci_ver = (hciv), \
38+
.hci_bus = (bus)
3839

3940
struct id_table {
4041
__u16 match_flags;
@@ -58,112 +59,85 @@ struct btrtl_device_info {
5859
};
5960

6061
static const struct id_table ic_id_table[] = {
61-
{ IC_MATCH_FL_LMPSUBV, RTL_ROM_LMP_8723A, 0x0,
62-
.config_needed = false,
63-
.has_rom_version = false,
64-
.fw_name = "rtl_bt/rtl8723a_fw.bin",
65-
.cfg_name = NULL },
66-
67-
{ IC_MATCH_FL_LMPSUBV, RTL_ROM_LMP_3499, 0x0,
62+
/* 8723A */
63+
{ IC_INFO(RTL_ROM_LMP_8723A, 0xb, 0x6, HCI_USB),
6864
.config_needed = false,
6965
.has_rom_version = false,
7066
.fw_name = "rtl_bt/rtl8723a_fw.bin",
7167
.cfg_name = NULL },
7268

7369
/* 8723BS */
74-
{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV |
75-
IC_MATCH_FL_HCIVER | IC_MATCH_FL_HCIBUS,
76-
.lmp_subver = RTL_ROM_LMP_8723B,
77-
.hci_rev = 0xb,
78-
.hci_ver = 6,
79-
.hci_bus = HCI_UART,
70+
{ IC_INFO(RTL_ROM_LMP_8723B, 0xb, 0x6, HCI_UART),
8071
.config_needed = true,
8172
.has_rom_version = true,
8273
.fw_name = "rtl_bt/rtl8723bs_fw.bin",
8374
.cfg_name = "rtl_bt/rtl8723bs_config" },
8475

8576
/* 8723B */
86-
{ IC_INFO(RTL_ROM_LMP_8723B, 0xb),
77+
{ IC_INFO(RTL_ROM_LMP_8723B, 0xb, 0x6, HCI_USB),
8778
.config_needed = false,
8879
.has_rom_version = true,
8980
.fw_name = "rtl_bt/rtl8723b_fw.bin",
9081
.cfg_name = "rtl_bt/rtl8723b_config" },
9182

9283
/* 8723D */
93-
{ IC_INFO(RTL_ROM_LMP_8723B, 0xd),
84+
{ IC_INFO(RTL_ROM_LMP_8723B, 0xd, 0x8, HCI_USB),
9485
.config_needed = true,
9586
.has_rom_version = true,
9687
.fw_name = "rtl_bt/rtl8723d_fw.bin",
9788
.cfg_name = "rtl_bt/rtl8723d_config" },
9889

9990
/* 8723DS */
100-
{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV |
101-
IC_MATCH_FL_HCIVER | IC_MATCH_FL_HCIBUS,
102-
.lmp_subver = RTL_ROM_LMP_8723B,
103-
.hci_rev = 0xd,
104-
.hci_ver = 8,
105-
.hci_bus = HCI_UART,
91+
{ IC_INFO(RTL_ROM_LMP_8723B, 0xd, 0x8, HCI_UART),
10692
.config_needed = true,
10793
.has_rom_version = true,
10894
.fw_name = "rtl_bt/rtl8723ds_fw.bin",
10995
.cfg_name = "rtl_bt/rtl8723ds_config" },
11096

111-
/* 8723DU */
112-
{ IC_INFO(RTL_ROM_LMP_8723D, 0x826C),
113-
.config_needed = true,
114-
.has_rom_version = true,
115-
.fw_name = "rtl_bt/rtl8723d_fw.bin",
116-
.cfg_name = "rtl_bt/rtl8723d_config" },
117-
11897
/* 8821A */
119-
{ IC_INFO(RTL_ROM_LMP_8821A, 0xa),
98+
{ IC_INFO(RTL_ROM_LMP_8821A, 0xa, 0x6, HCI_USB),
12099
.config_needed = false,
121100
.has_rom_version = true,
122101
.fw_name = "rtl_bt/rtl8821a_fw.bin",
123102
.cfg_name = "rtl_bt/rtl8821a_config" },
124103

125104
/* 8821C */
126-
{ IC_INFO(RTL_ROM_LMP_8821A, 0xc),
105+
{ IC_INFO(RTL_ROM_LMP_8821A, 0xc, 0x8, HCI_USB),
127106
.config_needed = false,
128107
.has_rom_version = true,
129108
.fw_name = "rtl_bt/rtl8821c_fw.bin",
130109
.cfg_name = "rtl_bt/rtl8821c_config" },
131110

132111
/* 8761A */
133-
{ IC_INFO(RTL_ROM_LMP_8761A, 0xa),
112+
{ IC_INFO(RTL_ROM_LMP_8761A, 0xa, 0x6, HCI_USB),
134113
.config_needed = false,
135114
.has_rom_version = true,
136115
.fw_name = "rtl_bt/rtl8761a_fw.bin",
137116
.cfg_name = "rtl_bt/rtl8761a_config" },
138117

139118
/* 8761B */
140-
{ IC_INFO(RTL_ROM_LMP_8761A, 0xb),
119+
{ IC_INFO(RTL_ROM_LMP_8761A, 0xb, 0xa, HCI_USB),
141120
.config_needed = false,
142121
.has_rom_version = true,
143122
.fw_name = "rtl_bt/rtl8761b_fw.bin",
144123
.cfg_name = "rtl_bt/rtl8761b_config" },
145124

146125
/* 8822C with UART interface */
147-
{ .match_flags = IC_MATCH_FL_LMPSUBV | IC_MATCH_FL_HCIREV |
148-
IC_MATCH_FL_HCIBUS,
149-
.lmp_subver = RTL_ROM_LMP_8822B,
150-
.hci_rev = 0x000c,
151-
.hci_ver = 0x0a,
152-
.hci_bus = HCI_UART,
126+
{ IC_INFO(RTL_ROM_LMP_8822B, 0xc, 0xa, HCI_UART),
153127
.config_needed = true,
154128
.has_rom_version = true,
155129
.fw_name = "rtl_bt/rtl8822cs_fw.bin",
156130
.cfg_name = "rtl_bt/rtl8822cs_config" },
157131

158132
/* 8822C with USB interface */
159-
{ IC_INFO(RTL_ROM_LMP_8822B, 0xc),
133+
{ IC_INFO(RTL_ROM_LMP_8822B, 0xc, 0xa, HCI_USB),
160134
.config_needed = false,
161135
.has_rom_version = true,
162136
.fw_name = "rtl_bt/rtl8822cu_fw.bin",
163137
.cfg_name = "rtl_bt/rtl8822cu_config" },
164138

165139
/* 8822B */
166-
{ IC_INFO(RTL_ROM_LMP_8822B, 0xb),
140+
{ IC_INFO(RTL_ROM_LMP_8822B, 0xb, 0x7, HCI_USB),
167141
.config_needed = true,
168142
.has_rom_version = true,
169143
.fw_name = "rtl_bt/rtl8822b_fw.bin",
@@ -654,7 +628,6 @@ int btrtl_download_firmware(struct hci_dev *hdev,
654628

655629
switch (btrtl_dev->ic_info->lmp_subver) {
656630
case RTL_ROM_LMP_8723A:
657-
case RTL_ROM_LMP_3499:
658631
return btrtl_setup_rtl8723a(hdev, btrtl_dev);
659632
case RTL_ROM_LMP_8723B:
660633
case RTL_ROM_LMP_8821A:

0 commit comments

Comments
 (0)