xref: /linux/drivers/bluetooth/btusb.c (revision 5d085ad2e68cceec8332b23ea8f630a28b506366)
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  *
4  *  Generic Bluetooth USB driver
5  *
6  *  Copyright (C) 2005-2008  Marcel Holtmann <marcel@holtmann.org>
7  */
8 
9 #include <linux/dmi.h>
10 #include <linux/module.h>
11 #include <linux/usb.h>
12 #include <linux/usb/quirks.h>
13 #include <linux/firmware.h>
14 #include <linux/iopoll.h>
15 #include <linux/of_device.h>
16 #include <linux/of_irq.h>
17 #include <linux/suspend.h>
18 #include <linux/gpio/consumer.h>
19 #include <asm/unaligned.h>
20 
21 #include <net/bluetooth/bluetooth.h>
22 #include <net/bluetooth/hci_core.h>
23 
24 #include "btintel.h"
25 #include "btbcm.h"
26 #include "btrtl.h"
27 
28 #define VERSION "0.8"
29 
30 static bool disable_scofix;
31 static bool force_scofix;
32 static bool enable_autosuspend = IS_ENABLED(CONFIG_BT_HCIBTUSB_AUTOSUSPEND);
33 
34 static bool reset = true;
35 
36 static struct usb_driver btusb_driver;
37 
38 #define BTUSB_IGNORE		0x01
39 #define BTUSB_DIGIANSWER	0x02
40 #define BTUSB_CSR		0x04
41 #define BTUSB_SNIFFER		0x08
42 #define BTUSB_BCM92035		0x10
43 #define BTUSB_BROKEN_ISOC	0x20
44 #define BTUSB_WRONG_SCO_MTU	0x40
45 #define BTUSB_ATH3012		0x80
46 #define BTUSB_INTEL		0x100
47 #define BTUSB_INTEL_BOOT	0x200
48 #define BTUSB_BCM_PATCHRAM	0x400
49 #define BTUSB_MARVELL		0x800
50 #define BTUSB_SWAVE		0x1000
51 #define BTUSB_INTEL_NEW		0x2000
52 #define BTUSB_AMP		0x4000
53 #define BTUSB_QCA_ROME		0x8000
54 #define BTUSB_BCM_APPLE		0x10000
55 #define BTUSB_REALTEK		0x20000
56 #define BTUSB_BCM2045		0x40000
57 #define BTUSB_IFNUM_2		0x80000
58 #define BTUSB_CW6622		0x100000
59 #define BTUSB_MEDIATEK		0x200000
60 #define BTUSB_WIDEBAND_SPEECH	0x400000
61 
62 static const struct usb_device_id btusb_table[] = {
63 	/* Generic Bluetooth USB device */
64 	{ USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
65 
66 	/* Generic Bluetooth AMP device */
67 	{ USB_DEVICE_INFO(0xe0, 0x01, 0x04), .driver_info = BTUSB_AMP },
68 
69 	/* Generic Bluetooth USB interface */
70 	{ USB_INTERFACE_INFO(0xe0, 0x01, 0x01) },
71 
72 	/* Apple-specific (Broadcom) devices */
73 	{ USB_VENDOR_AND_INTERFACE_INFO(0x05ac, 0xff, 0x01, 0x01),
74 	  .driver_info = BTUSB_BCM_APPLE | BTUSB_IFNUM_2 },
75 
76 	/* MediaTek MT76x0E */
77 	{ USB_DEVICE(0x0e8d, 0x763f) },
78 
79 	/* Broadcom SoftSailing reporting vendor specific */
80 	{ USB_DEVICE(0x0a5c, 0x21e1) },
81 
82 	/* Apple MacBookPro 7,1 */
83 	{ USB_DEVICE(0x05ac, 0x8213) },
84 
85 	/* Apple iMac11,1 */
86 	{ USB_DEVICE(0x05ac, 0x8215) },
87 
88 	/* Apple MacBookPro6,2 */
89 	{ USB_DEVICE(0x05ac, 0x8218) },
90 
91 	/* Apple MacBookAir3,1, MacBookAir3,2 */
92 	{ USB_DEVICE(0x05ac, 0x821b) },
93 
94 	/* Apple MacBookAir4,1 */
95 	{ USB_DEVICE(0x05ac, 0x821f) },
96 
97 	/* Apple MacBookPro8,2 */
98 	{ USB_DEVICE(0x05ac, 0x821a) },
99 
100 	/* Apple MacMini5,1 */
101 	{ USB_DEVICE(0x05ac, 0x8281) },
102 
103 	/* AVM BlueFRITZ! USB v2.0 */
104 	{ USB_DEVICE(0x057c, 0x3800), .driver_info = BTUSB_SWAVE },
105 
106 	/* Bluetooth Ultraport Module from IBM */
107 	{ USB_DEVICE(0x04bf, 0x030a) },
108 
109 	/* ALPS Modules with non-standard id */
110 	{ USB_DEVICE(0x044e, 0x3001) },
111 	{ USB_DEVICE(0x044e, 0x3002) },
112 
113 	/* Ericsson with non-standard id */
114 	{ USB_DEVICE(0x0bdb, 0x1002) },
115 
116 	/* Canyon CN-BTU1 with HID interfaces */
117 	{ USB_DEVICE(0x0c10, 0x0000) },
118 
119 	/* Broadcom BCM20702A0 */
120 	{ USB_DEVICE(0x413c, 0x8197) },
121 
122 	/* Broadcom BCM20702B0 (Dynex/Insignia) */
123 	{ USB_DEVICE(0x19ff, 0x0239), .driver_info = BTUSB_BCM_PATCHRAM },
124 
125 	/* Broadcom BCM43142A0 (Foxconn/Lenovo) */
126 	{ USB_VENDOR_AND_INTERFACE_INFO(0x105b, 0xff, 0x01, 0x01),
127 	  .driver_info = BTUSB_BCM_PATCHRAM },
128 
129 	/* Broadcom BCM920703 (HTC Vive) */
130 	{ USB_VENDOR_AND_INTERFACE_INFO(0x0bb4, 0xff, 0x01, 0x01),
131 	  .driver_info = BTUSB_BCM_PATCHRAM },
132 
133 	/* Foxconn - Hon Hai */
134 	{ USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01),
135 	  .driver_info = BTUSB_BCM_PATCHRAM },
136 
137 	/* Lite-On Technology - Broadcom based */
138 	{ USB_VENDOR_AND_INTERFACE_INFO(0x04ca, 0xff, 0x01, 0x01),
139 	  .driver_info = BTUSB_BCM_PATCHRAM },
140 
141 	/* Broadcom devices with vendor specific id */
142 	{ USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01),
143 	  .driver_info = BTUSB_BCM_PATCHRAM },
144 
145 	/* ASUSTek Computer - Broadcom based */
146 	{ USB_VENDOR_AND_INTERFACE_INFO(0x0b05, 0xff, 0x01, 0x01),
147 	  .driver_info = BTUSB_BCM_PATCHRAM },
148 
149 	/* Belkin F8065bf - Broadcom based */
150 	{ USB_VENDOR_AND_INTERFACE_INFO(0x050d, 0xff, 0x01, 0x01),
151 	  .driver_info = BTUSB_BCM_PATCHRAM },
152 
153 	/* IMC Networks - Broadcom based */
154 	{ USB_VENDOR_AND_INTERFACE_INFO(0x13d3, 0xff, 0x01, 0x01),
155 	  .driver_info = BTUSB_BCM_PATCHRAM },
156 
157 	/* Dell Computer - Broadcom based  */
158 	{ USB_VENDOR_AND_INTERFACE_INFO(0x413c, 0xff, 0x01, 0x01),
159 	  .driver_info = BTUSB_BCM_PATCHRAM },
160 
161 	/* Toshiba Corp - Broadcom based */
162 	{ USB_VENDOR_AND_INTERFACE_INFO(0x0930, 0xff, 0x01, 0x01),
163 	  .driver_info = BTUSB_BCM_PATCHRAM },
164 
165 	/* Intel Bluetooth USB Bootloader (RAM module) */
166 	{ USB_DEVICE(0x8087, 0x0a5a),
167 	  .driver_info = BTUSB_INTEL_BOOT | BTUSB_BROKEN_ISOC },
168 
169 	{ }	/* Terminating entry */
170 };
171 
172 MODULE_DEVICE_TABLE(usb, btusb_table);
173 
174 static const struct usb_device_id blacklist_table[] = {
175 	/* CSR BlueCore devices */
176 	{ USB_DEVICE(0x0a12, 0x0001), .driver_info = BTUSB_CSR },
177 
178 	/* Broadcom BCM2033 without firmware */
179 	{ USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE },
180 
181 	/* Broadcom BCM2045 devices */
182 	{ USB_DEVICE(0x0a5c, 0x2045), .driver_info = BTUSB_BCM2045 },
183 
184 	/* Atheros 3011 with sflash firmware */
185 	{ USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE },
186 	{ USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },
187 	{ USB_DEVICE(0x04f2, 0xaff1), .driver_info = BTUSB_IGNORE },
188 	{ USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },
189 	{ USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
190 	{ USB_DEVICE(0x0cf3, 0xe019), .driver_info = BTUSB_IGNORE },
191 	{ USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },
192 
193 	/* Atheros AR9285 Malbec with sflash firmware */
194 	{ USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
195 
196 	/* Atheros 3012 with sflash firmware */
197 	{ USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 },
198 	{ USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 },
199 	{ USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
200 	{ USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
201 	{ USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
202 	{ USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
203 	{ USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
204 	{ USB_DEVICE(0x0489, 0xe095), .driver_info = BTUSB_ATH3012 },
205 	{ USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
206 	{ USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
207 	{ USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
208 	{ USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 },
209 	{ USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
210 	{ USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
211 	{ USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
212 	{ USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 },
213 	{ USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
214 	{ USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
215 	{ USB_DEVICE(0x04ca, 0x3014), .driver_info = BTUSB_ATH3012 },
216 	{ USB_DEVICE(0x04ca, 0x3018), .driver_info = BTUSB_ATH3012 },
217 	{ USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
218 	{ USB_DEVICE(0x0930, 0x021c), .driver_info = BTUSB_ATH3012 },
219 	{ USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 },
220 	{ USB_DEVICE(0x0930, 0x0227), .driver_info = BTUSB_ATH3012 },
221 	{ USB_DEVICE(0x0b05, 0x17d0), .driver_info = BTUSB_ATH3012 },
222 	{ USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 },
223 	{ USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
224 	{ USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 },
225 	{ USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
226 	{ USB_DEVICE(0x0cf3, 0x311e), .driver_info = BTUSB_ATH3012 },
227 	{ USB_DEVICE(0x0cf3, 0x311f), .driver_info = BTUSB_ATH3012 },
228 	{ USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 },
229 	{ USB_DEVICE(0x0cf3, 0x817a), .driver_info = BTUSB_ATH3012 },
230 	{ USB_DEVICE(0x0cf3, 0x817b), .driver_info = BTUSB_ATH3012 },
231 	{ USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 },
232 	{ USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
233 	{ USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
234 	{ USB_DEVICE(0x0cf3, 0xe006), .driver_info = BTUSB_ATH3012 },
235 	{ USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
236 	{ USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
237 	{ USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
238 	{ USB_DEVICE(0x13d3, 0x3395), .driver_info = BTUSB_ATH3012 },
239 	{ USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
240 	{ USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
241 	{ USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
242 	{ USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
243 	{ USB_DEVICE(0x13d3, 0x3472), .driver_info = BTUSB_ATH3012 },
244 	{ USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
245 	{ USB_DEVICE(0x13d3, 0x3487), .driver_info = BTUSB_ATH3012 },
246 	{ USB_DEVICE(0x13d3, 0x3490), .driver_info = BTUSB_ATH3012 },
247 
248 	/* Atheros AR5BBU12 with sflash firmware */
249 	{ USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
250 
251 	/* Atheros AR5BBU12 with sflash firmware */
252 	{ USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 },
253 	{ USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 },
254 
255 	/* QCA ROME chipset */
256 	{ USB_DEVICE(0x0cf3, 0x535b), .driver_info = BTUSB_QCA_ROME },
257 	{ USB_DEVICE(0x0cf3, 0xe007), .driver_info = BTUSB_QCA_ROME },
258 	{ USB_DEVICE(0x0cf3, 0xe009), .driver_info = BTUSB_QCA_ROME },
259 	{ USB_DEVICE(0x0cf3, 0xe010), .driver_info = BTUSB_QCA_ROME },
260 	{ USB_DEVICE(0x0cf3, 0xe300), .driver_info = BTUSB_QCA_ROME },
261 	{ USB_DEVICE(0x0cf3, 0xe301), .driver_info = BTUSB_QCA_ROME },
262 	{ USB_DEVICE(0x0cf3, 0xe360), .driver_info = BTUSB_QCA_ROME },
263 	{ USB_DEVICE(0x0489, 0xe092), .driver_info = BTUSB_QCA_ROME },
264 	{ USB_DEVICE(0x0489, 0xe09f), .driver_info = BTUSB_QCA_ROME },
265 	{ USB_DEVICE(0x0489, 0xe0a2), .driver_info = BTUSB_QCA_ROME },
266 	{ USB_DEVICE(0x04ca, 0x3011), .driver_info = BTUSB_QCA_ROME },
267 	{ USB_DEVICE(0x04ca, 0x3015), .driver_info = BTUSB_QCA_ROME },
268 	{ USB_DEVICE(0x04ca, 0x3016), .driver_info = BTUSB_QCA_ROME },
269 	{ USB_DEVICE(0x04ca, 0x301a), .driver_info = BTUSB_QCA_ROME },
270 	{ USB_DEVICE(0x04ca, 0x3021), .driver_info = BTUSB_QCA_ROME },
271 	{ USB_DEVICE(0x13d3, 0x3491), .driver_info = BTUSB_QCA_ROME },
272 	{ USB_DEVICE(0x13d3, 0x3496), .driver_info = BTUSB_QCA_ROME },
273 	{ USB_DEVICE(0x13d3, 0x3501), .driver_info = BTUSB_QCA_ROME },
274 
275 	/* Broadcom BCM2035 */
276 	{ USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },
277 	{ USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
278 	{ USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
279 
280 	/* Broadcom BCM2045 */
281 	{ USB_DEVICE(0x0a5c, 0x2039), .driver_info = BTUSB_WRONG_SCO_MTU },
282 	{ USB_DEVICE(0x0a5c, 0x2101), .driver_info = BTUSB_WRONG_SCO_MTU },
283 
284 	/* IBM/Lenovo ThinkPad with Broadcom chip */
285 	{ USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_WRONG_SCO_MTU },
286 	{ USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_WRONG_SCO_MTU },
287 
288 	/* HP laptop with Broadcom chip */
289 	{ USB_DEVICE(0x03f0, 0x171d), .driver_info = BTUSB_WRONG_SCO_MTU },
290 
291 	/* Dell laptop with Broadcom chip */
292 	{ USB_DEVICE(0x413c, 0x8126), .driver_info = BTUSB_WRONG_SCO_MTU },
293 
294 	/* Dell Wireless 370 and 410 devices */
295 	{ USB_DEVICE(0x413c, 0x8152), .driver_info = BTUSB_WRONG_SCO_MTU },
296 	{ USB_DEVICE(0x413c, 0x8156), .driver_info = BTUSB_WRONG_SCO_MTU },
297 
298 	/* Belkin F8T012 and F8T013 devices */
299 	{ USB_DEVICE(0x050d, 0x0012), .driver_info = BTUSB_WRONG_SCO_MTU },
300 	{ USB_DEVICE(0x050d, 0x0013), .driver_info = BTUSB_WRONG_SCO_MTU },
301 
302 	/* Asus WL-BTD202 device */
303 	{ USB_DEVICE(0x0b05, 0x1715), .driver_info = BTUSB_WRONG_SCO_MTU },
304 
305 	/* Kensington Bluetooth USB adapter */
306 	{ USB_DEVICE(0x047d, 0x105e), .driver_info = BTUSB_WRONG_SCO_MTU },
307 
308 	/* RTX Telecom based adapters with buggy SCO support */
309 	{ USB_DEVICE(0x0400, 0x0807), .driver_info = BTUSB_BROKEN_ISOC },
310 	{ USB_DEVICE(0x0400, 0x080a), .driver_info = BTUSB_BROKEN_ISOC },
311 
312 	/* CONWISE Technology based adapters with buggy SCO support */
313 	{ USB_DEVICE(0x0e5e, 0x6622),
314 	  .driver_info = BTUSB_BROKEN_ISOC | BTUSB_CW6622},
315 
316 	/* Roper Class 1 Bluetooth Dongle (Silicon Wave based) */
317 	{ USB_DEVICE(0x1310, 0x0001), .driver_info = BTUSB_SWAVE },
318 
319 	/* Digianswer devices */
320 	{ USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER },
321 	{ USB_DEVICE(0x08fd, 0x0002), .driver_info = BTUSB_IGNORE },
322 
323 	/* CSR BlueCore Bluetooth Sniffer */
324 	{ USB_DEVICE(0x0a12, 0x0002),
325 	  .driver_info = BTUSB_SNIFFER | BTUSB_BROKEN_ISOC },
326 
327 	/* Frontline ComProbe Bluetooth Sniffer */
328 	{ USB_DEVICE(0x16d3, 0x0002),
329 	  .driver_info = BTUSB_SNIFFER | BTUSB_BROKEN_ISOC },
330 
331 	/* Marvell Bluetooth devices */
332 	{ USB_DEVICE(0x1286, 0x2044), .driver_info = BTUSB_MARVELL },
333 	{ USB_DEVICE(0x1286, 0x2046), .driver_info = BTUSB_MARVELL },
334 	{ USB_DEVICE(0x1286, 0x204e), .driver_info = BTUSB_MARVELL },
335 
336 	/* Intel Bluetooth devices */
337 	{ USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_NEW |
338 						     BTUSB_WIDEBAND_SPEECH },
339 	{ USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_NEW |
340 						     BTUSB_WIDEBAND_SPEECH },
341 	{ USB_DEVICE(0x8087, 0x0029), .driver_info = BTUSB_INTEL_NEW |
342 						     BTUSB_WIDEBAND_SPEECH },
343 	{ USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR },
344 	{ USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL },
345 	{ USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL },
346 	{ USB_DEVICE(0x8087, 0x0a2b), .driver_info = BTUSB_INTEL_NEW |
347 						     BTUSB_WIDEBAND_SPEECH },
348 	{ USB_DEVICE(0x8087, 0x0aa7), .driver_info = BTUSB_INTEL |
349 						     BTUSB_WIDEBAND_SPEECH },
350 	{ USB_DEVICE(0x8087, 0x0aaa), .driver_info = BTUSB_INTEL_NEW |
351 						     BTUSB_WIDEBAND_SPEECH },
352 
353 	/* Other Intel Bluetooth devices */
354 	{ USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01),
355 	  .driver_info = BTUSB_IGNORE },
356 
357 	/* Realtek Bluetooth devices */
358 	{ USB_VENDOR_AND_INTERFACE_INFO(0x0bda, 0xe0, 0x01, 0x01),
359 	  .driver_info = BTUSB_REALTEK },
360 
361 	/* MediaTek Bluetooth devices */
362 	{ USB_VENDOR_AND_INTERFACE_INFO(0x0e8d, 0xe0, 0x01, 0x01),
363 	  .driver_info = BTUSB_MEDIATEK },
364 
365 	/* Additional Realtek 8723AE Bluetooth devices */
366 	{ USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK },
367 	{ USB_DEVICE(0x13d3, 0x3394), .driver_info = BTUSB_REALTEK },
368 
369 	/* Additional Realtek 8723BE Bluetooth devices */
370 	{ USB_DEVICE(0x0489, 0xe085), .driver_info = BTUSB_REALTEK },
371 	{ USB_DEVICE(0x0489, 0xe08b), .driver_info = BTUSB_REALTEK },
372 	{ USB_DEVICE(0x13d3, 0x3410), .driver_info = BTUSB_REALTEK },
373 	{ USB_DEVICE(0x13d3, 0x3416), .driver_info = BTUSB_REALTEK },
374 	{ USB_DEVICE(0x13d3, 0x3459), .driver_info = BTUSB_REALTEK },
375 	{ USB_DEVICE(0x13d3, 0x3494), .driver_info = BTUSB_REALTEK },
376 
377 	/* Additional Realtek 8723BU Bluetooth devices */
378 	{ USB_DEVICE(0x7392, 0xa611), .driver_info = BTUSB_REALTEK },
379 
380 	/* Additional Realtek 8723DE Bluetooth devices */
381 	{ USB_DEVICE(0x0bda, 0xb009), .driver_info = BTUSB_REALTEK },
382 	{ USB_DEVICE(0x2ff8, 0xb011), .driver_info = BTUSB_REALTEK },
383 
384 	/* Additional Realtek 8821AE Bluetooth devices */
385 	{ USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK },
386 	{ USB_DEVICE(0x13d3, 0x3414), .driver_info = BTUSB_REALTEK },
387 	{ USB_DEVICE(0x13d3, 0x3458), .driver_info = BTUSB_REALTEK },
388 	{ USB_DEVICE(0x13d3, 0x3461), .driver_info = BTUSB_REALTEK },
389 	{ USB_DEVICE(0x13d3, 0x3462), .driver_info = BTUSB_REALTEK },
390 
391 	/* Additional Realtek 8822BE Bluetooth devices */
392 	{ USB_DEVICE(0x13d3, 0x3526), .driver_info = BTUSB_REALTEK },
393 	{ USB_DEVICE(0x0b05, 0x185c), .driver_info = BTUSB_REALTEK },
394 
395 	/* Additional Realtek 8822CE Bluetooth devices */
396 	{ USB_DEVICE(0x04ca, 0x4005), .driver_info = BTUSB_REALTEK },
397 	{ USB_DEVICE(0x13d3, 0x3548), .driver_info = BTUSB_REALTEK },
398 
399 	/* Silicon Wave based devices */
400 	{ USB_DEVICE(0x0c10, 0x0000), .driver_info = BTUSB_SWAVE },
401 
402 	{ }	/* Terminating entry */
403 };
404 
405 /* The Bluetooth USB module build into some devices needs to be reset on resume,
406  * this is a problem with the platform (likely shutting off all power) not with
407  * the module itself. So we use a DMI list to match known broken platforms.
408  */
409 static const struct dmi_system_id btusb_needs_reset_resume_table[] = {
410 	{
411 		/* Dell OptiPlex 3060 (QCA ROME device 0cf3:e007) */
412 		.matches = {
413 			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
414 			DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 3060"),
415 		},
416 	},
417 	{
418 		/* Dell XPS 9360 (QCA ROME device 0cf3:e300) */
419 		.matches = {
420 			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
421 			DMI_MATCH(DMI_PRODUCT_NAME, "XPS 13 9360"),
422 		},
423 	},
424 	{
425 		/* Dell Inspiron 5565 (QCA ROME device 0cf3:e009) */
426 		.matches = {
427 			DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
428 			DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 5565"),
429 		},
430 	},
431 	{}
432 };
433 
434 #define BTUSB_MAX_ISOC_FRAMES	10
435 
436 #define BTUSB_INTR_RUNNING	0
437 #define BTUSB_BULK_RUNNING	1
438 #define BTUSB_ISOC_RUNNING	2
439 #define BTUSB_SUSPENDING	3
440 #define BTUSB_DID_ISO_RESUME	4
441 #define BTUSB_BOOTLOADER	5
442 #define BTUSB_DOWNLOADING	6
443 #define BTUSB_FIRMWARE_LOADED	7
444 #define BTUSB_FIRMWARE_FAILED	8
445 #define BTUSB_BOOTING		9
446 #define BTUSB_DIAG_RUNNING	10
447 #define BTUSB_OOB_WAKE_ENABLED	11
448 #define BTUSB_HW_RESET_ACTIVE	12
449 #define BTUSB_TX_WAIT_VND_EVT	13
450 #define BTUSB_WAKEUP_DISABLE	14
451 
452 struct btusb_data {
453 	struct hci_dev       *hdev;
454 	struct usb_device    *udev;
455 	struct usb_interface *intf;
456 	struct usb_interface *isoc;
457 	struct usb_interface *diag;
458 	unsigned isoc_ifnum;
459 
460 	unsigned long flags;
461 
462 	struct work_struct work;
463 	struct work_struct waker;
464 
465 	struct usb_anchor deferred;
466 	struct usb_anchor tx_anchor;
467 	int tx_in_flight;
468 	spinlock_t txlock;
469 
470 	struct usb_anchor intr_anchor;
471 	struct usb_anchor bulk_anchor;
472 	struct usb_anchor isoc_anchor;
473 	struct usb_anchor diag_anchor;
474 	struct usb_anchor ctrl_anchor;
475 	spinlock_t rxlock;
476 
477 	struct sk_buff *evt_skb;
478 	struct sk_buff *acl_skb;
479 	struct sk_buff *sco_skb;
480 
481 	struct usb_endpoint_descriptor *intr_ep;
482 	struct usb_endpoint_descriptor *bulk_tx_ep;
483 	struct usb_endpoint_descriptor *bulk_rx_ep;
484 	struct usb_endpoint_descriptor *isoc_tx_ep;
485 	struct usb_endpoint_descriptor *isoc_rx_ep;
486 	struct usb_endpoint_descriptor *diag_tx_ep;
487 	struct usb_endpoint_descriptor *diag_rx_ep;
488 
489 	struct gpio_desc *reset_gpio;
490 
491 	__u8 cmdreq_type;
492 	__u8 cmdreq;
493 
494 	unsigned int sco_num;
495 	unsigned int air_mode;
496 	bool usb_alt6_packet_flow;
497 	int isoc_altsetting;
498 	int suspend_count;
499 
500 	int (*recv_event)(struct hci_dev *hdev, struct sk_buff *skb);
501 	int (*recv_bulk)(struct btusb_data *data, void *buffer, int count);
502 
503 	int (*setup_on_usb)(struct hci_dev *hdev);
504 
505 	int oob_wake_irq;   /* irq for out-of-band wake-on-bt */
506 	unsigned cmd_timeout_cnt;
507 };
508 
509 
510 static void btusb_intel_cmd_timeout(struct hci_dev *hdev)
511 {
512 	struct btusb_data *data = hci_get_drvdata(hdev);
513 	struct gpio_desc *reset_gpio = data->reset_gpio;
514 
515 	if (++data->cmd_timeout_cnt < 5)
516 		return;
517 
518 	if (!reset_gpio) {
519 		bt_dev_err(hdev, "No way to reset. Ignoring and continuing");
520 		return;
521 	}
522 
523 	/*
524 	 * Toggle the hard reset line if the platform provides one. The reset
525 	 * is going to yank the device off the USB and then replug. So doing
526 	 * once is enough. The cleanup is handled correctly on the way out
527 	 * (standard USB disconnect), and the new device is detected cleanly
528 	 * and bound to the driver again like it should be.
529 	 */
530 	if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
531 		bt_dev_err(hdev, "last reset failed? Not resetting again");
532 		return;
533 	}
534 
535 	bt_dev_err(hdev, "Initiating HW reset via gpio");
536 	gpiod_set_value_cansleep(reset_gpio, 1);
537 	msleep(100);
538 	gpiod_set_value_cansleep(reset_gpio, 0);
539 }
540 
541 static void btusb_rtl_cmd_timeout(struct hci_dev *hdev)
542 {
543 	struct btusb_data *data = hci_get_drvdata(hdev);
544 	struct gpio_desc *reset_gpio = data->reset_gpio;
545 
546 	if (++data->cmd_timeout_cnt < 5)
547 		return;
548 
549 	if (!reset_gpio) {
550 		bt_dev_err(hdev, "No gpio to reset Realtek device, ignoring");
551 		return;
552 	}
553 
554 	/* Toggle the hard reset line. The Realtek device is going to
555 	 * yank itself off the USB and then replug. The cleanup is handled
556 	 * correctly on the way out (standard USB disconnect), and the new
557 	 * device is detected cleanly and bound to the driver again like
558 	 * it should be.
559 	 */
560 	if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
561 		bt_dev_err(hdev, "last reset failed? Not resetting again");
562 		return;
563 	}
564 
565 	bt_dev_err(hdev, "Reset Realtek device via gpio");
566 	gpiod_set_value_cansleep(reset_gpio, 1);
567 	msleep(200);
568 	gpiod_set_value_cansleep(reset_gpio, 0);
569 }
570 
571 static inline void btusb_free_frags(struct btusb_data *data)
572 {
573 	unsigned long flags;
574 
575 	spin_lock_irqsave(&data->rxlock, flags);
576 
577 	kfree_skb(data->evt_skb);
578 	data->evt_skb = NULL;
579 
580 	kfree_skb(data->acl_skb);
581 	data->acl_skb = NULL;
582 
583 	kfree_skb(data->sco_skb);
584 	data->sco_skb = NULL;
585 
586 	spin_unlock_irqrestore(&data->rxlock, flags);
587 }
588 
589 static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count)
590 {
591 	struct sk_buff *skb;
592 	unsigned long flags;
593 	int err = 0;
594 
595 	spin_lock_irqsave(&data->rxlock, flags);
596 	skb = data->evt_skb;
597 
598 	while (count) {
599 		int len;
600 
601 		if (!skb) {
602 			skb = bt_skb_alloc(HCI_MAX_EVENT_SIZE, GFP_ATOMIC);
603 			if (!skb) {
604 				err = -ENOMEM;
605 				break;
606 			}
607 
608 			hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
609 			hci_skb_expect(skb) = HCI_EVENT_HDR_SIZE;
610 		}
611 
612 		len = min_t(uint, hci_skb_expect(skb), count);
613 		skb_put_data(skb, buffer, len);
614 
615 		count -= len;
616 		buffer += len;
617 		hci_skb_expect(skb) -= len;
618 
619 		if (skb->len == HCI_EVENT_HDR_SIZE) {
620 			/* Complete event header */
621 			hci_skb_expect(skb) = hci_event_hdr(skb)->plen;
622 
623 			if (skb_tailroom(skb) < hci_skb_expect(skb)) {
624 				kfree_skb(skb);
625 				skb = NULL;
626 
627 				err = -EILSEQ;
628 				break;
629 			}
630 		}
631 
632 		if (!hci_skb_expect(skb)) {
633 			/* Complete frame */
634 			data->recv_event(data->hdev, skb);
635 			skb = NULL;
636 		}
637 	}
638 
639 	data->evt_skb = skb;
640 	spin_unlock_irqrestore(&data->rxlock, flags);
641 
642 	return err;
643 }
644 
645 static int btusb_recv_bulk(struct btusb_data *data, void *buffer, int count)
646 {
647 	struct sk_buff *skb;
648 	unsigned long flags;
649 	int err = 0;
650 
651 	spin_lock_irqsave(&data->rxlock, flags);
652 	skb = data->acl_skb;
653 
654 	while (count) {
655 		int len;
656 
657 		if (!skb) {
658 			skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
659 			if (!skb) {
660 				err = -ENOMEM;
661 				break;
662 			}
663 
664 			hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT;
665 			hci_skb_expect(skb) = HCI_ACL_HDR_SIZE;
666 		}
667 
668 		len = min_t(uint, hci_skb_expect(skb), count);
669 		skb_put_data(skb, buffer, len);
670 
671 		count -= len;
672 		buffer += len;
673 		hci_skb_expect(skb) -= len;
674 
675 		if (skb->len == HCI_ACL_HDR_SIZE) {
676 			__le16 dlen = hci_acl_hdr(skb)->dlen;
677 
678 			/* Complete ACL header */
679 			hci_skb_expect(skb) = __le16_to_cpu(dlen);
680 
681 			if (skb_tailroom(skb) < hci_skb_expect(skb)) {
682 				kfree_skb(skb);
683 				skb = NULL;
684 
685 				err = -EILSEQ;
686 				break;
687 			}
688 		}
689 
690 		if (!hci_skb_expect(skb)) {
691 			/* Complete frame */
692 			hci_recv_frame(data->hdev, skb);
693 			skb = NULL;
694 		}
695 	}
696 
697 	data->acl_skb = skb;
698 	spin_unlock_irqrestore(&data->rxlock, flags);
699 
700 	return err;
701 }
702 
703 static int btusb_recv_isoc(struct btusb_data *data, void *buffer, int count)
704 {
705 	struct sk_buff *skb;
706 	unsigned long flags;
707 	int err = 0;
708 
709 	spin_lock_irqsave(&data->rxlock, flags);
710 	skb = data->sco_skb;
711 
712 	while (count) {
713 		int len;
714 
715 		if (!skb) {
716 			skb = bt_skb_alloc(HCI_MAX_SCO_SIZE, GFP_ATOMIC);
717 			if (!skb) {
718 				err = -ENOMEM;
719 				break;
720 			}
721 
722 			hci_skb_pkt_type(skb) = HCI_SCODATA_PKT;
723 			hci_skb_expect(skb) = HCI_SCO_HDR_SIZE;
724 		}
725 
726 		len = min_t(uint, hci_skb_expect(skb), count);
727 		skb_put_data(skb, buffer, len);
728 
729 		count -= len;
730 		buffer += len;
731 		hci_skb_expect(skb) -= len;
732 
733 		if (skb->len == HCI_SCO_HDR_SIZE) {
734 			/* Complete SCO header */
735 			hci_skb_expect(skb) = hci_sco_hdr(skb)->dlen;
736 
737 			if (skb_tailroom(skb) < hci_skb_expect(skb)) {
738 				kfree_skb(skb);
739 				skb = NULL;
740 
741 				err = -EILSEQ;
742 				break;
743 			}
744 		}
745 
746 		if (!hci_skb_expect(skb)) {
747 			/* Complete frame */
748 			hci_recv_frame(data->hdev, skb);
749 			skb = NULL;
750 		}
751 	}
752 
753 	data->sco_skb = skb;
754 	spin_unlock_irqrestore(&data->rxlock, flags);
755 
756 	return err;
757 }
758 
759 static void btusb_intr_complete(struct urb *urb)
760 {
761 	struct hci_dev *hdev = urb->context;
762 	struct btusb_data *data = hci_get_drvdata(hdev);
763 	int err;
764 
765 	BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
766 	       urb->actual_length);
767 
768 	if (!test_bit(HCI_RUNNING, &hdev->flags))
769 		return;
770 
771 	if (urb->status == 0) {
772 		hdev->stat.byte_rx += urb->actual_length;
773 
774 		if (btusb_recv_intr(data, urb->transfer_buffer,
775 				    urb->actual_length) < 0) {
776 			bt_dev_err(hdev, "corrupted event packet");
777 			hdev->stat.err_rx++;
778 		}
779 	} else if (urb->status == -ENOENT) {
780 		/* Avoid suspend failed when usb_kill_urb */
781 		return;
782 	}
783 
784 	if (!test_bit(BTUSB_INTR_RUNNING, &data->flags))
785 		return;
786 
787 	usb_mark_last_busy(data->udev);
788 	usb_anchor_urb(urb, &data->intr_anchor);
789 
790 	err = usb_submit_urb(urb, GFP_ATOMIC);
791 	if (err < 0) {
792 		/* -EPERM: urb is being killed;
793 		 * -ENODEV: device got disconnected
794 		 */
795 		if (err != -EPERM && err != -ENODEV)
796 			bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
797 				   urb, -err);
798 		usb_unanchor_urb(urb);
799 	}
800 }
801 
802 static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
803 {
804 	struct btusb_data *data = hci_get_drvdata(hdev);
805 	struct urb *urb;
806 	unsigned char *buf;
807 	unsigned int pipe;
808 	int err, size;
809 
810 	BT_DBG("%s", hdev->name);
811 
812 	if (!data->intr_ep)
813 		return -ENODEV;
814 
815 	urb = usb_alloc_urb(0, mem_flags);
816 	if (!urb)
817 		return -ENOMEM;
818 
819 	size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
820 
821 	buf = kmalloc(size, mem_flags);
822 	if (!buf) {
823 		usb_free_urb(urb);
824 		return -ENOMEM;
825 	}
826 
827 	pipe = usb_rcvintpipe(data->udev, data->intr_ep->bEndpointAddress);
828 
829 	usb_fill_int_urb(urb, data->udev, pipe, buf, size,
830 			 btusb_intr_complete, hdev, data->intr_ep->bInterval);
831 
832 	urb->transfer_flags |= URB_FREE_BUFFER;
833 
834 	usb_anchor_urb(urb, &data->intr_anchor);
835 
836 	err = usb_submit_urb(urb, mem_flags);
837 	if (err < 0) {
838 		if (err != -EPERM && err != -ENODEV)
839 			bt_dev_err(hdev, "urb %p submission failed (%d)",
840 				   urb, -err);
841 		usb_unanchor_urb(urb);
842 	}
843 
844 	usb_free_urb(urb);
845 
846 	return err;
847 }
848 
849 static void btusb_bulk_complete(struct urb *urb)
850 {
851 	struct hci_dev *hdev = urb->context;
852 	struct btusb_data *data = hci_get_drvdata(hdev);
853 	int err;
854 
855 	BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
856 	       urb->actual_length);
857 
858 	if (!test_bit(HCI_RUNNING, &hdev->flags))
859 		return;
860 
861 	if (urb->status == 0) {
862 		hdev->stat.byte_rx += urb->actual_length;
863 
864 		if (data->recv_bulk(data, urb->transfer_buffer,
865 				    urb->actual_length) < 0) {
866 			bt_dev_err(hdev, "corrupted ACL packet");
867 			hdev->stat.err_rx++;
868 		}
869 	} else if (urb->status == -ENOENT) {
870 		/* Avoid suspend failed when usb_kill_urb */
871 		return;
872 	}
873 
874 	if (!test_bit(BTUSB_BULK_RUNNING, &data->flags))
875 		return;
876 
877 	usb_anchor_urb(urb, &data->bulk_anchor);
878 	usb_mark_last_busy(data->udev);
879 
880 	err = usb_submit_urb(urb, GFP_ATOMIC);
881 	if (err < 0) {
882 		/* -EPERM: urb is being killed;
883 		 * -ENODEV: device got disconnected
884 		 */
885 		if (err != -EPERM && err != -ENODEV)
886 			bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
887 				   urb, -err);
888 		usb_unanchor_urb(urb);
889 	}
890 }
891 
892 static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)
893 {
894 	struct btusb_data *data = hci_get_drvdata(hdev);
895 	struct urb *urb;
896 	unsigned char *buf;
897 	unsigned int pipe;
898 	int err, size = HCI_MAX_FRAME_SIZE;
899 
900 	BT_DBG("%s", hdev->name);
901 
902 	if (!data->bulk_rx_ep)
903 		return -ENODEV;
904 
905 	urb = usb_alloc_urb(0, mem_flags);
906 	if (!urb)
907 		return -ENOMEM;
908 
909 	buf = kmalloc(size, mem_flags);
910 	if (!buf) {
911 		usb_free_urb(urb);
912 		return -ENOMEM;
913 	}
914 
915 	pipe = usb_rcvbulkpipe(data->udev, data->bulk_rx_ep->bEndpointAddress);
916 
917 	usb_fill_bulk_urb(urb, data->udev, pipe, buf, size,
918 			  btusb_bulk_complete, hdev);
919 
920 	urb->transfer_flags |= URB_FREE_BUFFER;
921 
922 	usb_mark_last_busy(data->udev);
923 	usb_anchor_urb(urb, &data->bulk_anchor);
924 
925 	err = usb_submit_urb(urb, mem_flags);
926 	if (err < 0) {
927 		if (err != -EPERM && err != -ENODEV)
928 			bt_dev_err(hdev, "urb %p submission failed (%d)",
929 				   urb, -err);
930 		usb_unanchor_urb(urb);
931 	}
932 
933 	usb_free_urb(urb);
934 
935 	return err;
936 }
937 
938 static void btusb_isoc_complete(struct urb *urb)
939 {
940 	struct hci_dev *hdev = urb->context;
941 	struct btusb_data *data = hci_get_drvdata(hdev);
942 	int i, err;
943 
944 	BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
945 	       urb->actual_length);
946 
947 	if (!test_bit(HCI_RUNNING, &hdev->flags))
948 		return;
949 
950 	if (urb->status == 0) {
951 		for (i = 0; i < urb->number_of_packets; i++) {
952 			unsigned int offset = urb->iso_frame_desc[i].offset;
953 			unsigned int length = urb->iso_frame_desc[i].actual_length;
954 
955 			if (urb->iso_frame_desc[i].status)
956 				continue;
957 
958 			hdev->stat.byte_rx += length;
959 
960 			if (btusb_recv_isoc(data, urb->transfer_buffer + offset,
961 					    length) < 0) {
962 				bt_dev_err(hdev, "corrupted SCO packet");
963 				hdev->stat.err_rx++;
964 			}
965 		}
966 	} else if (urb->status == -ENOENT) {
967 		/* Avoid suspend failed when usb_kill_urb */
968 		return;
969 	}
970 
971 	if (!test_bit(BTUSB_ISOC_RUNNING, &data->flags))
972 		return;
973 
974 	usb_anchor_urb(urb, &data->isoc_anchor);
975 
976 	err = usb_submit_urb(urb, GFP_ATOMIC);
977 	if (err < 0) {
978 		/* -EPERM: urb is being killed;
979 		 * -ENODEV: device got disconnected
980 		 */
981 		if (err != -EPERM && err != -ENODEV)
982 			bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
983 				   urb, -err);
984 		usb_unanchor_urb(urb);
985 	}
986 }
987 
988 static inline void __fill_isoc_descriptor_msbc(struct urb *urb, int len,
989 					       int mtu, struct btusb_data *data)
990 {
991 	int i, offset = 0;
992 	unsigned int interval;
993 
994 	BT_DBG("len %d mtu %d", len, mtu);
995 
996 	/* For mSBC ALT 6 setting the host will send the packet at continuous
997 	 * flow. As per core spec 5, vol 4, part B, table 2.1. For ALT setting
998 	 * 6 the HCI PACKET INTERVAL should be 7.5ms for every usb packets.
999 	 * To maintain the rate we send 63bytes of usb packets alternatively for
1000 	 * 7ms and 8ms to maintain the rate as 7.5ms.
1001 	 */
1002 	if (data->usb_alt6_packet_flow) {
1003 		interval = 7;
1004 		data->usb_alt6_packet_flow = false;
1005 	} else {
1006 		interval = 6;
1007 		data->usb_alt6_packet_flow = true;
1008 	}
1009 
1010 	for (i = 0; i < interval; i++) {
1011 		urb->iso_frame_desc[i].offset = offset;
1012 		urb->iso_frame_desc[i].length = offset;
1013 	}
1014 
1015 	if (len && i < BTUSB_MAX_ISOC_FRAMES) {
1016 		urb->iso_frame_desc[i].offset = offset;
1017 		urb->iso_frame_desc[i].length = len;
1018 		i++;
1019 	}
1020 
1021 	urb->number_of_packets = i;
1022 }
1023 
1024 static inline void __fill_isoc_descriptor(struct urb *urb, int len, int mtu)
1025 {
1026 	int i, offset = 0;
1027 
1028 	BT_DBG("len %d mtu %d", len, mtu);
1029 
1030 	for (i = 0; i < BTUSB_MAX_ISOC_FRAMES && len >= mtu;
1031 					i++, offset += mtu, len -= mtu) {
1032 		urb->iso_frame_desc[i].offset = offset;
1033 		urb->iso_frame_desc[i].length = mtu;
1034 	}
1035 
1036 	if (len && i < BTUSB_MAX_ISOC_FRAMES) {
1037 		urb->iso_frame_desc[i].offset = offset;
1038 		urb->iso_frame_desc[i].length = len;
1039 		i++;
1040 	}
1041 
1042 	urb->number_of_packets = i;
1043 }
1044 
1045 static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)
1046 {
1047 	struct btusb_data *data = hci_get_drvdata(hdev);
1048 	struct urb *urb;
1049 	unsigned char *buf;
1050 	unsigned int pipe;
1051 	int err, size;
1052 
1053 	BT_DBG("%s", hdev->name);
1054 
1055 	if (!data->isoc_rx_ep)
1056 		return -ENODEV;
1057 
1058 	urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, mem_flags);
1059 	if (!urb)
1060 		return -ENOMEM;
1061 
1062 	size = le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize) *
1063 						BTUSB_MAX_ISOC_FRAMES;
1064 
1065 	buf = kmalloc(size, mem_flags);
1066 	if (!buf) {
1067 		usb_free_urb(urb);
1068 		return -ENOMEM;
1069 	}
1070 
1071 	pipe = usb_rcvisocpipe(data->udev, data->isoc_rx_ep->bEndpointAddress);
1072 
1073 	usb_fill_int_urb(urb, data->udev, pipe, buf, size, btusb_isoc_complete,
1074 			 hdev, data->isoc_rx_ep->bInterval);
1075 
1076 	urb->transfer_flags = URB_FREE_BUFFER | URB_ISO_ASAP;
1077 
1078 	__fill_isoc_descriptor(urb, size,
1079 			       le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize));
1080 
1081 	usb_anchor_urb(urb, &data->isoc_anchor);
1082 
1083 	err = usb_submit_urb(urb, mem_flags);
1084 	if (err < 0) {
1085 		if (err != -EPERM && err != -ENODEV)
1086 			bt_dev_err(hdev, "urb %p submission failed (%d)",
1087 				   urb, -err);
1088 		usb_unanchor_urb(urb);
1089 	}
1090 
1091 	usb_free_urb(urb);
1092 
1093 	return err;
1094 }
1095 
1096 static void btusb_diag_complete(struct urb *urb)
1097 {
1098 	struct hci_dev *hdev = urb->context;
1099 	struct btusb_data *data = hci_get_drvdata(hdev);
1100 	int err;
1101 
1102 	BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
1103 	       urb->actual_length);
1104 
1105 	if (urb->status == 0) {
1106 		struct sk_buff *skb;
1107 
1108 		skb = bt_skb_alloc(urb->actual_length, GFP_ATOMIC);
1109 		if (skb) {
1110 			skb_put_data(skb, urb->transfer_buffer,
1111 				     urb->actual_length);
1112 			hci_recv_diag(hdev, skb);
1113 		}
1114 	} else if (urb->status == -ENOENT) {
1115 		/* Avoid suspend failed when usb_kill_urb */
1116 		return;
1117 	}
1118 
1119 	if (!test_bit(BTUSB_DIAG_RUNNING, &data->flags))
1120 		return;
1121 
1122 	usb_anchor_urb(urb, &data->diag_anchor);
1123 	usb_mark_last_busy(data->udev);
1124 
1125 	err = usb_submit_urb(urb, GFP_ATOMIC);
1126 	if (err < 0) {
1127 		/* -EPERM: urb is being killed;
1128 		 * -ENODEV: device got disconnected
1129 		 */
1130 		if (err != -EPERM && err != -ENODEV)
1131 			bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
1132 				   urb, -err);
1133 		usb_unanchor_urb(urb);
1134 	}
1135 }
1136 
1137 static int btusb_submit_diag_urb(struct hci_dev *hdev, gfp_t mem_flags)
1138 {
1139 	struct btusb_data *data = hci_get_drvdata(hdev);
1140 	struct urb *urb;
1141 	unsigned char *buf;
1142 	unsigned int pipe;
1143 	int err, size = HCI_MAX_FRAME_SIZE;
1144 
1145 	BT_DBG("%s", hdev->name);
1146 
1147 	if (!data->diag_rx_ep)
1148 		return -ENODEV;
1149 
1150 	urb = usb_alloc_urb(0, mem_flags);
1151 	if (!urb)
1152 		return -ENOMEM;
1153 
1154 	buf = kmalloc(size, mem_flags);
1155 	if (!buf) {
1156 		usb_free_urb(urb);
1157 		return -ENOMEM;
1158 	}
1159 
1160 	pipe = usb_rcvbulkpipe(data->udev, data->diag_rx_ep->bEndpointAddress);
1161 
1162 	usb_fill_bulk_urb(urb, data->udev, pipe, buf, size,
1163 			  btusb_diag_complete, hdev);
1164 
1165 	urb->transfer_flags |= URB_FREE_BUFFER;
1166 
1167 	usb_mark_last_busy(data->udev);
1168 	usb_anchor_urb(urb, &data->diag_anchor);
1169 
1170 	err = usb_submit_urb(urb, mem_flags);
1171 	if (err < 0) {
1172 		if (err != -EPERM && err != -ENODEV)
1173 			bt_dev_err(hdev, "urb %p submission failed (%d)",
1174 				   urb, -err);
1175 		usb_unanchor_urb(urb);
1176 	}
1177 
1178 	usb_free_urb(urb);
1179 
1180 	return err;
1181 }
1182 
1183 static void btusb_tx_complete(struct urb *urb)
1184 {
1185 	struct sk_buff *skb = urb->context;
1186 	struct hci_dev *hdev = (struct hci_dev *)skb->dev;
1187 	struct btusb_data *data = hci_get_drvdata(hdev);
1188 	unsigned long flags;
1189 
1190 	BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
1191 	       urb->actual_length);
1192 
1193 	if (!test_bit(HCI_RUNNING, &hdev->flags))
1194 		goto done;
1195 
1196 	if (!urb->status)
1197 		hdev->stat.byte_tx += urb->transfer_buffer_length;
1198 	else
1199 		hdev->stat.err_tx++;
1200 
1201 done:
1202 	spin_lock_irqsave(&data->txlock, flags);
1203 	data->tx_in_flight--;
1204 	spin_unlock_irqrestore(&data->txlock, flags);
1205 
1206 	kfree(urb->setup_packet);
1207 
1208 	kfree_skb(skb);
1209 }
1210 
1211 static void btusb_isoc_tx_complete(struct urb *urb)
1212 {
1213 	struct sk_buff *skb = urb->context;
1214 	struct hci_dev *hdev = (struct hci_dev *)skb->dev;
1215 
1216 	BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
1217 	       urb->actual_length);
1218 
1219 	if (!test_bit(HCI_RUNNING, &hdev->flags))
1220 		goto done;
1221 
1222 	if (!urb->status)
1223 		hdev->stat.byte_tx += urb->transfer_buffer_length;
1224 	else
1225 		hdev->stat.err_tx++;
1226 
1227 done:
1228 	kfree(urb->setup_packet);
1229 
1230 	kfree_skb(skb);
1231 }
1232 
1233 static int btusb_open(struct hci_dev *hdev)
1234 {
1235 	struct btusb_data *data = hci_get_drvdata(hdev);
1236 	int err;
1237 
1238 	BT_DBG("%s", hdev->name);
1239 
1240 	err = usb_autopm_get_interface(data->intf);
1241 	if (err < 0)
1242 		return err;
1243 
1244 	/* Patching USB firmware files prior to starting any URBs of HCI path
1245 	 * It is more safe to use USB bulk channel for downloading USB patch
1246 	 */
1247 	if (data->setup_on_usb) {
1248 		err = data->setup_on_usb(hdev);
1249 		if (err < 0)
1250 			goto setup_fail;
1251 	}
1252 
1253 	data->intf->needs_remote_wakeup = 1;
1254 
1255 	/* Disable device remote wakeup when host is suspended
1256 	 * For Realtek chips, global suspend without
1257 	 * SET_FEATURE (DEVICE_REMOTE_WAKEUP) can save more power in device.
1258 	 */
1259 	if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags))
1260 		device_wakeup_disable(&data->udev->dev);
1261 
1262 	if (test_and_set_bit(BTUSB_INTR_RUNNING, &data->flags))
1263 		goto done;
1264 
1265 	err = btusb_submit_intr_urb(hdev, GFP_KERNEL);
1266 	if (err < 0)
1267 		goto failed;
1268 
1269 	err = btusb_submit_bulk_urb(hdev, GFP_KERNEL);
1270 	if (err < 0) {
1271 		usb_kill_anchored_urbs(&data->intr_anchor);
1272 		goto failed;
1273 	}
1274 
1275 	set_bit(BTUSB_BULK_RUNNING, &data->flags);
1276 	btusb_submit_bulk_urb(hdev, GFP_KERNEL);
1277 
1278 	if (data->diag) {
1279 		if (!btusb_submit_diag_urb(hdev, GFP_KERNEL))
1280 			set_bit(BTUSB_DIAG_RUNNING, &data->flags);
1281 	}
1282 
1283 done:
1284 	usb_autopm_put_interface(data->intf);
1285 	return 0;
1286 
1287 failed:
1288 	clear_bit(BTUSB_INTR_RUNNING, &data->flags);
1289 setup_fail:
1290 	usb_autopm_put_interface(data->intf);
1291 	return err;
1292 }
1293 
1294 static void btusb_stop_traffic(struct btusb_data *data)
1295 {
1296 	usb_kill_anchored_urbs(&data->intr_anchor);
1297 	usb_kill_anchored_urbs(&data->bulk_anchor);
1298 	usb_kill_anchored_urbs(&data->isoc_anchor);
1299 	usb_kill_anchored_urbs(&data->diag_anchor);
1300 	usb_kill_anchored_urbs(&data->ctrl_anchor);
1301 }
1302 
1303 static int btusb_close(struct hci_dev *hdev)
1304 {
1305 	struct btusb_data *data = hci_get_drvdata(hdev);
1306 	int err;
1307 
1308 	BT_DBG("%s", hdev->name);
1309 
1310 	cancel_work_sync(&data->work);
1311 	cancel_work_sync(&data->waker);
1312 
1313 	clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
1314 	clear_bit(BTUSB_BULK_RUNNING, &data->flags);
1315 	clear_bit(BTUSB_INTR_RUNNING, &data->flags);
1316 	clear_bit(BTUSB_DIAG_RUNNING, &data->flags);
1317 
1318 	btusb_stop_traffic(data);
1319 	btusb_free_frags(data);
1320 
1321 	err = usb_autopm_get_interface(data->intf);
1322 	if (err < 0)
1323 		goto failed;
1324 
1325 	data->intf->needs_remote_wakeup = 0;
1326 
1327 	/* Enable remote wake up for auto-suspend */
1328 	if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags))
1329 		data->intf->needs_remote_wakeup = 1;
1330 
1331 	usb_autopm_put_interface(data->intf);
1332 
1333 failed:
1334 	usb_scuttle_anchored_urbs(&data->deferred);
1335 	return 0;
1336 }
1337 
1338 static int btusb_flush(struct hci_dev *hdev)
1339 {
1340 	struct btusb_data *data = hci_get_drvdata(hdev);
1341 
1342 	BT_DBG("%s", hdev->name);
1343 
1344 	usb_kill_anchored_urbs(&data->tx_anchor);
1345 	btusb_free_frags(data);
1346 
1347 	return 0;
1348 }
1349 
1350 static struct urb *alloc_ctrl_urb(struct hci_dev *hdev, struct sk_buff *skb)
1351 {
1352 	struct btusb_data *data = hci_get_drvdata(hdev);
1353 	struct usb_ctrlrequest *dr;
1354 	struct urb *urb;
1355 	unsigned int pipe;
1356 
1357 	urb = usb_alloc_urb(0, GFP_KERNEL);
1358 	if (!urb)
1359 		return ERR_PTR(-ENOMEM);
1360 
1361 	dr = kmalloc(sizeof(*dr), GFP_KERNEL);
1362 	if (!dr) {
1363 		usb_free_urb(urb);
1364 		return ERR_PTR(-ENOMEM);
1365 	}
1366 
1367 	dr->bRequestType = data->cmdreq_type;
1368 	dr->bRequest     = data->cmdreq;
1369 	dr->wIndex       = 0;
1370 	dr->wValue       = 0;
1371 	dr->wLength      = __cpu_to_le16(skb->len);
1372 
1373 	pipe = usb_sndctrlpipe(data->udev, 0x00);
1374 
1375 	usb_fill_control_urb(urb, data->udev, pipe, (void *)dr,
1376 			     skb->data, skb->len, btusb_tx_complete, skb);
1377 
1378 	skb->dev = (void *)hdev;
1379 
1380 	return urb;
1381 }
1382 
1383 static struct urb *alloc_bulk_urb(struct hci_dev *hdev, struct sk_buff *skb)
1384 {
1385 	struct btusb_data *data = hci_get_drvdata(hdev);
1386 	struct urb *urb;
1387 	unsigned int pipe;
1388 
1389 	if (!data->bulk_tx_ep)
1390 		return ERR_PTR(-ENODEV);
1391 
1392 	urb = usb_alloc_urb(0, GFP_KERNEL);
1393 	if (!urb)
1394 		return ERR_PTR(-ENOMEM);
1395 
1396 	pipe = usb_sndbulkpipe(data->udev, data->bulk_tx_ep->bEndpointAddress);
1397 
1398 	usb_fill_bulk_urb(urb, data->udev, pipe,
1399 			  skb->data, skb->len, btusb_tx_complete, skb);
1400 
1401 	skb->dev = (void *)hdev;
1402 
1403 	return urb;
1404 }
1405 
1406 static struct urb *alloc_isoc_urb(struct hci_dev *hdev, struct sk_buff *skb)
1407 {
1408 	struct btusb_data *data = hci_get_drvdata(hdev);
1409 	struct urb *urb;
1410 	unsigned int pipe;
1411 
1412 	if (!data->isoc_tx_ep)
1413 		return ERR_PTR(-ENODEV);
1414 
1415 	urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, GFP_KERNEL);
1416 	if (!urb)
1417 		return ERR_PTR(-ENOMEM);
1418 
1419 	pipe = usb_sndisocpipe(data->udev, data->isoc_tx_ep->bEndpointAddress);
1420 
1421 	usb_fill_int_urb(urb, data->udev, pipe,
1422 			 skb->data, skb->len, btusb_isoc_tx_complete,
1423 			 skb, data->isoc_tx_ep->bInterval);
1424 
1425 	urb->transfer_flags  = URB_ISO_ASAP;
1426 
1427 	if (data->isoc_altsetting == 6)
1428 		__fill_isoc_descriptor_msbc(urb, skb->len,
1429 					    le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize),
1430 					    data);
1431 	else
1432 		__fill_isoc_descriptor(urb, skb->len,
1433 				       le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize));
1434 	skb->dev = (void *)hdev;
1435 
1436 	return urb;
1437 }
1438 
1439 static int submit_tx_urb(struct hci_dev *hdev, struct urb *urb)
1440 {
1441 	struct btusb_data *data = hci_get_drvdata(hdev);
1442 	int err;
1443 
1444 	usb_anchor_urb(urb, &data->tx_anchor);
1445 
1446 	err = usb_submit_urb(urb, GFP_KERNEL);
1447 	if (err < 0) {
1448 		if (err != -EPERM && err != -ENODEV)
1449 			bt_dev_err(hdev, "urb %p submission failed (%d)",
1450 				   urb, -err);
1451 		kfree(urb->setup_packet);
1452 		usb_unanchor_urb(urb);
1453 	} else {
1454 		usb_mark_last_busy(data->udev);
1455 	}
1456 
1457 	usb_free_urb(urb);
1458 	return err;
1459 }
1460 
1461 static int submit_or_queue_tx_urb(struct hci_dev *hdev, struct urb *urb)
1462 {
1463 	struct btusb_data *data = hci_get_drvdata(hdev);
1464 	unsigned long flags;
1465 	bool suspending;
1466 
1467 	spin_lock_irqsave(&data->txlock, flags);
1468 	suspending = test_bit(BTUSB_SUSPENDING, &data->flags);
1469 	if (!suspending)
1470 		data->tx_in_flight++;
1471 	spin_unlock_irqrestore(&data->txlock, flags);
1472 
1473 	if (!suspending)
1474 		return submit_tx_urb(hdev, urb);
1475 
1476 	usb_anchor_urb(urb, &data->deferred);
1477 	schedule_work(&data->waker);
1478 
1479 	usb_free_urb(urb);
1480 	return 0;
1481 }
1482 
1483 static int btusb_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
1484 {
1485 	struct urb *urb;
1486 
1487 	BT_DBG("%s", hdev->name);
1488 
1489 	switch (hci_skb_pkt_type(skb)) {
1490 	case HCI_COMMAND_PKT:
1491 		urb = alloc_ctrl_urb(hdev, skb);
1492 		if (IS_ERR(urb))
1493 			return PTR_ERR(urb);
1494 
1495 		hdev->stat.cmd_tx++;
1496 		return submit_or_queue_tx_urb(hdev, urb);
1497 
1498 	case HCI_ACLDATA_PKT:
1499 		urb = alloc_bulk_urb(hdev, skb);
1500 		if (IS_ERR(urb))
1501 			return PTR_ERR(urb);
1502 
1503 		hdev->stat.acl_tx++;
1504 		return submit_or_queue_tx_urb(hdev, urb);
1505 
1506 	case HCI_SCODATA_PKT:
1507 		if (hci_conn_num(hdev, SCO_LINK) < 1)
1508 			return -ENODEV;
1509 
1510 		urb = alloc_isoc_urb(hdev, skb);
1511 		if (IS_ERR(urb))
1512 			return PTR_ERR(urb);
1513 
1514 		hdev->stat.sco_tx++;
1515 		return submit_tx_urb(hdev, urb);
1516 	}
1517 
1518 	return -EILSEQ;
1519 }
1520 
1521 static void btusb_notify(struct hci_dev *hdev, unsigned int evt)
1522 {
1523 	struct btusb_data *data = hci_get_drvdata(hdev);
1524 
1525 	BT_DBG("%s evt %d", hdev->name, evt);
1526 
1527 	if (hci_conn_num(hdev, SCO_LINK) != data->sco_num) {
1528 		data->sco_num = hci_conn_num(hdev, SCO_LINK);
1529 		data->air_mode = evt;
1530 		schedule_work(&data->work);
1531 	}
1532 }
1533 
1534 static inline int __set_isoc_interface(struct hci_dev *hdev, int altsetting)
1535 {
1536 	struct btusb_data *data = hci_get_drvdata(hdev);
1537 	struct usb_interface *intf = data->isoc;
1538 	struct usb_endpoint_descriptor *ep_desc;
1539 	int i, err;
1540 
1541 	if (!data->isoc)
1542 		return -ENODEV;
1543 
1544 	err = usb_set_interface(data->udev, data->isoc_ifnum, altsetting);
1545 	if (err < 0) {
1546 		bt_dev_err(hdev, "setting interface failed (%d)", -err);
1547 		return err;
1548 	}
1549 
1550 	data->isoc_altsetting = altsetting;
1551 
1552 	data->isoc_tx_ep = NULL;
1553 	data->isoc_rx_ep = NULL;
1554 
1555 	for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
1556 		ep_desc = &intf->cur_altsetting->endpoint[i].desc;
1557 
1558 		if (!data->isoc_tx_ep && usb_endpoint_is_isoc_out(ep_desc)) {
1559 			data->isoc_tx_ep = ep_desc;
1560 			continue;
1561 		}
1562 
1563 		if (!data->isoc_rx_ep && usb_endpoint_is_isoc_in(ep_desc)) {
1564 			data->isoc_rx_ep = ep_desc;
1565 			continue;
1566 		}
1567 	}
1568 
1569 	if (!data->isoc_tx_ep || !data->isoc_rx_ep) {
1570 		bt_dev_err(hdev, "invalid SCO descriptors");
1571 		return -ENODEV;
1572 	}
1573 
1574 	return 0;
1575 }
1576 
1577 static int btusb_switch_alt_setting(struct hci_dev *hdev, int new_alts)
1578 {
1579 	struct btusb_data *data = hci_get_drvdata(hdev);
1580 	int err;
1581 
1582 	if (data->isoc_altsetting != new_alts) {
1583 		unsigned long flags;
1584 
1585 		clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
1586 		usb_kill_anchored_urbs(&data->isoc_anchor);
1587 
1588 		/* When isochronous alternate setting needs to be
1589 		 * changed, because SCO connection has been added
1590 		 * or removed, a packet fragment may be left in the
1591 		 * reassembling state. This could lead to wrongly
1592 		 * assembled fragments.
1593 		 *
1594 		 * Clear outstanding fragment when selecting a new
1595 		 * alternate setting.
1596 		 */
1597 		spin_lock_irqsave(&data->rxlock, flags);
1598 		kfree_skb(data->sco_skb);
1599 		data->sco_skb = NULL;
1600 		spin_unlock_irqrestore(&data->rxlock, flags);
1601 
1602 		err = __set_isoc_interface(hdev, new_alts);
1603 		if (err < 0)
1604 			return err;
1605 	}
1606 
1607 	if (!test_and_set_bit(BTUSB_ISOC_RUNNING, &data->flags)) {
1608 		if (btusb_submit_isoc_urb(hdev, GFP_KERNEL) < 0)
1609 			clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
1610 		else
1611 			btusb_submit_isoc_urb(hdev, GFP_KERNEL);
1612 	}
1613 
1614 	return 0;
1615 }
1616 
1617 static struct usb_host_interface *btusb_find_altsetting(struct btusb_data *data,
1618 							int alt)
1619 {
1620 	struct usb_interface *intf = data->isoc;
1621 	int i;
1622 
1623 	BT_DBG("Looking for Alt no :%d", alt);
1624 
1625 	if (!intf)
1626 		return NULL;
1627 
1628 	for (i = 0; i < intf->num_altsetting; i++) {
1629 		if (intf->altsetting[i].desc.bAlternateSetting == alt)
1630 			return &intf->altsetting[i];
1631 	}
1632 
1633 	return NULL;
1634 }
1635 
1636 static void btusb_work(struct work_struct *work)
1637 {
1638 	struct btusb_data *data = container_of(work, struct btusb_data, work);
1639 	struct hci_dev *hdev = data->hdev;
1640 	int new_alts = 0;
1641 	int err;
1642 
1643 	if (data->sco_num > 0) {
1644 		if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) {
1645 			err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf);
1646 			if (err < 0) {
1647 				clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
1648 				usb_kill_anchored_urbs(&data->isoc_anchor);
1649 				return;
1650 			}
1651 
1652 			set_bit(BTUSB_DID_ISO_RESUME, &data->flags);
1653 		}
1654 
1655 		if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_CVSD) {
1656 			if (hdev->voice_setting & 0x0020) {
1657 				static const int alts[3] = { 2, 4, 5 };
1658 
1659 				new_alts = alts[data->sco_num - 1];
1660 			} else {
1661 				new_alts = data->sco_num;
1662 			}
1663 		} else if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_TRANSP) {
1664 
1665 			data->usb_alt6_packet_flow = true;
1666 
1667 			/* Check if Alt 6 is supported for Transparent audio */
1668 			if (btusb_find_altsetting(data, 6))
1669 				new_alts = 6;
1670 			else
1671 				bt_dev_err(hdev, "Device does not support ALT setting 6");
1672 		}
1673 
1674 		if (btusb_switch_alt_setting(hdev, new_alts) < 0)
1675 			bt_dev_err(hdev, "set USB alt:(%d) failed!", new_alts);
1676 	} else {
1677 		clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
1678 		usb_kill_anchored_urbs(&data->isoc_anchor);
1679 
1680 		__set_isoc_interface(hdev, 0);
1681 		if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags))
1682 			usb_autopm_put_interface(data->isoc ? data->isoc : data->intf);
1683 	}
1684 }
1685 
1686 static void btusb_waker(struct work_struct *work)
1687 {
1688 	struct btusb_data *data = container_of(work, struct btusb_data, waker);
1689 	int err;
1690 
1691 	err = usb_autopm_get_interface(data->intf);
1692 	if (err < 0)
1693 		return;
1694 
1695 	usb_autopm_put_interface(data->intf);
1696 }
1697 
1698 static int btusb_setup_bcm92035(struct hci_dev *hdev)
1699 {
1700 	struct sk_buff *skb;
1701 	u8 val = 0x00;
1702 
1703 	BT_DBG("%s", hdev->name);
1704 
1705 	skb = __hci_cmd_sync(hdev, 0xfc3b, 1, &val, HCI_INIT_TIMEOUT);
1706 	if (IS_ERR(skb))
1707 		bt_dev_err(hdev, "BCM92035 command failed (%ld)", PTR_ERR(skb));
1708 	else
1709 		kfree_skb(skb);
1710 
1711 	return 0;
1712 }
1713 
1714 static int btusb_setup_csr(struct hci_dev *hdev)
1715 {
1716 	struct hci_rp_read_local_version *rp;
1717 	struct sk_buff *skb;
1718 
1719 	BT_DBG("%s", hdev->name);
1720 
1721 	skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL,
1722 			     HCI_INIT_TIMEOUT);
1723 	if (IS_ERR(skb)) {
1724 		int err = PTR_ERR(skb);
1725 		bt_dev_err(hdev, "CSR: Local version failed (%d)", err);
1726 		return err;
1727 	}
1728 
1729 	if (skb->len != sizeof(struct hci_rp_read_local_version)) {
1730 		bt_dev_err(hdev, "CSR: Local version length mismatch");
1731 		kfree_skb(skb);
1732 		return -EIO;
1733 	}
1734 
1735 	rp = (struct hci_rp_read_local_version *)skb->data;
1736 
1737 	/* Detect controllers which aren't real CSR ones. */
1738 	if (le16_to_cpu(rp->manufacturer) != 10 ||
1739 	    le16_to_cpu(rp->lmp_subver) == 0x0c5c) {
1740 		/* Clear the reset quirk since this is not an actual
1741 		 * early Bluetooth 1.1 device from CSR.
1742 		 */
1743 		clear_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
1744 
1745 		/* These fake CSR controllers have all a broken
1746 		 * stored link key handling and so just disable it.
1747 		 */
1748 		set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
1749 	}
1750 
1751 	kfree_skb(skb);
1752 
1753 	return 0;
1754 }
1755 
1756 static const struct firmware *btusb_setup_intel_get_fw(struct hci_dev *hdev,
1757 						       struct intel_version *ver)
1758 {
1759 	const struct firmware *fw;
1760 	char fwname[64];
1761 	int ret;
1762 
1763 	snprintf(fwname, sizeof(fwname),
1764 		 "intel/ibt-hw-%x.%x.%x-fw-%x.%x.%x.%x.%x.bseq",
1765 		 ver->hw_platform, ver->hw_variant, ver->hw_revision,
1766 		 ver->fw_variant,  ver->fw_revision, ver->fw_build_num,
1767 		 ver->fw_build_ww, ver->fw_build_yy);
1768 
1769 	ret = request_firmware(&fw, fwname, &hdev->dev);
1770 	if (ret < 0) {
1771 		if (ret == -EINVAL) {
1772 			bt_dev_err(hdev, "Intel firmware file request failed (%d)",
1773 				   ret);
1774 			return NULL;
1775 		}
1776 
1777 		bt_dev_err(hdev, "failed to open Intel firmware file: %s (%d)",
1778 			   fwname, ret);
1779 
1780 		/* If the correct firmware patch file is not found, use the
1781 		 * default firmware patch file instead
1782 		 */
1783 		snprintf(fwname, sizeof(fwname), "intel/ibt-hw-%x.%x.bseq",
1784 			 ver->hw_platform, ver->hw_variant);
1785 		if (request_firmware(&fw, fwname, &hdev->dev) < 0) {
1786 			bt_dev_err(hdev, "failed to open default fw file: %s",
1787 				   fwname);
1788 			return NULL;
1789 		}
1790 	}
1791 
1792 	bt_dev_info(hdev, "Intel Bluetooth firmware file: %s", fwname);
1793 
1794 	return fw;
1795 }
1796 
1797 static int btusb_setup_intel_patching(struct hci_dev *hdev,
1798 				      const struct firmware *fw,
1799 				      const u8 **fw_ptr, int *disable_patch)
1800 {
1801 	struct sk_buff *skb;
1802 	struct hci_command_hdr *cmd;
1803 	const u8 *cmd_param;
1804 	struct hci_event_hdr *evt = NULL;
1805 	const u8 *evt_param = NULL;
1806 	int remain = fw->size - (*fw_ptr - fw->data);
1807 
1808 	/* The first byte indicates the types of the patch command or event.
1809 	 * 0x01 means HCI command and 0x02 is HCI event. If the first bytes
1810 	 * in the current firmware buffer doesn't start with 0x01 or
1811 	 * the size of remain buffer is smaller than HCI command header,
1812 	 * the firmware file is corrupted and it should stop the patching
1813 	 * process.
1814 	 */
1815 	if (remain > HCI_COMMAND_HDR_SIZE && *fw_ptr[0] != 0x01) {
1816 		bt_dev_err(hdev, "Intel fw corrupted: invalid cmd read");
1817 		return -EINVAL;
1818 	}
1819 	(*fw_ptr)++;
1820 	remain--;
1821 
1822 	cmd = (struct hci_command_hdr *)(*fw_ptr);
1823 	*fw_ptr += sizeof(*cmd);
1824 	remain -= sizeof(*cmd);
1825 
1826 	/* Ensure that the remain firmware data is long enough than the length
1827 	 * of command parameter. If not, the firmware file is corrupted.
1828 	 */
1829 	if (remain < cmd->plen) {
1830 		bt_dev_err(hdev, "Intel fw corrupted: invalid cmd len");
1831 		return -EFAULT;
1832 	}
1833 
1834 	/* If there is a command that loads a patch in the firmware
1835 	 * file, then enable the patch upon success, otherwise just
1836 	 * disable the manufacturer mode, for example patch activation
1837 	 * is not required when the default firmware patch file is used
1838 	 * because there are no patch data to load.
1839 	 */
1840 	if (*disable_patch && le16_to_cpu(cmd->opcode) == 0xfc8e)
1841 		*disable_patch = 0;
1842 
1843 	cmd_param = *fw_ptr;
1844 	*fw_ptr += cmd->plen;
1845 	remain -= cmd->plen;
1846 
1847 	/* This reads the expected events when the above command is sent to the
1848 	 * device. Some vendor commands expects more than one events, for
1849 	 * example command status event followed by vendor specific event.
1850 	 * For this case, it only keeps the last expected event. so the command
1851 	 * can be sent with __hci_cmd_sync_ev() which returns the sk_buff of
1852 	 * last expected event.
1853 	 */
1854 	while (remain > HCI_EVENT_HDR_SIZE && *fw_ptr[0] == 0x02) {
1855 		(*fw_ptr)++;
1856 		remain--;
1857 
1858 		evt = (struct hci_event_hdr *)(*fw_ptr);
1859 		*fw_ptr += sizeof(*evt);
1860 		remain -= sizeof(*evt);
1861 
1862 		if (remain < evt->plen) {
1863 			bt_dev_err(hdev, "Intel fw corrupted: invalid evt len");
1864 			return -EFAULT;
1865 		}
1866 
1867 		evt_param = *fw_ptr;
1868 		*fw_ptr += evt->plen;
1869 		remain -= evt->plen;
1870 	}
1871 
1872 	/* Every HCI commands in the firmware file has its correspond event.
1873 	 * If event is not found or remain is smaller than zero, the firmware
1874 	 * file is corrupted.
1875 	 */
1876 	if (!evt || !evt_param || remain < 0) {
1877 		bt_dev_err(hdev, "Intel fw corrupted: invalid evt read");
1878 		return -EFAULT;
1879 	}
1880 
1881 	skb = __hci_cmd_sync_ev(hdev, le16_to_cpu(cmd->opcode), cmd->plen,
1882 				cmd_param, evt->evt, HCI_INIT_TIMEOUT);
1883 	if (IS_ERR(skb)) {
1884 		bt_dev_err(hdev, "sending Intel patch command (0x%4.4x) failed (%ld)",
1885 			   cmd->opcode, PTR_ERR(skb));
1886 		return PTR_ERR(skb);
1887 	}
1888 
1889 	/* It ensures that the returned event matches the event data read from
1890 	 * the firmware file. At fist, it checks the length and then
1891 	 * the contents of the event.
1892 	 */
1893 	if (skb->len != evt->plen) {
1894 		bt_dev_err(hdev, "mismatch event length (opcode 0x%4.4x)",
1895 			   le16_to_cpu(cmd->opcode));
1896 		kfree_skb(skb);
1897 		return -EFAULT;
1898 	}
1899 
1900 	if (memcmp(skb->data, evt_param, evt->plen)) {
1901 		bt_dev_err(hdev, "mismatch event parameter (opcode 0x%4.4x)",
1902 			   le16_to_cpu(cmd->opcode));
1903 		kfree_skb(skb);
1904 		return -EFAULT;
1905 	}
1906 	kfree_skb(skb);
1907 
1908 	return 0;
1909 }
1910 
1911 static int btusb_setup_intel(struct hci_dev *hdev)
1912 {
1913 	struct sk_buff *skb;
1914 	const struct firmware *fw;
1915 	const u8 *fw_ptr;
1916 	int disable_patch, err;
1917 	struct intel_version ver;
1918 
1919 	BT_DBG("%s", hdev->name);
1920 
1921 	/* The controller has a bug with the first HCI command sent to it
1922 	 * returning number of completed commands as zero. This would stall the
1923 	 * command processing in the Bluetooth core.
1924 	 *
1925 	 * As a workaround, send HCI Reset command first which will reset the
1926 	 * number of completed commands and allow normal command processing
1927 	 * from now on.
1928 	 */
1929 	skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);
1930 	if (IS_ERR(skb)) {
1931 		bt_dev_err(hdev, "sending initial HCI reset command failed (%ld)",
1932 			   PTR_ERR(skb));
1933 		return PTR_ERR(skb);
1934 	}
1935 	kfree_skb(skb);
1936 
1937 	/* Read Intel specific controller version first to allow selection of
1938 	 * which firmware file to load.
1939 	 *
1940 	 * The returned information are hardware variant and revision plus
1941 	 * firmware variant, revision and build number.
1942 	 */
1943 	err = btintel_read_version(hdev, &ver);
1944 	if (err)
1945 		return err;
1946 
1947 	bt_dev_info(hdev, "read Intel version: %02x%02x%02x%02x%02x%02x%02x%02x%02x",
1948 		    ver.hw_platform, ver.hw_variant, ver.hw_revision,
1949 		    ver.fw_variant,  ver.fw_revision, ver.fw_build_num,
1950 		    ver.fw_build_ww, ver.fw_build_yy, ver.fw_patch_num);
1951 
1952 	/* fw_patch_num indicates the version of patch the device currently
1953 	 * have. If there is no patch data in the device, it is always 0x00.
1954 	 * So, if it is other than 0x00, no need to patch the device again.
1955 	 */
1956 	if (ver.fw_patch_num) {
1957 		bt_dev_info(hdev, "Intel device is already patched. "
1958 			    "patch num: %02x", ver.fw_patch_num);
1959 		goto complete;
1960 	}
1961 
1962 	/* Opens the firmware patch file based on the firmware version read
1963 	 * from the controller. If it fails to open the matching firmware
1964 	 * patch file, it tries to open the default firmware patch file.
1965 	 * If no patch file is found, allow the device to operate without
1966 	 * a patch.
1967 	 */
1968 	fw = btusb_setup_intel_get_fw(hdev, &ver);
1969 	if (!fw)
1970 		goto complete;
1971 	fw_ptr = fw->data;
1972 
1973 	/* Enable the manufacturer mode of the controller.
1974 	 * Only while this mode is enabled, the driver can download the
1975 	 * firmware patch data and configuration parameters.
1976 	 */
1977 	err = btintel_enter_mfg(hdev);
1978 	if (err) {
1979 		release_firmware(fw);
1980 		return err;
1981 	}
1982 
1983 	disable_patch = 1;
1984 
1985 	/* The firmware data file consists of list of Intel specific HCI
1986 	 * commands and its expected events. The first byte indicates the
1987 	 * type of the message, either HCI command or HCI event.
1988 	 *
1989 	 * It reads the command and its expected event from the firmware file,
1990 	 * and send to the controller. Once __hci_cmd_sync_ev() returns,
1991 	 * the returned event is compared with the event read from the firmware
1992 	 * file and it will continue until all the messages are downloaded to
1993 	 * the controller.
1994 	 *
1995 	 * Once the firmware patching is completed successfully,
1996 	 * the manufacturer mode is disabled with reset and activating the
1997 	 * downloaded patch.
1998 	 *
1999 	 * If the firmware patching fails, the manufacturer mode is
2000 	 * disabled with reset and deactivating the patch.
2001 	 *
2002 	 * If the default patch file is used, no reset is done when disabling
2003 	 * the manufacturer.
2004 	 */
2005 	while (fw->size > fw_ptr - fw->data) {
2006 		int ret;
2007 
2008 		ret = btusb_setup_intel_patching(hdev, fw, &fw_ptr,
2009 						 &disable_patch);
2010 		if (ret < 0)
2011 			goto exit_mfg_deactivate;
2012 	}
2013 
2014 	release_firmware(fw);
2015 
2016 	if (disable_patch)
2017 		goto exit_mfg_disable;
2018 
2019 	/* Patching completed successfully and disable the manufacturer mode
2020 	 * with reset and activate the downloaded firmware patches.
2021 	 */
2022 	err = btintel_exit_mfg(hdev, true, true);
2023 	if (err)
2024 		return err;
2025 
2026 	/* Need build number for downloaded fw patches in
2027 	 * every power-on boot
2028 	 */
2029        err = btintel_read_version(hdev, &ver);
2030        if (err)
2031                return err;
2032        bt_dev_info(hdev, "Intel BT fw patch 0x%02x completed & activated",
2033 		   ver.fw_patch_num);
2034 
2035 	goto complete;
2036 
2037 exit_mfg_disable:
2038 	/* Disable the manufacturer mode without reset */
2039 	err = btintel_exit_mfg(hdev, false, false);
2040 	if (err)
2041 		return err;
2042 
2043 	bt_dev_info(hdev, "Intel firmware patch completed");
2044 
2045 	goto complete;
2046 
2047 exit_mfg_deactivate:
2048 	release_firmware(fw);
2049 
2050 	/* Patching failed. Disable the manufacturer mode with reset and
2051 	 * deactivate the downloaded firmware patches.
2052 	 */
2053 	err = btintel_exit_mfg(hdev, true, false);
2054 	if (err)
2055 		return err;
2056 
2057 	bt_dev_info(hdev, "Intel firmware patch completed and deactivated");
2058 
2059 complete:
2060 	/* Set the event mask for Intel specific vendor events. This enables
2061 	 * a few extra events that are useful during general operation.
2062 	 */
2063 	btintel_set_event_mask_mfg(hdev, false);
2064 
2065 	btintel_check_bdaddr(hdev);
2066 	return 0;
2067 }
2068 
2069 static int inject_cmd_complete(struct hci_dev *hdev, __u16 opcode)
2070 {
2071 	struct sk_buff *skb;
2072 	struct hci_event_hdr *hdr;
2073 	struct hci_ev_cmd_complete *evt;
2074 
2075 	skb = bt_skb_alloc(sizeof(*hdr) + sizeof(*evt) + 1, GFP_KERNEL);
2076 	if (!skb)
2077 		return -ENOMEM;
2078 
2079 	hdr = skb_put(skb, sizeof(*hdr));
2080 	hdr->evt = HCI_EV_CMD_COMPLETE;
2081 	hdr->plen = sizeof(*evt) + 1;
2082 
2083 	evt = skb_put(skb, sizeof(*evt));
2084 	evt->ncmd = 0x01;
2085 	evt->opcode = cpu_to_le16(opcode);
2086 
2087 	skb_put_u8(skb, 0x00);
2088 
2089 	hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
2090 
2091 	return hci_recv_frame(hdev, skb);
2092 }
2093 
2094 static int btusb_recv_bulk_intel(struct btusb_data *data, void *buffer,
2095 				 int count)
2096 {
2097 	/* When the device is in bootloader mode, then it can send
2098 	 * events via the bulk endpoint. These events are treated the
2099 	 * same way as the ones received from the interrupt endpoint.
2100 	 */
2101 	if (test_bit(BTUSB_BOOTLOADER, &data->flags))
2102 		return btusb_recv_intr(data, buffer, count);
2103 
2104 	return btusb_recv_bulk(data, buffer, count);
2105 }
2106 
2107 static void btusb_intel_bootup(struct btusb_data *data, const void *ptr,
2108 			       unsigned int len)
2109 {
2110 	const struct intel_bootup *evt = ptr;
2111 
2112 	if (len != sizeof(*evt))
2113 		return;
2114 
2115 	if (test_and_clear_bit(BTUSB_BOOTING, &data->flags))
2116 		wake_up_bit(&data->flags, BTUSB_BOOTING);
2117 }
2118 
2119 static void btusb_intel_secure_send_result(struct btusb_data *data,
2120 					   const void *ptr, unsigned int len)
2121 {
2122 	const struct intel_secure_send_result *evt = ptr;
2123 
2124 	if (len != sizeof(*evt))
2125 		return;
2126 
2127 	if (evt->result)
2128 		set_bit(BTUSB_FIRMWARE_FAILED, &data->flags);
2129 
2130 	if (test_and_clear_bit(BTUSB_DOWNLOADING, &data->flags) &&
2131 	    test_bit(BTUSB_FIRMWARE_LOADED, &data->flags))
2132 		wake_up_bit(&data->flags, BTUSB_DOWNLOADING);
2133 }
2134 
2135 static int btusb_recv_event_intel(struct hci_dev *hdev, struct sk_buff *skb)
2136 {
2137 	struct btusb_data *data = hci_get_drvdata(hdev);
2138 
2139 	if (test_bit(BTUSB_BOOTLOADER, &data->flags)) {
2140 		struct hci_event_hdr *hdr = (void *)skb->data;
2141 
2142 		if (skb->len > HCI_EVENT_HDR_SIZE && hdr->evt == 0xff &&
2143 		    hdr->plen > 0) {
2144 			const void *ptr = skb->data + HCI_EVENT_HDR_SIZE + 1;
2145 			unsigned int len = skb->len - HCI_EVENT_HDR_SIZE - 1;
2146 
2147 			switch (skb->data[2]) {
2148 			case 0x02:
2149 				/* When switching to the operational firmware
2150 				 * the device sends a vendor specific event
2151 				 * indicating that the bootup completed.
2152 				 */
2153 				btusb_intel_bootup(data, ptr, len);
2154 				break;
2155 			case 0x06:
2156 				/* When the firmware loading completes the
2157 				 * device sends out a vendor specific event
2158 				 * indicating the result of the firmware
2159 				 * loading.
2160 				 */
2161 				btusb_intel_secure_send_result(data, ptr, len);
2162 				break;
2163 			}
2164 		}
2165 	}
2166 
2167 	return hci_recv_frame(hdev, skb);
2168 }
2169 
2170 static int btusb_send_frame_intel(struct hci_dev *hdev, struct sk_buff *skb)
2171 {
2172 	struct btusb_data *data = hci_get_drvdata(hdev);
2173 	struct urb *urb;
2174 
2175 	BT_DBG("%s", hdev->name);
2176 
2177 	switch (hci_skb_pkt_type(skb)) {
2178 	case HCI_COMMAND_PKT:
2179 		if (test_bit(BTUSB_BOOTLOADER, &data->flags)) {
2180 			struct hci_command_hdr *cmd = (void *)skb->data;
2181 			__u16 opcode = le16_to_cpu(cmd->opcode);
2182 
2183 			/* When in bootloader mode and the command 0xfc09
2184 			 * is received, it needs to be send down the
2185 			 * bulk endpoint. So allocate a bulk URB instead.
2186 			 */
2187 			if (opcode == 0xfc09)
2188 				urb = alloc_bulk_urb(hdev, skb);
2189 			else
2190 				urb = alloc_ctrl_urb(hdev, skb);
2191 
2192 			/* When the 0xfc01 command is issued to boot into
2193 			 * the operational firmware, it will actually not
2194 			 * send a command complete event. To keep the flow
2195 			 * control working inject that event here.
2196 			 */
2197 			if (opcode == 0xfc01)
2198 				inject_cmd_complete(hdev, opcode);
2199 		} else {
2200 			urb = alloc_ctrl_urb(hdev, skb);
2201 		}
2202 		if (IS_ERR(urb))
2203 			return PTR_ERR(urb);
2204 
2205 		hdev->stat.cmd_tx++;
2206 		return submit_or_queue_tx_urb(hdev, urb);
2207 
2208 	case HCI_ACLDATA_PKT:
2209 		urb = alloc_bulk_urb(hdev, skb);
2210 		if (IS_ERR(urb))
2211 			return PTR_ERR(urb);
2212 
2213 		hdev->stat.acl_tx++;
2214 		return submit_or_queue_tx_urb(hdev, urb);
2215 
2216 	case HCI_SCODATA_PKT:
2217 		if (hci_conn_num(hdev, SCO_LINK) < 1)
2218 			return -ENODEV;
2219 
2220 		urb = alloc_isoc_urb(hdev, skb);
2221 		if (IS_ERR(urb))
2222 			return PTR_ERR(urb);
2223 
2224 		hdev->stat.sco_tx++;
2225 		return submit_tx_urb(hdev, urb);
2226 	}
2227 
2228 	return -EILSEQ;
2229 }
2230 
2231 static bool btusb_setup_intel_new_get_fw_name(struct intel_version *ver,
2232 					     struct intel_boot_params *params,
2233 					     char *fw_name, size_t len,
2234 					     const char *suffix)
2235 {
2236 	switch (ver->hw_variant) {
2237 	case 0x0b:	/* SfP */
2238 	case 0x0c:	/* WsP */
2239 		snprintf(fw_name, len, "intel/ibt-%u-%u.%s",
2240 			le16_to_cpu(ver->hw_variant),
2241 			le16_to_cpu(params->dev_revid),
2242 			suffix);
2243 		break;
2244 	case 0x11:	/* JfP */
2245 	case 0x12:	/* ThP */
2246 	case 0x13:	/* HrP */
2247 	case 0x14:	/* CcP */
2248 		snprintf(fw_name, len, "intel/ibt-%u-%u-%u.%s",
2249 			le16_to_cpu(ver->hw_variant),
2250 			le16_to_cpu(ver->hw_revision),
2251 			le16_to_cpu(ver->fw_revision),
2252 			suffix);
2253 		break;
2254 	default:
2255 		return false;
2256 	}
2257 	return true;
2258 }
2259 
2260 static int btusb_setup_intel_new(struct hci_dev *hdev)
2261 {
2262 	struct btusb_data *data = hci_get_drvdata(hdev);
2263 	struct intel_version ver;
2264 	struct intel_boot_params params;
2265 	const struct firmware *fw;
2266 	u32 boot_param;
2267 	char fwname[64];
2268 	ktime_t calltime, delta, rettime;
2269 	unsigned long long duration;
2270 	int err;
2271 
2272 	BT_DBG("%s", hdev->name);
2273 
2274 	/* Set the default boot parameter to 0x0 and it is updated to
2275 	 * SKU specific boot parameter after reading Intel_Write_Boot_Params
2276 	 * command while downloading the firmware.
2277 	 */
2278 	boot_param = 0x00000000;
2279 
2280 	calltime = ktime_get();
2281 
2282 	/* Read the Intel version information to determine if the device
2283 	 * is in bootloader mode or if it already has operational firmware
2284 	 * loaded.
2285 	 */
2286 	err = btintel_read_version(hdev, &ver);
2287 	if (err) {
2288 		bt_dev_err(hdev, "Intel Read version failed (%d)", err);
2289 		btintel_reset_to_bootloader(hdev);
2290 		return err;
2291 	}
2292 
2293 	/* The hardware platform number has a fixed value of 0x37 and
2294 	 * for now only accept this single value.
2295 	 */
2296 	if (ver.hw_platform != 0x37) {
2297 		bt_dev_err(hdev, "Unsupported Intel hardware platform (%u)",
2298 			   ver.hw_platform);
2299 		return -EINVAL;
2300 	}
2301 
2302 	/* Check for supported iBT hardware variants of this firmware
2303 	 * loading method.
2304 	 *
2305 	 * This check has been put in place to ensure correct forward
2306 	 * compatibility options when newer hardware variants come along.
2307 	 */
2308 	switch (ver.hw_variant) {
2309 	case 0x0b:	/* SfP */
2310 	case 0x0c:	/* WsP */
2311 	case 0x11:	/* JfP */
2312 	case 0x12:	/* ThP */
2313 	case 0x13:	/* HrP */
2314 	case 0x14:	/* CcP */
2315 		break;
2316 	default:
2317 		bt_dev_err(hdev, "Unsupported Intel hardware variant (%u)",
2318 			   ver.hw_variant);
2319 		return -EINVAL;
2320 	}
2321 
2322 	btintel_version_info(hdev, &ver);
2323 
2324 	/* The firmware variant determines if the device is in bootloader
2325 	 * mode or is running operational firmware. The value 0x06 identifies
2326 	 * the bootloader and the value 0x23 identifies the operational
2327 	 * firmware.
2328 	 *
2329 	 * When the operational firmware is already present, then only
2330 	 * the check for valid Bluetooth device address is needed. This
2331 	 * determines if the device will be added as configured or
2332 	 * unconfigured controller.
2333 	 *
2334 	 * It is not possible to use the Secure Boot Parameters in this
2335 	 * case since that command is only available in bootloader mode.
2336 	 */
2337 	if (ver.fw_variant == 0x23) {
2338 		clear_bit(BTUSB_BOOTLOADER, &data->flags);
2339 		btintel_check_bdaddr(hdev);
2340 		goto finish;
2341 	}
2342 
2343 	/* If the device is not in bootloader mode, then the only possible
2344 	 * choice is to return an error and abort the device initialization.
2345 	 */
2346 	if (ver.fw_variant != 0x06) {
2347 		bt_dev_err(hdev, "Unsupported Intel firmware variant (%u)",
2348 			   ver.fw_variant);
2349 		return -ENODEV;
2350 	}
2351 
2352 	/* Read the secure boot parameters to identify the operating
2353 	 * details of the bootloader.
2354 	 */
2355 	err = btintel_read_boot_params(hdev, &params);
2356 	if (err)
2357 		return err;
2358 
2359 	/* It is required that every single firmware fragment is acknowledged
2360 	 * with a command complete event. If the boot parameters indicate
2361 	 * that this bootloader does not send them, then abort the setup.
2362 	 */
2363 	if (params.limited_cce != 0x00) {
2364 		bt_dev_err(hdev, "Unsupported Intel firmware loading method (%u)",
2365 			   params.limited_cce);
2366 		return -EINVAL;
2367 	}
2368 
2369 	/* If the OTP has no valid Bluetooth device address, then there will
2370 	 * also be no valid address for the operational firmware.
2371 	 */
2372 	if (!bacmp(&params.otp_bdaddr, BDADDR_ANY)) {
2373 		bt_dev_info(hdev, "No device address configured");
2374 		set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks);
2375 	}
2376 
2377 	/* With this Intel bootloader only the hardware variant and device
2378 	 * revision information are used to select the right firmware for SfP
2379 	 * and WsP.
2380 	 *
2381 	 * The firmware filename is ibt-<hw_variant>-<dev_revid>.sfi.
2382 	 *
2383 	 * Currently the supported hardware variants are:
2384 	 *   11 (0x0b) for iBT3.0 (LnP/SfP)
2385 	 *   12 (0x0c) for iBT3.5 (WsP)
2386 	 *
2387 	 * For ThP/JfP and for future SKU's, the FW name varies based on HW
2388 	 * variant, HW revision and FW revision, as these are dependent on CNVi
2389 	 * and RF Combination.
2390 	 *
2391 	 *   17 (0x11) for iBT3.5 (JfP)
2392 	 *   18 (0x12) for iBT3.5 (ThP)
2393 	 *
2394 	 * The firmware file name for these will be
2395 	 * ibt-<hw_variant>-<hw_revision>-<fw_revision>.sfi.
2396 	 *
2397 	 */
2398 	err = btusb_setup_intel_new_get_fw_name(&ver, &params, fwname,
2399 						sizeof(fwname), "sfi");
2400 	if (!err) {
2401 		bt_dev_err(hdev, "Unsupported Intel firmware naming");
2402 		return -EINVAL;
2403 	}
2404 
2405 	err = request_firmware(&fw, fwname, &hdev->dev);
2406 	if (err < 0) {
2407 		bt_dev_err(hdev, "Failed to load Intel firmware file (%d)", err);
2408 		return err;
2409 	}
2410 
2411 	bt_dev_info(hdev, "Found device firmware: %s", fwname);
2412 
2413 	/* Save the DDC file name for later use to apply once the firmware
2414 	 * downloading is done.
2415 	 */
2416 	err = btusb_setup_intel_new_get_fw_name(&ver, &params, fwname,
2417 						sizeof(fwname), "ddc");
2418 	if (!err) {
2419 		bt_dev_err(hdev, "Unsupported Intel firmware naming");
2420 		return -EINVAL;
2421 	}
2422 
2423 	if (fw->size < 644) {
2424 		bt_dev_err(hdev, "Invalid size of firmware file (%zu)",
2425 			   fw->size);
2426 		err = -EBADF;
2427 		goto done;
2428 	}
2429 
2430 	set_bit(BTUSB_DOWNLOADING, &data->flags);
2431 
2432 	/* Start firmware downloading and get boot parameter */
2433 	err = btintel_download_firmware(hdev, fw, &boot_param);
2434 	if (err < 0) {
2435 		/* When FW download fails, send Intel Reset to retry
2436 		 * FW download.
2437 		 */
2438 		btintel_reset_to_bootloader(hdev);
2439 		goto done;
2440 	}
2441 	set_bit(BTUSB_FIRMWARE_LOADED, &data->flags);
2442 
2443 	bt_dev_info(hdev, "Waiting for firmware download to complete");
2444 
2445 	/* Before switching the device into operational mode and with that
2446 	 * booting the loaded firmware, wait for the bootloader notification
2447 	 * that all fragments have been successfully received.
2448 	 *
2449 	 * When the event processing receives the notification, then the
2450 	 * BTUSB_DOWNLOADING flag will be cleared.
2451 	 *
2452 	 * The firmware loading should not take longer than 5 seconds
2453 	 * and thus just timeout if that happens and fail the setup
2454 	 * of this device.
2455 	 */
2456 	err = wait_on_bit_timeout(&data->flags, BTUSB_DOWNLOADING,
2457 				  TASK_INTERRUPTIBLE,
2458 				  msecs_to_jiffies(5000));
2459 	if (err == -EINTR) {
2460 		bt_dev_err(hdev, "Firmware loading interrupted");
2461 		goto done;
2462 	}
2463 
2464 	if (err) {
2465 		bt_dev_err(hdev, "Firmware loading timeout");
2466 		err = -ETIMEDOUT;
2467 		btintel_reset_to_bootloader(hdev);
2468 		goto done;
2469 	}
2470 
2471 	if (test_bit(BTUSB_FIRMWARE_FAILED, &data->flags)) {
2472 		bt_dev_err(hdev, "Firmware loading failed");
2473 		err = -ENOEXEC;
2474 		goto done;
2475 	}
2476 
2477 	rettime = ktime_get();
2478 	delta = ktime_sub(rettime, calltime);
2479 	duration = (unsigned long long) ktime_to_ns(delta) >> 10;
2480 
2481 	bt_dev_info(hdev, "Firmware loaded in %llu usecs", duration);
2482 
2483 done:
2484 	release_firmware(fw);
2485 
2486 	if (err < 0)
2487 		return err;
2488 
2489 	calltime = ktime_get();
2490 
2491 	set_bit(BTUSB_BOOTING, &data->flags);
2492 
2493 	err = btintel_send_intel_reset(hdev, boot_param);
2494 	if (err) {
2495 		bt_dev_err(hdev, "Intel Soft Reset failed (%d)", err);
2496 		btintel_reset_to_bootloader(hdev);
2497 		return err;
2498 	}
2499 
2500 	/* The bootloader will not indicate when the device is ready. This
2501 	 * is done by the operational firmware sending bootup notification.
2502 	 *
2503 	 * Booting into operational firmware should not take longer than
2504 	 * 1 second. However if that happens, then just fail the setup
2505 	 * since something went wrong.
2506 	 */
2507 	bt_dev_info(hdev, "Waiting for device to boot");
2508 
2509 	err = wait_on_bit_timeout(&data->flags, BTUSB_BOOTING,
2510 				  TASK_INTERRUPTIBLE,
2511 				  msecs_to_jiffies(1000));
2512 
2513 	if (err == -EINTR) {
2514 		bt_dev_err(hdev, "Device boot interrupted");
2515 		return -EINTR;
2516 	}
2517 
2518 	if (err) {
2519 		bt_dev_err(hdev, "Device boot timeout");
2520 		btintel_reset_to_bootloader(hdev);
2521 		return -ETIMEDOUT;
2522 	}
2523 
2524 	rettime = ktime_get();
2525 	delta = ktime_sub(rettime, calltime);
2526 	duration = (unsigned long long) ktime_to_ns(delta) >> 10;
2527 
2528 	bt_dev_info(hdev, "Device booted in %llu usecs", duration);
2529 
2530 	clear_bit(BTUSB_BOOTLOADER, &data->flags);
2531 
2532 	/* Once the device is running in operational mode, it needs to apply
2533 	 * the device configuration (DDC) parameters.
2534 	 *
2535 	 * The device can work without DDC parameters, so even if it fails
2536 	 * to load the file, no need to fail the setup.
2537 	 */
2538 	btintel_load_ddc_config(hdev, fwname);
2539 
2540 	/* Read the Intel version information after loading the FW  */
2541 	err = btintel_read_version(hdev, &ver);
2542 	if (err)
2543 		return err;
2544 
2545 	btintel_version_info(hdev, &ver);
2546 
2547 finish:
2548 	/* All Intel controllers that support the Microsoft vendor
2549 	 * extension are using 0xFC1E for VsMsftOpCode.
2550 	 */
2551 	switch (ver.hw_variant) {
2552 	case 0x12:	/* ThP */
2553 		hci_set_msft_opcode(hdev, 0xFC1E);
2554 		break;
2555 	}
2556 
2557 	/* Set the event mask for Intel specific vendor events. This enables
2558 	 * a few extra events that are useful during general operation. It
2559 	 * does not enable any debugging related events.
2560 	 *
2561 	 * The device will function correctly without these events enabled
2562 	 * and thus no need to fail the setup.
2563 	 */
2564 	btintel_set_event_mask(hdev, false);
2565 
2566 	return 0;
2567 }
2568 
2569 static int btusb_shutdown_intel(struct hci_dev *hdev)
2570 {
2571 	struct sk_buff *skb;
2572 	long ret;
2573 
2574 	/* In the shutdown sequence where Bluetooth is turned off followed
2575 	 * by WiFi being turned off, turning WiFi back on causes issue with
2576 	 * the RF calibration.
2577 	 *
2578 	 * To ensure that any RF activity has been stopped, issue HCI Reset
2579 	 * command to clear all ongoing activity including advertising,
2580 	 * scanning etc.
2581 	 */
2582 	skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);
2583 	if (IS_ERR(skb)) {
2584 		ret = PTR_ERR(skb);
2585 		bt_dev_err(hdev, "HCI reset during shutdown failed");
2586 		return ret;
2587 	}
2588 	kfree_skb(skb);
2589 
2590 	/* Some platforms have an issue with BT LED when the interface is
2591 	 * down or BT radio is turned off, which takes 5 seconds to BT LED
2592 	 * goes off. This command turns off the BT LED immediately.
2593 	 */
2594 	skb = __hci_cmd_sync(hdev, 0xfc3f, 0, NULL, HCI_INIT_TIMEOUT);
2595 	if (IS_ERR(skb)) {
2596 		ret = PTR_ERR(skb);
2597 		bt_dev_err(hdev, "turning off Intel device LED failed");
2598 		return ret;
2599 	}
2600 	kfree_skb(skb);
2601 
2602 	return 0;
2603 }
2604 
2605 static int btusb_shutdown_intel_new(struct hci_dev *hdev)
2606 {
2607 	struct sk_buff *skb;
2608 
2609 	/* Send HCI Reset to the controller to stop any BT activity which
2610 	 * were triggered. This will help to save power and maintain the
2611 	 * sync b/w Host and controller
2612 	 */
2613 	skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);
2614 	if (IS_ERR(skb)) {
2615 		bt_dev_err(hdev, "HCI reset during shutdown failed");
2616 		return PTR_ERR(skb);
2617 	}
2618 	kfree_skb(skb);
2619 
2620 	return 0;
2621 }
2622 
2623 #define FIRMWARE_MT7663		"mediatek/mt7663pr2h.bin"
2624 #define FIRMWARE_MT7668		"mediatek/mt7668pr2h.bin"
2625 
2626 #define HCI_WMT_MAX_EVENT_SIZE		64
2627 
2628 enum {
2629 	BTMTK_WMT_PATCH_DWNLD = 0x1,
2630 	BTMTK_WMT_FUNC_CTRL = 0x6,
2631 	BTMTK_WMT_RST = 0x7,
2632 	BTMTK_WMT_SEMAPHORE = 0x17,
2633 };
2634 
2635 enum {
2636 	BTMTK_WMT_INVALID,
2637 	BTMTK_WMT_PATCH_UNDONE,
2638 	BTMTK_WMT_PATCH_DONE,
2639 	BTMTK_WMT_ON_UNDONE,
2640 	BTMTK_WMT_ON_DONE,
2641 	BTMTK_WMT_ON_PROGRESS,
2642 };
2643 
2644 struct btmtk_wmt_hdr {
2645 	u8	dir;
2646 	u8	op;
2647 	__le16	dlen;
2648 	u8	flag;
2649 } __packed;
2650 
2651 struct btmtk_hci_wmt_cmd {
2652 	struct btmtk_wmt_hdr hdr;
2653 	u8 data[256];
2654 } __packed;
2655 
2656 struct btmtk_hci_wmt_evt {
2657 	struct hci_event_hdr hhdr;
2658 	struct btmtk_wmt_hdr whdr;
2659 } __packed;
2660 
2661 struct btmtk_hci_wmt_evt_funcc {
2662 	struct btmtk_hci_wmt_evt hwhdr;
2663 	__be16 status;
2664 } __packed;
2665 
2666 struct btmtk_tci_sleep {
2667 	u8 mode;
2668 	__le16 duration;
2669 	__le16 host_duration;
2670 	u8 host_wakeup_pin;
2671 	u8 time_compensation;
2672 } __packed;
2673 
2674 struct btmtk_hci_wmt_params {
2675 	u8 op;
2676 	u8 flag;
2677 	u16 dlen;
2678 	const void *data;
2679 	u32 *status;
2680 };
2681 
2682 static void btusb_mtk_wmt_recv(struct urb *urb)
2683 {
2684 	struct hci_dev *hdev = urb->context;
2685 	struct btusb_data *data = hci_get_drvdata(hdev);
2686 	struct hci_event_hdr *hdr;
2687 	struct sk_buff *skb;
2688 	int err;
2689 
2690 	if (urb->status == 0 && urb->actual_length > 0) {
2691 		hdev->stat.byte_rx += urb->actual_length;
2692 
2693 		/* WMT event shouldn't be fragmented and the size should be
2694 		 * less than HCI_WMT_MAX_EVENT_SIZE.
2695 		 */
2696 		skb = bt_skb_alloc(HCI_WMT_MAX_EVENT_SIZE, GFP_ATOMIC);
2697 		if (!skb) {
2698 			hdev->stat.err_rx++;
2699 			goto err_out;
2700 		}
2701 
2702 		hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
2703 		skb_put_data(skb, urb->transfer_buffer, urb->actual_length);
2704 
2705 		hdr = (void *)skb->data;
2706 		/* Fix up the vendor event id with 0xff for vendor specific
2707 		 * instead of 0xe4 so that event send via monitoring socket can
2708 		 * be parsed properly.
2709 		 */
2710 		hdr->evt = 0xff;
2711 
2712 		/* When someone waits for the WMT event, the skb is being cloned
2713 		 * and being processed the events from there then.
2714 		 */
2715 		if (test_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags)) {
2716 			data->evt_skb = skb_clone(skb, GFP_ATOMIC);
2717 			if (!data->evt_skb)
2718 				goto err_out;
2719 		}
2720 
2721 		err = hci_recv_frame(hdev, skb);
2722 		if (err < 0)
2723 			goto err_free_skb;
2724 
2725 		if (test_and_clear_bit(BTUSB_TX_WAIT_VND_EVT,
2726 				       &data->flags)) {
2727 			/* Barrier to sync with other CPUs */
2728 			smp_mb__after_atomic();
2729 			wake_up_bit(&data->flags,
2730 				    BTUSB_TX_WAIT_VND_EVT);
2731 		}
2732 err_out:
2733 		return;
2734 err_free_skb:
2735 		kfree_skb(data->evt_skb);
2736 		data->evt_skb = NULL;
2737 		return;
2738 	} else if (urb->status == -ENOENT) {
2739 		/* Avoid suspend failed when usb_kill_urb */
2740 		return;
2741 	}
2742 
2743 	usb_mark_last_busy(data->udev);
2744 
2745 	/* The URB complete handler is still called with urb->actual_length = 0
2746 	 * when the event is not available, so we should keep re-submitting
2747 	 * URB until WMT event returns, Also, It's necessary to wait some time
2748 	 * between the two consecutive control URBs to relax the target device
2749 	 * to generate the event. Otherwise, the WMT event cannot return from
2750 	 * the device successfully.
2751 	 */
2752 	udelay(100);
2753 
2754 	usb_anchor_urb(urb, &data->ctrl_anchor);
2755 	err = usb_submit_urb(urb, GFP_ATOMIC);
2756 	if (err < 0) {
2757 		/* -EPERM: urb is being killed;
2758 		 * -ENODEV: device got disconnected
2759 		 */
2760 		if (err != -EPERM && err != -ENODEV)
2761 			bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
2762 				   urb, -err);
2763 		usb_unanchor_urb(urb);
2764 	}
2765 }
2766 
2767 static int btusb_mtk_submit_wmt_recv_urb(struct hci_dev *hdev)
2768 {
2769 	struct btusb_data *data = hci_get_drvdata(hdev);
2770 	struct usb_ctrlrequest *dr;
2771 	unsigned char *buf;
2772 	int err, size = 64;
2773 	unsigned int pipe;
2774 	struct urb *urb;
2775 
2776 	urb = usb_alloc_urb(0, GFP_KERNEL);
2777 	if (!urb)
2778 		return -ENOMEM;
2779 
2780 	dr = kmalloc(sizeof(*dr), GFP_KERNEL);
2781 	if (!dr) {
2782 		usb_free_urb(urb);
2783 		return -ENOMEM;
2784 	}
2785 
2786 	dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_IN;
2787 	dr->bRequest     = 1;
2788 	dr->wIndex       = cpu_to_le16(0);
2789 	dr->wValue       = cpu_to_le16(48);
2790 	dr->wLength      = cpu_to_le16(size);
2791 
2792 	buf = kmalloc(size, GFP_KERNEL);
2793 	if (!buf) {
2794 		kfree(dr);
2795 		return -ENOMEM;
2796 	}
2797 
2798 	pipe = usb_rcvctrlpipe(data->udev, 0);
2799 
2800 	usb_fill_control_urb(urb, data->udev, pipe, (void *)dr,
2801 			     buf, size, btusb_mtk_wmt_recv, hdev);
2802 
2803 	urb->transfer_flags |= URB_FREE_BUFFER;
2804 
2805 	usb_anchor_urb(urb, &data->ctrl_anchor);
2806 	err = usb_submit_urb(urb, GFP_KERNEL);
2807 	if (err < 0) {
2808 		if (err != -EPERM && err != -ENODEV)
2809 			bt_dev_err(hdev, "urb %p submission failed (%d)",
2810 				   urb, -err);
2811 		usb_unanchor_urb(urb);
2812 	}
2813 
2814 	usb_free_urb(urb);
2815 
2816 	return err;
2817 }
2818 
2819 static int btusb_mtk_hci_wmt_sync(struct hci_dev *hdev,
2820 				  struct btmtk_hci_wmt_params *wmt_params)
2821 {
2822 	struct btusb_data *data = hci_get_drvdata(hdev);
2823 	struct btmtk_hci_wmt_evt_funcc *wmt_evt_funcc;
2824 	u32 hlen, status = BTMTK_WMT_INVALID;
2825 	struct btmtk_hci_wmt_evt *wmt_evt;
2826 	struct btmtk_hci_wmt_cmd wc;
2827 	struct btmtk_wmt_hdr *hdr;
2828 	int err;
2829 
2830 	/* Submit control IN URB on demand to process the WMT event */
2831 	err = btusb_mtk_submit_wmt_recv_urb(hdev);
2832 	if (err < 0)
2833 		return err;
2834 
2835 	/* Send the WMT command and wait until the WMT event returns */
2836 	hlen = sizeof(*hdr) + wmt_params->dlen;
2837 	if (hlen > 255)
2838 		return -EINVAL;
2839 
2840 	hdr = (struct btmtk_wmt_hdr *)&wc;
2841 	hdr->dir = 1;
2842 	hdr->op = wmt_params->op;
2843 	hdr->dlen = cpu_to_le16(wmt_params->dlen + 1);
2844 	hdr->flag = wmt_params->flag;
2845 	memcpy(wc.data, wmt_params->data, wmt_params->dlen);
2846 
2847 	set_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
2848 
2849 	err = __hci_cmd_send(hdev, 0xfc6f, hlen, &wc);
2850 
2851 	if (err < 0) {
2852 		clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
2853 		return err;
2854 	}
2855 
2856 	/* The vendor specific WMT commands are all answered by a vendor
2857 	 * specific event and will have the Command Status or Command
2858 	 * Complete as with usual HCI command flow control.
2859 	 *
2860 	 * After sending the command, wait for BTUSB_TX_WAIT_VND_EVT
2861 	 * state to be cleared. The driver specific event receive routine
2862 	 * will clear that state and with that indicate completion of the
2863 	 * WMT command.
2864 	 */
2865 	err = wait_on_bit_timeout(&data->flags, BTUSB_TX_WAIT_VND_EVT,
2866 				  TASK_INTERRUPTIBLE, HCI_INIT_TIMEOUT);
2867 	if (err == -EINTR) {
2868 		bt_dev_err(hdev, "Execution of wmt command interrupted");
2869 		clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
2870 		return err;
2871 	}
2872 
2873 	if (err) {
2874 		bt_dev_err(hdev, "Execution of wmt command timed out");
2875 		clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
2876 		return -ETIMEDOUT;
2877 	}
2878 
2879 	/* Parse and handle the return WMT event */
2880 	wmt_evt = (struct btmtk_hci_wmt_evt *)data->evt_skb->data;
2881 	if (wmt_evt->whdr.op != hdr->op) {
2882 		bt_dev_err(hdev, "Wrong op received %d expected %d",
2883 			   wmt_evt->whdr.op, hdr->op);
2884 		err = -EIO;
2885 		goto err_free_skb;
2886 	}
2887 
2888 	switch (wmt_evt->whdr.op) {
2889 	case BTMTK_WMT_SEMAPHORE:
2890 		if (wmt_evt->whdr.flag == 2)
2891 			status = BTMTK_WMT_PATCH_UNDONE;
2892 		else
2893 			status = BTMTK_WMT_PATCH_DONE;
2894 		break;
2895 	case BTMTK_WMT_FUNC_CTRL:
2896 		wmt_evt_funcc = (struct btmtk_hci_wmt_evt_funcc *)wmt_evt;
2897 		if (be16_to_cpu(wmt_evt_funcc->status) == 0x404)
2898 			status = BTMTK_WMT_ON_DONE;
2899 		else if (be16_to_cpu(wmt_evt_funcc->status) == 0x420)
2900 			status = BTMTK_WMT_ON_PROGRESS;
2901 		else
2902 			status = BTMTK_WMT_ON_UNDONE;
2903 		break;
2904 	}
2905 
2906 	if (wmt_params->status)
2907 		*wmt_params->status = status;
2908 
2909 err_free_skb:
2910 	kfree_skb(data->evt_skb);
2911 	data->evt_skb = NULL;
2912 
2913 	return err;
2914 }
2915 
2916 static int btusb_mtk_setup_firmware(struct hci_dev *hdev, const char *fwname)
2917 {
2918 	struct btmtk_hci_wmt_params wmt_params;
2919 	const struct firmware *fw;
2920 	const u8 *fw_ptr;
2921 	size_t fw_size;
2922 	int err, dlen;
2923 	u8 flag;
2924 
2925 	err = request_firmware(&fw, fwname, &hdev->dev);
2926 	if (err < 0) {
2927 		bt_dev_err(hdev, "Failed to load firmware file (%d)", err);
2928 		return err;
2929 	}
2930 
2931 	fw_ptr = fw->data;
2932 	fw_size = fw->size;
2933 
2934 	/* The size of patch header is 30 bytes, should be skip */
2935 	if (fw_size < 30) {
2936 		err = -EINVAL;
2937 		goto err_release_fw;
2938 	}
2939 
2940 	fw_size -= 30;
2941 	fw_ptr += 30;
2942 	flag = 1;
2943 
2944 	wmt_params.op = BTMTK_WMT_PATCH_DWNLD;
2945 	wmt_params.status = NULL;
2946 
2947 	while (fw_size > 0) {
2948 		dlen = min_t(int, 250, fw_size);
2949 
2950 		/* Tell deivice the position in sequence */
2951 		if (fw_size - dlen <= 0)
2952 			flag = 3;
2953 		else if (fw_size < fw->size - 30)
2954 			flag = 2;
2955 
2956 		wmt_params.flag = flag;
2957 		wmt_params.dlen = dlen;
2958 		wmt_params.data = fw_ptr;
2959 
2960 		err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
2961 		if (err < 0) {
2962 			bt_dev_err(hdev, "Failed to send wmt patch dwnld (%d)",
2963 				   err);
2964 			goto err_release_fw;
2965 		}
2966 
2967 		fw_size -= dlen;
2968 		fw_ptr += dlen;
2969 	}
2970 
2971 	wmt_params.op = BTMTK_WMT_RST;
2972 	wmt_params.flag = 4;
2973 	wmt_params.dlen = 0;
2974 	wmt_params.data = NULL;
2975 	wmt_params.status = NULL;
2976 
2977 	/* Activate funciton the firmware providing to */
2978 	err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
2979 	if (err < 0) {
2980 		bt_dev_err(hdev, "Failed to send wmt rst (%d)", err);
2981 		goto err_release_fw;
2982 	}
2983 
2984 	/* Wait a few moments for firmware activation done */
2985 	usleep_range(10000, 12000);
2986 
2987 err_release_fw:
2988 	release_firmware(fw);
2989 
2990 	return err;
2991 }
2992 
2993 static int btusb_mtk_func_query(struct hci_dev *hdev)
2994 {
2995 	struct btmtk_hci_wmt_params wmt_params;
2996 	int status, err;
2997 	u8 param = 0;
2998 
2999 	/* Query whether the function is enabled */
3000 	wmt_params.op = BTMTK_WMT_FUNC_CTRL;
3001 	wmt_params.flag = 4;
3002 	wmt_params.dlen = sizeof(param);
3003 	wmt_params.data = &param;
3004 	wmt_params.status = &status;
3005 
3006 	err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
3007 	if (err < 0) {
3008 		bt_dev_err(hdev, "Failed to query function status (%d)", err);
3009 		return err;
3010 	}
3011 
3012 	return status;
3013 }
3014 
3015 static int btusb_mtk_reg_read(struct btusb_data *data, u32 reg, u32 *val)
3016 {
3017 	int pipe, err, size = sizeof(u32);
3018 	void *buf;
3019 
3020 	buf = kzalloc(size, GFP_KERNEL);
3021 	if (!buf)
3022 		return -ENOMEM;
3023 
3024 	pipe = usb_rcvctrlpipe(data->udev, 0);
3025 	err = usb_control_msg(data->udev, pipe, 0x63,
3026 			      USB_TYPE_VENDOR | USB_DIR_IN,
3027 			      reg >> 16, reg & 0xffff,
3028 			      buf, size, USB_CTRL_SET_TIMEOUT);
3029 	if (err < 0)
3030 		goto err_free_buf;
3031 
3032 	*val = get_unaligned_le32(buf);
3033 
3034 err_free_buf:
3035 	kfree(buf);
3036 
3037 	return err;
3038 }
3039 
3040 static int btusb_mtk_id_get(struct btusb_data *data, u32 *id)
3041 {
3042 	return btusb_mtk_reg_read(data, 0x80000008, id);
3043 }
3044 
3045 static int btusb_mtk_setup(struct hci_dev *hdev)
3046 {
3047 	struct btusb_data *data = hci_get_drvdata(hdev);
3048 	struct btmtk_hci_wmt_params wmt_params;
3049 	ktime_t calltime, delta, rettime;
3050 	struct btmtk_tci_sleep tci_sleep;
3051 	unsigned long long duration;
3052 	struct sk_buff *skb;
3053 	const char *fwname;
3054 	int err, status;
3055 	u32 dev_id;
3056 	u8 param;
3057 
3058 	calltime = ktime_get();
3059 
3060 	err = btusb_mtk_id_get(data, &dev_id);
3061 	if (err < 0) {
3062 		bt_dev_err(hdev, "Failed to get device id (%d)", err);
3063 		return err;
3064 	}
3065 
3066 	switch (dev_id) {
3067 	case 0x7663:
3068 		fwname = FIRMWARE_MT7663;
3069 		break;
3070 	case 0x7668:
3071 		fwname = FIRMWARE_MT7668;
3072 		break;
3073 	default:
3074 		bt_dev_err(hdev, "Unsupported support hardware variant (%08x)",
3075 			   dev_id);
3076 		return -ENODEV;
3077 	}
3078 
3079 	/* Query whether the firmware is already download */
3080 	wmt_params.op = BTMTK_WMT_SEMAPHORE;
3081 	wmt_params.flag = 1;
3082 	wmt_params.dlen = 0;
3083 	wmt_params.data = NULL;
3084 	wmt_params.status = &status;
3085 
3086 	err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
3087 	if (err < 0) {
3088 		bt_dev_err(hdev, "Failed to query firmware status (%d)", err);
3089 		return err;
3090 	}
3091 
3092 	if (status == BTMTK_WMT_PATCH_DONE) {
3093 		bt_dev_info(hdev, "firmware already downloaded");
3094 		goto ignore_setup_fw;
3095 	}
3096 
3097 	/* Setup a firmware which the device definitely requires */
3098 	err = btusb_mtk_setup_firmware(hdev, fwname);
3099 	if (err < 0)
3100 		return err;
3101 
3102 ignore_setup_fw:
3103 	err = readx_poll_timeout(btusb_mtk_func_query, hdev, status,
3104 				 status < 0 || status != BTMTK_WMT_ON_PROGRESS,
3105 				 2000, 5000000);
3106 	/* -ETIMEDOUT happens */
3107 	if (err < 0)
3108 		return err;
3109 
3110 	/* The other errors happen in btusb_mtk_func_query */
3111 	if (status < 0)
3112 		return status;
3113 
3114 	if (status == BTMTK_WMT_ON_DONE) {
3115 		bt_dev_info(hdev, "function already on");
3116 		goto ignore_func_on;
3117 	}
3118 
3119 	/* Enable Bluetooth protocol */
3120 	param = 1;
3121 	wmt_params.op = BTMTK_WMT_FUNC_CTRL;
3122 	wmt_params.flag = 0;
3123 	wmt_params.dlen = sizeof(param);
3124 	wmt_params.data = &param;
3125 	wmt_params.status = NULL;
3126 
3127 	err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
3128 	if (err < 0) {
3129 		bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
3130 		return err;
3131 	}
3132 
3133 ignore_func_on:
3134 	/* Apply the low power environment setup */
3135 	tci_sleep.mode = 0x5;
3136 	tci_sleep.duration = cpu_to_le16(0x640);
3137 	tci_sleep.host_duration = cpu_to_le16(0x640);
3138 	tci_sleep.host_wakeup_pin = 0;
3139 	tci_sleep.time_compensation = 0;
3140 
3141 	skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep,
3142 			     HCI_INIT_TIMEOUT);
3143 	if (IS_ERR(skb)) {
3144 		err = PTR_ERR(skb);
3145 		bt_dev_err(hdev, "Failed to apply low power setting (%d)", err);
3146 		return err;
3147 	}
3148 	kfree_skb(skb);
3149 
3150 	rettime = ktime_get();
3151 	delta = ktime_sub(rettime, calltime);
3152 	duration = (unsigned long long)ktime_to_ns(delta) >> 10;
3153 
3154 	bt_dev_info(hdev, "Device setup in %llu usecs", duration);
3155 
3156 	return 0;
3157 }
3158 
3159 static int btusb_mtk_shutdown(struct hci_dev *hdev)
3160 {
3161 	struct btmtk_hci_wmt_params wmt_params;
3162 	u8 param = 0;
3163 	int err;
3164 
3165 	/* Disable the device */
3166 	wmt_params.op = BTMTK_WMT_FUNC_CTRL;
3167 	wmt_params.flag = 0;
3168 	wmt_params.dlen = sizeof(param);
3169 	wmt_params.data = &param;
3170 	wmt_params.status = NULL;
3171 
3172 	err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
3173 	if (err < 0) {
3174 		bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
3175 		return err;
3176 	}
3177 
3178 	return 0;
3179 }
3180 
3181 MODULE_FIRMWARE(FIRMWARE_MT7663);
3182 MODULE_FIRMWARE(FIRMWARE_MT7668);
3183 
3184 #ifdef CONFIG_PM
3185 /* Configure an out-of-band gpio as wake-up pin, if specified in device tree */
3186 static int marvell_config_oob_wake(struct hci_dev *hdev)
3187 {
3188 	struct sk_buff *skb;
3189 	struct btusb_data *data = hci_get_drvdata(hdev);
3190 	struct device *dev = &data->udev->dev;
3191 	u16 pin, gap, opcode;
3192 	int ret;
3193 	u8 cmd[5];
3194 
3195 	/* Move on if no wakeup pin specified */
3196 	if (of_property_read_u16(dev->of_node, "marvell,wakeup-pin", &pin) ||
3197 	    of_property_read_u16(dev->of_node, "marvell,wakeup-gap-ms", &gap))
3198 		return 0;
3199 
3200 	/* Vendor specific command to configure a GPIO as wake-up pin */
3201 	opcode = hci_opcode_pack(0x3F, 0x59);
3202 	cmd[0] = opcode & 0xFF;
3203 	cmd[1] = opcode >> 8;
3204 	cmd[2] = 2; /* length of parameters that follow */
3205 	cmd[3] = pin;
3206 	cmd[4] = gap; /* time in ms, for which wakeup pin should be asserted */
3207 
3208 	skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
3209 	if (!skb) {
3210 		bt_dev_err(hdev, "%s: No memory\n", __func__);
3211 		return -ENOMEM;
3212 	}
3213 
3214 	skb_put_data(skb, cmd, sizeof(cmd));
3215 	hci_skb_pkt_type(skb) = HCI_COMMAND_PKT;
3216 
3217 	ret = btusb_send_frame(hdev, skb);
3218 	if (ret) {
3219 		bt_dev_err(hdev, "%s: configuration failed\n", __func__);
3220 		kfree_skb(skb);
3221 		return ret;
3222 	}
3223 
3224 	return 0;
3225 }
3226 #endif
3227 
3228 static int btusb_set_bdaddr_marvell(struct hci_dev *hdev,
3229 				    const bdaddr_t *bdaddr)
3230 {
3231 	struct sk_buff *skb;
3232 	u8 buf[8];
3233 	long ret;
3234 
3235 	buf[0] = 0xfe;
3236 	buf[1] = sizeof(bdaddr_t);
3237 	memcpy(buf + 2, bdaddr, sizeof(bdaddr_t));
3238 
3239 	skb = __hci_cmd_sync(hdev, 0xfc22, sizeof(buf), buf, HCI_INIT_TIMEOUT);
3240 	if (IS_ERR(skb)) {
3241 		ret = PTR_ERR(skb);
3242 		bt_dev_err(hdev, "changing Marvell device address failed (%ld)",
3243 			   ret);
3244 		return ret;
3245 	}
3246 	kfree_skb(skb);
3247 
3248 	return 0;
3249 }
3250 
3251 static int btusb_set_bdaddr_ath3012(struct hci_dev *hdev,
3252 				    const bdaddr_t *bdaddr)
3253 {
3254 	struct sk_buff *skb;
3255 	u8 buf[10];
3256 	long ret;
3257 
3258 	buf[0] = 0x01;
3259 	buf[1] = 0x01;
3260 	buf[2] = 0x00;
3261 	buf[3] = sizeof(bdaddr_t);
3262 	memcpy(buf + 4, bdaddr, sizeof(bdaddr_t));
3263 
3264 	skb = __hci_cmd_sync(hdev, 0xfc0b, sizeof(buf), buf, HCI_INIT_TIMEOUT);
3265 	if (IS_ERR(skb)) {
3266 		ret = PTR_ERR(skb);
3267 		bt_dev_err(hdev, "Change address command failed (%ld)", ret);
3268 		return ret;
3269 	}
3270 	kfree_skb(skb);
3271 
3272 	return 0;
3273 }
3274 
3275 #define QCA_DFU_PACKET_LEN	4096
3276 
3277 #define QCA_GET_TARGET_VERSION	0x09
3278 #define QCA_CHECK_STATUS	0x05
3279 #define QCA_DFU_DOWNLOAD	0x01
3280 
3281 #define QCA_SYSCFG_UPDATED	0x40
3282 #define QCA_PATCH_UPDATED	0x80
3283 #define QCA_DFU_TIMEOUT		3000
3284 
3285 struct qca_version {
3286 	__le32	rom_version;
3287 	__le32	patch_version;
3288 	__le32	ram_version;
3289 	__le32	ref_clock;
3290 	__u8	reserved[4];
3291 } __packed;
3292 
3293 struct qca_rampatch_version {
3294 	__le16	rom_version;
3295 	__le16	patch_version;
3296 } __packed;
3297 
3298 struct qca_device_info {
3299 	u32	rom_version;
3300 	u8	rampatch_hdr;	/* length of header in rampatch */
3301 	u8	nvm_hdr;	/* length of header in NVM */
3302 	u8	ver_offset;	/* offset of version structure in rampatch */
3303 };
3304 
3305 static const struct qca_device_info qca_devices_table[] = {
3306 	{ 0x00000100, 20, 4, 10 }, /* Rome 1.0 */
3307 	{ 0x00000101, 20, 4, 10 }, /* Rome 1.1 */
3308 	{ 0x00000200, 28, 4, 18 }, /* Rome 2.0 */
3309 	{ 0x00000201, 28, 4, 18 }, /* Rome 2.1 */
3310 	{ 0x00000300, 28, 4, 18 }, /* Rome 3.0 */
3311 	{ 0x00000302, 28, 4, 18 }, /* Rome 3.2 */
3312 };
3313 
3314 static int btusb_qca_send_vendor_req(struct usb_device *udev, u8 request,
3315 				     void *data, u16 size)
3316 {
3317 	int pipe, err;
3318 	u8 *buf;
3319 
3320 	buf = kmalloc(size, GFP_KERNEL);
3321 	if (!buf)
3322 		return -ENOMEM;
3323 
3324 	/* Found some of USB hosts have IOT issues with ours so that we should
3325 	 * not wait until HCI layer is ready.
3326 	 */
3327 	pipe = usb_rcvctrlpipe(udev, 0);
3328 	err = usb_control_msg(udev, pipe, request, USB_TYPE_VENDOR | USB_DIR_IN,
3329 			      0, 0, buf, size, USB_CTRL_SET_TIMEOUT);
3330 	if (err < 0) {
3331 		dev_err(&udev->dev, "Failed to access otp area (%d)", err);
3332 		goto done;
3333 	}
3334 
3335 	memcpy(data, buf, size);
3336 
3337 done:
3338 	kfree(buf);
3339 
3340 	return err;
3341 }
3342 
3343 static int btusb_setup_qca_download_fw(struct hci_dev *hdev,
3344 				       const struct firmware *firmware,
3345 				       size_t hdr_size)
3346 {
3347 	struct btusb_data *btdata = hci_get_drvdata(hdev);
3348 	struct usb_device *udev = btdata->udev;
3349 	size_t count, size, sent = 0;
3350 	int pipe, len, err;
3351 	u8 *buf;
3352 
3353 	buf = kmalloc(QCA_DFU_PACKET_LEN, GFP_KERNEL);
3354 	if (!buf)
3355 		return -ENOMEM;
3356 
3357 	count = firmware->size;
3358 
3359 	size = min_t(size_t, count, hdr_size);
3360 	memcpy(buf, firmware->data, size);
3361 
3362 	/* USB patches should go down to controller through USB path
3363 	 * because binary format fits to go down through USB channel.
3364 	 * USB control path is for patching headers and USB bulk is for
3365 	 * patch body.
3366 	 */
3367 	pipe = usb_sndctrlpipe(udev, 0);
3368 	err = usb_control_msg(udev, pipe, QCA_DFU_DOWNLOAD, USB_TYPE_VENDOR,
3369 			      0, 0, buf, size, USB_CTRL_SET_TIMEOUT);
3370 	if (err < 0) {
3371 		bt_dev_err(hdev, "Failed to send headers (%d)", err);
3372 		goto done;
3373 	}
3374 
3375 	sent += size;
3376 	count -= size;
3377 
3378 	while (count) {
3379 		size = min_t(size_t, count, QCA_DFU_PACKET_LEN);
3380 
3381 		memcpy(buf, firmware->data + sent, size);
3382 
3383 		pipe = usb_sndbulkpipe(udev, 0x02);
3384 		err = usb_bulk_msg(udev, pipe, buf, size, &len,
3385 				   QCA_DFU_TIMEOUT);
3386 		if (err < 0) {
3387 			bt_dev_err(hdev, "Failed to send body at %zd of %zd (%d)",
3388 				   sent, firmware->size, err);
3389 			break;
3390 		}
3391 
3392 		if (size != len) {
3393 			bt_dev_err(hdev, "Failed to get bulk buffer");
3394 			err = -EILSEQ;
3395 			break;
3396 		}
3397 
3398 		sent  += size;
3399 		count -= size;
3400 	}
3401 
3402 done:
3403 	kfree(buf);
3404 	return err;
3405 }
3406 
3407 static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
3408 					 struct qca_version *ver,
3409 					 const struct qca_device_info *info)
3410 {
3411 	struct qca_rampatch_version *rver;
3412 	const struct firmware *fw;
3413 	u32 ver_rom, ver_patch;
3414 	u16 rver_rom, rver_patch;
3415 	char fwname[64];
3416 	int err;
3417 
3418 	ver_rom = le32_to_cpu(ver->rom_version);
3419 	ver_patch = le32_to_cpu(ver->patch_version);
3420 
3421 	snprintf(fwname, sizeof(fwname), "qca/rampatch_usb_%08x.bin", ver_rom);
3422 
3423 	err = request_firmware(&fw, fwname, &hdev->dev);
3424 	if (err) {
3425 		bt_dev_err(hdev, "failed to request rampatch file: %s (%d)",
3426 			   fwname, err);
3427 		return err;
3428 	}
3429 
3430 	bt_dev_info(hdev, "using rampatch file: %s", fwname);
3431 
3432 	rver = (struct qca_rampatch_version *)(fw->data + info->ver_offset);
3433 	rver_rom = le16_to_cpu(rver->rom_version);
3434 	rver_patch = le16_to_cpu(rver->patch_version);
3435 
3436 	bt_dev_info(hdev, "QCA: patch rome 0x%x build 0x%x, "
3437 		    "firmware rome 0x%x build 0x%x",
3438 		    rver_rom, rver_patch, ver_rom, ver_patch);
3439 
3440 	if (rver_rom != ver_rom || rver_patch <= ver_patch) {
3441 		bt_dev_err(hdev, "rampatch file version did not match with firmware");
3442 		err = -EINVAL;
3443 		goto done;
3444 	}
3445 
3446 	err = btusb_setup_qca_download_fw(hdev, fw, info->rampatch_hdr);
3447 
3448 done:
3449 	release_firmware(fw);
3450 
3451 	return err;
3452 }
3453 
3454 static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
3455 				    struct qca_version *ver,
3456 				    const struct qca_device_info *info)
3457 {
3458 	const struct firmware *fw;
3459 	char fwname[64];
3460 	int err;
3461 
3462 	snprintf(fwname, sizeof(fwname), "qca/nvm_usb_%08x.bin",
3463 		 le32_to_cpu(ver->rom_version));
3464 
3465 	err = request_firmware(&fw, fwname, &hdev->dev);
3466 	if (err) {
3467 		bt_dev_err(hdev, "failed to request NVM file: %s (%d)",
3468 			   fwname, err);
3469 		return err;
3470 	}
3471 
3472 	bt_dev_info(hdev, "using NVM file: %s", fwname);
3473 
3474 	err = btusb_setup_qca_download_fw(hdev, fw, info->nvm_hdr);
3475 
3476 	release_firmware(fw);
3477 
3478 	return err;
3479 }
3480 
3481 /* identify the ROM version and check whether patches are needed */
3482 static bool btusb_qca_need_patch(struct usb_device *udev)
3483 {
3484 	struct qca_version ver;
3485 
3486 	if (btusb_qca_send_vendor_req(udev, QCA_GET_TARGET_VERSION, &ver,
3487 				      sizeof(ver)) < 0)
3488 		return false;
3489 	/* only low ROM versions need patches */
3490 	return !(le32_to_cpu(ver.rom_version) & ~0xffffU);
3491 }
3492 
3493 static int btusb_setup_qca(struct hci_dev *hdev)
3494 {
3495 	struct btusb_data *btdata = hci_get_drvdata(hdev);
3496 	struct usb_device *udev = btdata->udev;
3497 	const struct qca_device_info *info = NULL;
3498 	struct qca_version ver;
3499 	u32 ver_rom;
3500 	u8 status;
3501 	int i, err;
3502 
3503 	err = btusb_qca_send_vendor_req(udev, QCA_GET_TARGET_VERSION, &ver,
3504 					sizeof(ver));
3505 	if (err < 0)
3506 		return err;
3507 
3508 	ver_rom = le32_to_cpu(ver.rom_version);
3509 	/* Don't care about high ROM versions */
3510 	if (ver_rom & ~0xffffU)
3511 		return 0;
3512 
3513 	for (i = 0; i < ARRAY_SIZE(qca_devices_table); i++) {
3514 		if (ver_rom == qca_devices_table[i].rom_version)
3515 			info = &qca_devices_table[i];
3516 	}
3517 	if (!info) {
3518 		bt_dev_err(hdev, "don't support firmware rome 0x%x", ver_rom);
3519 		return -ENODEV;
3520 	}
3521 
3522 	err = btusb_qca_send_vendor_req(udev, QCA_CHECK_STATUS, &status,
3523 					sizeof(status));
3524 	if (err < 0)
3525 		return err;
3526 
3527 	if (!(status & QCA_PATCH_UPDATED)) {
3528 		err = btusb_setup_qca_load_rampatch(hdev, &ver, info);
3529 		if (err < 0)
3530 			return err;
3531 	}
3532 
3533 	if (!(status & QCA_SYSCFG_UPDATED)) {
3534 		err = btusb_setup_qca_load_nvm(hdev, &ver, info);
3535 		if (err < 0)
3536 			return err;
3537 	}
3538 
3539 	return 0;
3540 }
3541 
3542 static inline int __set_diag_interface(struct hci_dev *hdev)
3543 {
3544 	struct btusb_data *data = hci_get_drvdata(hdev);
3545 	struct usb_interface *intf = data->diag;
3546 	int i;
3547 
3548 	if (!data->diag)
3549 		return -ENODEV;
3550 
3551 	data->diag_tx_ep = NULL;
3552 	data->diag_rx_ep = NULL;
3553 
3554 	for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
3555 		struct usb_endpoint_descriptor *ep_desc;
3556 
3557 		ep_desc = &intf->cur_altsetting->endpoint[i].desc;
3558 
3559 		if (!data->diag_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) {
3560 			data->diag_tx_ep = ep_desc;
3561 			continue;
3562 		}
3563 
3564 		if (!data->diag_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) {
3565 			data->diag_rx_ep = ep_desc;
3566 			continue;
3567 		}
3568 	}
3569 
3570 	if (!data->diag_tx_ep || !data->diag_rx_ep) {
3571 		bt_dev_err(hdev, "invalid diagnostic descriptors");
3572 		return -ENODEV;
3573 	}
3574 
3575 	return 0;
3576 }
3577 
3578 static struct urb *alloc_diag_urb(struct hci_dev *hdev, bool enable)
3579 {
3580 	struct btusb_data *data = hci_get_drvdata(hdev);
3581 	struct sk_buff *skb;
3582 	struct urb *urb;
3583 	unsigned int pipe;
3584 
3585 	if (!data->diag_tx_ep)
3586 		return ERR_PTR(-ENODEV);
3587 
3588 	urb = usb_alloc_urb(0, GFP_KERNEL);
3589 	if (!urb)
3590 		return ERR_PTR(-ENOMEM);
3591 
3592 	skb = bt_skb_alloc(2, GFP_KERNEL);
3593 	if (!skb) {
3594 		usb_free_urb(urb);
3595 		return ERR_PTR(-ENOMEM);
3596 	}
3597 
3598 	skb_put_u8(skb, 0xf0);
3599 	skb_put_u8(skb, enable);
3600 
3601 	pipe = usb_sndbulkpipe(data->udev, data->diag_tx_ep->bEndpointAddress);
3602 
3603 	usb_fill_bulk_urb(urb, data->udev, pipe,
3604 			  skb->data, skb->len, btusb_tx_complete, skb);
3605 
3606 	skb->dev = (void *)hdev;
3607 
3608 	return urb;
3609 }
3610 
3611 static int btusb_bcm_set_diag(struct hci_dev *hdev, bool enable)
3612 {
3613 	struct btusb_data *data = hci_get_drvdata(hdev);
3614 	struct urb *urb;
3615 
3616 	if (!data->diag)
3617 		return -ENODEV;
3618 
3619 	if (!test_bit(HCI_RUNNING, &hdev->flags))
3620 		return -ENETDOWN;
3621 
3622 	urb = alloc_diag_urb(hdev, enable);
3623 	if (IS_ERR(urb))
3624 		return PTR_ERR(urb);
3625 
3626 	return submit_or_queue_tx_urb(hdev, urb);
3627 }
3628 
3629 #ifdef CONFIG_PM
3630 static irqreturn_t btusb_oob_wake_handler(int irq, void *priv)
3631 {
3632 	struct btusb_data *data = priv;
3633 
3634 	pm_wakeup_event(&data->udev->dev, 0);
3635 	pm_system_wakeup();
3636 
3637 	/* Disable only if not already disabled (keep it balanced) */
3638 	if (test_and_clear_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags)) {
3639 		disable_irq_nosync(irq);
3640 		disable_irq_wake(irq);
3641 	}
3642 	return IRQ_HANDLED;
3643 }
3644 
3645 static const struct of_device_id btusb_match_table[] = {
3646 	{ .compatible = "usb1286,204e" },
3647 	{ .compatible = "usbcf3,e300" }, /* QCA6174A */
3648 	{ .compatible = "usb4ca,301a" }, /* QCA6174A (Lite-On) */
3649 	{ }
3650 };
3651 MODULE_DEVICE_TABLE(of, btusb_match_table);
3652 
3653 /* Use an oob wakeup pin? */
3654 static int btusb_config_oob_wake(struct hci_dev *hdev)
3655 {
3656 	struct btusb_data *data = hci_get_drvdata(hdev);
3657 	struct device *dev = &data->udev->dev;
3658 	int irq, ret;
3659 
3660 	clear_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags);
3661 
3662 	if (!of_match_device(btusb_match_table, dev))
3663 		return 0;
3664 
3665 	/* Move on if no IRQ specified */
3666 	irq = of_irq_get_byname(dev->of_node, "wakeup");
3667 	if (irq <= 0) {
3668 		bt_dev_dbg(hdev, "%s: no OOB Wakeup IRQ in DT", __func__);
3669 		return 0;
3670 	}
3671 
3672 	irq_set_status_flags(irq, IRQ_NOAUTOEN);
3673 	ret = devm_request_irq(&hdev->dev, irq, btusb_oob_wake_handler,
3674 			       0, "OOB Wake-on-BT", data);
3675 	if (ret) {
3676 		bt_dev_err(hdev, "%s: IRQ request failed", __func__);
3677 		return ret;
3678 	}
3679 
3680 	ret = device_init_wakeup(dev, true);
3681 	if (ret) {
3682 		bt_dev_err(hdev, "%s: failed to init_wakeup", __func__);
3683 		return ret;
3684 	}
3685 
3686 	data->oob_wake_irq = irq;
3687 	bt_dev_info(hdev, "OOB Wake-on-BT configured at IRQ %u", irq);
3688 	return 0;
3689 }
3690 #endif
3691 
3692 static void btusb_check_needs_reset_resume(struct usb_interface *intf)
3693 {
3694 	if (dmi_check_system(btusb_needs_reset_resume_table))
3695 		interface_to_usbdev(intf)->quirks |= USB_QUIRK_RESET_RESUME;
3696 }
3697 
3698 static int btusb_probe(struct usb_interface *intf,
3699 		       const struct usb_device_id *id)
3700 {
3701 	struct usb_endpoint_descriptor *ep_desc;
3702 	struct gpio_desc *reset_gpio;
3703 	struct btusb_data *data;
3704 	struct hci_dev *hdev;
3705 	unsigned ifnum_base;
3706 	int i, err;
3707 
3708 	BT_DBG("intf %p id %p", intf, id);
3709 
3710 	/* interface numbers are hardcoded in the spec */
3711 	if (intf->cur_altsetting->desc.bInterfaceNumber != 0) {
3712 		if (!(id->driver_info & BTUSB_IFNUM_2))
3713 			return -ENODEV;
3714 		if (intf->cur_altsetting->desc.bInterfaceNumber != 2)
3715 			return -ENODEV;
3716 	}
3717 
3718 	ifnum_base = intf->cur_altsetting->desc.bInterfaceNumber;
3719 
3720 	if (!id->driver_info) {
3721 		const struct usb_device_id *match;
3722 
3723 		match = usb_match_id(intf, blacklist_table);
3724 		if (match)
3725 			id = match;
3726 	}
3727 
3728 	if (id->driver_info == BTUSB_IGNORE)
3729 		return -ENODEV;
3730 
3731 	if (id->driver_info & BTUSB_ATH3012) {
3732 		struct usb_device *udev = interface_to_usbdev(intf);
3733 
3734 		/* Old firmware would otherwise let ath3k driver load
3735 		 * patch and sysconfig files
3736 		 */
3737 		if (le16_to_cpu(udev->descriptor.bcdDevice) <= 0x0001 &&
3738 		    !btusb_qca_need_patch(udev))
3739 			return -ENODEV;
3740 	}
3741 
3742 	data = devm_kzalloc(&intf->dev, sizeof(*data), GFP_KERNEL);
3743 	if (!data)
3744 		return -ENOMEM;
3745 
3746 	for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
3747 		ep_desc = &intf->cur_altsetting->endpoint[i].desc;
3748 
3749 		if (!data->intr_ep && usb_endpoint_is_int_in(ep_desc)) {
3750 			data->intr_ep = ep_desc;
3751 			continue;
3752 		}
3753 
3754 		if (!data->bulk_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) {
3755 			data->bulk_tx_ep = ep_desc;
3756 			continue;
3757 		}
3758 
3759 		if (!data->bulk_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) {
3760 			data->bulk_rx_ep = ep_desc;
3761 			continue;
3762 		}
3763 	}
3764 
3765 	if (!data->intr_ep || !data->bulk_tx_ep || !data->bulk_rx_ep)
3766 		return -ENODEV;
3767 
3768 	if (id->driver_info & BTUSB_AMP) {
3769 		data->cmdreq_type = USB_TYPE_CLASS | 0x01;
3770 		data->cmdreq = 0x2b;
3771 	} else {
3772 		data->cmdreq_type = USB_TYPE_CLASS;
3773 		data->cmdreq = 0x00;
3774 	}
3775 
3776 	data->udev = interface_to_usbdev(intf);
3777 	data->intf = intf;
3778 
3779 	INIT_WORK(&data->work, btusb_work);
3780 	INIT_WORK(&data->waker, btusb_waker);
3781 	init_usb_anchor(&data->deferred);
3782 	init_usb_anchor(&data->tx_anchor);
3783 	spin_lock_init(&data->txlock);
3784 
3785 	init_usb_anchor(&data->intr_anchor);
3786 	init_usb_anchor(&data->bulk_anchor);
3787 	init_usb_anchor(&data->isoc_anchor);
3788 	init_usb_anchor(&data->diag_anchor);
3789 	init_usb_anchor(&data->ctrl_anchor);
3790 	spin_lock_init(&data->rxlock);
3791 
3792 	if (id->driver_info & BTUSB_INTEL_NEW) {
3793 		data->recv_event = btusb_recv_event_intel;
3794 		data->recv_bulk = btusb_recv_bulk_intel;
3795 		set_bit(BTUSB_BOOTLOADER, &data->flags);
3796 	} else {
3797 		data->recv_event = hci_recv_frame;
3798 		data->recv_bulk = btusb_recv_bulk;
3799 	}
3800 
3801 	hdev = hci_alloc_dev();
3802 	if (!hdev)
3803 		return -ENOMEM;
3804 
3805 	hdev->bus = HCI_USB;
3806 	hci_set_drvdata(hdev, data);
3807 
3808 	if (id->driver_info & BTUSB_AMP)
3809 		hdev->dev_type = HCI_AMP;
3810 	else
3811 		hdev->dev_type = HCI_PRIMARY;
3812 
3813 	data->hdev = hdev;
3814 
3815 	SET_HCIDEV_DEV(hdev, &intf->dev);
3816 
3817 	reset_gpio = gpiod_get_optional(&data->udev->dev, "reset",
3818 					GPIOD_OUT_LOW);
3819 	if (IS_ERR(reset_gpio)) {
3820 		err = PTR_ERR(reset_gpio);
3821 		goto out_free_dev;
3822 	} else if (reset_gpio) {
3823 		data->reset_gpio = reset_gpio;
3824 	}
3825 
3826 	hdev->open   = btusb_open;
3827 	hdev->close  = btusb_close;
3828 	hdev->flush  = btusb_flush;
3829 	hdev->send   = btusb_send_frame;
3830 	hdev->notify = btusb_notify;
3831 
3832 #ifdef CONFIG_PM
3833 	err = btusb_config_oob_wake(hdev);
3834 	if (err)
3835 		goto out_free_dev;
3836 
3837 	/* Marvell devices may need a specific chip configuration */
3838 	if (id->driver_info & BTUSB_MARVELL && data->oob_wake_irq) {
3839 		err = marvell_config_oob_wake(hdev);
3840 		if (err)
3841 			goto out_free_dev;
3842 	}
3843 #endif
3844 	if (id->driver_info & BTUSB_CW6622)
3845 		set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
3846 
3847 	if (id->driver_info & BTUSB_BCM2045)
3848 		set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
3849 
3850 	if (id->driver_info & BTUSB_BCM92035)
3851 		hdev->setup = btusb_setup_bcm92035;
3852 
3853 	if (IS_ENABLED(CONFIG_BT_HCIBTUSB_BCM) &&
3854 	    (id->driver_info & BTUSB_BCM_PATCHRAM)) {
3855 		hdev->manufacturer = 15;
3856 		hdev->setup = btbcm_setup_patchram;
3857 		hdev->set_diag = btusb_bcm_set_diag;
3858 		hdev->set_bdaddr = btbcm_set_bdaddr;
3859 
3860 		/* Broadcom LM_DIAG Interface numbers are hardcoded */
3861 		data->diag = usb_ifnum_to_if(data->udev, ifnum_base + 2);
3862 	}
3863 
3864 	if (IS_ENABLED(CONFIG_BT_HCIBTUSB_BCM) &&
3865 	    (id->driver_info & BTUSB_BCM_APPLE)) {
3866 		hdev->manufacturer = 15;
3867 		hdev->setup = btbcm_setup_apple;
3868 		hdev->set_diag = btusb_bcm_set_diag;
3869 
3870 		/* Broadcom LM_DIAG Interface numbers are hardcoded */
3871 		data->diag = usb_ifnum_to_if(data->udev, ifnum_base + 2);
3872 	}
3873 
3874 	if (id->driver_info & BTUSB_INTEL) {
3875 		hdev->manufacturer = 2;
3876 		hdev->setup = btusb_setup_intel;
3877 		hdev->shutdown = btusb_shutdown_intel;
3878 		hdev->set_diag = btintel_set_diag_mfg;
3879 		hdev->set_bdaddr = btintel_set_bdaddr;
3880 		hdev->cmd_timeout = btusb_intel_cmd_timeout;
3881 		set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
3882 		set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
3883 		set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks);
3884 	}
3885 
3886 	if (id->driver_info & BTUSB_INTEL_NEW) {
3887 		hdev->manufacturer = 2;
3888 		hdev->send = btusb_send_frame_intel;
3889 		hdev->setup = btusb_setup_intel_new;
3890 		hdev->shutdown = btusb_shutdown_intel_new;
3891 		hdev->hw_error = btintel_hw_error;
3892 		hdev->set_diag = btintel_set_diag;
3893 		hdev->set_bdaddr = btintel_set_bdaddr;
3894 		hdev->cmd_timeout = btusb_intel_cmd_timeout;
3895 		set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
3896 		set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
3897 		set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks);
3898 	}
3899 
3900 	if (id->driver_info & BTUSB_MARVELL)
3901 		hdev->set_bdaddr = btusb_set_bdaddr_marvell;
3902 
3903 	if (IS_ENABLED(CONFIG_BT_HCIBTUSB_MTK) &&
3904 	    (id->driver_info & BTUSB_MEDIATEK)) {
3905 		hdev->setup = btusb_mtk_setup;
3906 		hdev->shutdown = btusb_mtk_shutdown;
3907 		hdev->manufacturer = 70;
3908 		set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
3909 	}
3910 
3911 	if (id->driver_info & BTUSB_SWAVE) {
3912 		set_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks);
3913 		set_bit(HCI_QUIRK_BROKEN_LOCAL_COMMANDS, &hdev->quirks);
3914 	}
3915 
3916 	if (id->driver_info & BTUSB_INTEL_BOOT) {
3917 		hdev->manufacturer = 2;
3918 		set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
3919 	}
3920 
3921 	if (id->driver_info & BTUSB_ATH3012) {
3922 		data->setup_on_usb = btusb_setup_qca;
3923 		hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
3924 		set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
3925 		set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
3926 	}
3927 
3928 	if (id->driver_info & BTUSB_QCA_ROME) {
3929 		data->setup_on_usb = btusb_setup_qca;
3930 		hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
3931 		set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
3932 		btusb_check_needs_reset_resume(intf);
3933 	}
3934 
3935 	if (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) &&
3936 	    (id->driver_info & BTUSB_REALTEK)) {
3937 		hdev->setup = btrtl_setup_realtek;
3938 		hdev->shutdown = btrtl_shutdown_realtek;
3939 		hdev->cmd_timeout = btusb_rtl_cmd_timeout;
3940 
3941 		/* Realtek devices lose their updated firmware over global
3942 		 * suspend that means host doesn't send SET_FEATURE
3943 		 * (DEVICE_REMOTE_WAKEUP)
3944 		 */
3945 		set_bit(BTUSB_WAKEUP_DISABLE, &data->flags);
3946 
3947 		err = usb_autopm_get_interface(intf);
3948 		if (err < 0)
3949 			goto out_free_dev;
3950 	}
3951 
3952 	if (id->driver_info & BTUSB_AMP) {
3953 		/* AMP controllers do not support SCO packets */
3954 		data->isoc = NULL;
3955 	} else {
3956 		/* Interface orders are hardcoded in the specification */
3957 		data->isoc = usb_ifnum_to_if(data->udev, ifnum_base + 1);
3958 		data->isoc_ifnum = ifnum_base + 1;
3959 	}
3960 
3961 	if (!reset)
3962 		set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
3963 
3964 	if (force_scofix || id->driver_info & BTUSB_WRONG_SCO_MTU) {
3965 		if (!disable_scofix)
3966 			set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
3967 	}
3968 
3969 	if (id->driver_info & BTUSB_BROKEN_ISOC)
3970 		data->isoc = NULL;
3971 
3972 	if (id->driver_info & BTUSB_WIDEBAND_SPEECH)
3973 		set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
3974 
3975 	if (id->driver_info & BTUSB_DIGIANSWER) {
3976 		data->cmdreq_type = USB_TYPE_VENDOR;
3977 		set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
3978 	}
3979 
3980 	if (id->driver_info & BTUSB_CSR) {
3981 		struct usb_device *udev = data->udev;
3982 		u16 bcdDevice = le16_to_cpu(udev->descriptor.bcdDevice);
3983 
3984 		/* Old firmware would otherwise execute USB reset */
3985 		if (bcdDevice < 0x117)
3986 			set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
3987 
3988 		/* Fake CSR devices with broken commands */
3989 		if (bcdDevice <= 0x100 || bcdDevice == 0x134)
3990 			hdev->setup = btusb_setup_csr;
3991 
3992 		set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
3993 	}
3994 
3995 	if (id->driver_info & BTUSB_SNIFFER) {
3996 		struct usb_device *udev = data->udev;
3997 
3998 		/* New sniffer firmware has crippled HCI interface */
3999 		if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
4000 			set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
4001 	}
4002 
4003 	if (id->driver_info & BTUSB_INTEL_BOOT) {
4004 		/* A bug in the bootloader causes that interrupt interface is
4005 		 * only enabled after receiving SetInterface(0, AltSetting=0).
4006 		 */
4007 		err = usb_set_interface(data->udev, 0, 0);
4008 		if (err < 0) {
4009 			BT_ERR("failed to set interface 0, alt 0 %d", err);
4010 			goto out_free_dev;
4011 		}
4012 	}
4013 
4014 	if (data->isoc) {
4015 		err = usb_driver_claim_interface(&btusb_driver,
4016 						 data->isoc, data);
4017 		if (err < 0)
4018 			goto out_free_dev;
4019 	}
4020 
4021 	if (IS_ENABLED(CONFIG_BT_HCIBTUSB_BCM) && data->diag) {
4022 		if (!usb_driver_claim_interface(&btusb_driver,
4023 						data->diag, data))
4024 			__set_diag_interface(hdev);
4025 		else
4026 			data->diag = NULL;
4027 	}
4028 
4029 	if (enable_autosuspend)
4030 		usb_enable_autosuspend(data->udev);
4031 
4032 	err = hci_register_dev(hdev);
4033 	if (err < 0)
4034 		goto out_free_dev;
4035 
4036 	usb_set_intfdata(intf, data);
4037 
4038 	return 0;
4039 
4040 out_free_dev:
4041 	if (data->reset_gpio)
4042 		gpiod_put(data->reset_gpio);
4043 	hci_free_dev(hdev);
4044 	return err;
4045 }
4046 
4047 static void btusb_disconnect(struct usb_interface *intf)
4048 {
4049 	struct btusb_data *data = usb_get_intfdata(intf);
4050 	struct hci_dev *hdev;
4051 
4052 	BT_DBG("intf %p", intf);
4053 
4054 	if (!data)
4055 		return;
4056 
4057 	hdev = data->hdev;
4058 	usb_set_intfdata(data->intf, NULL);
4059 
4060 	if (data->isoc)
4061 		usb_set_intfdata(data->isoc, NULL);
4062 
4063 	if (data->diag)
4064 		usb_set_intfdata(data->diag, NULL);
4065 
4066 	hci_unregister_dev(hdev);
4067 
4068 	if (intf == data->intf) {
4069 		if (data->isoc)
4070 			usb_driver_release_interface(&btusb_driver, data->isoc);
4071 		if (data->diag)
4072 			usb_driver_release_interface(&btusb_driver, data->diag);
4073 	} else if (intf == data->isoc) {
4074 		if (data->diag)
4075 			usb_driver_release_interface(&btusb_driver, data->diag);
4076 		usb_driver_release_interface(&btusb_driver, data->intf);
4077 	} else if (intf == data->diag) {
4078 		usb_driver_release_interface(&btusb_driver, data->intf);
4079 		if (data->isoc)
4080 			usb_driver_release_interface(&btusb_driver, data->isoc);
4081 	}
4082 
4083 	if (data->oob_wake_irq)
4084 		device_init_wakeup(&data->udev->dev, false);
4085 
4086 	if (data->reset_gpio)
4087 		gpiod_put(data->reset_gpio);
4088 
4089 	hci_free_dev(hdev);
4090 }
4091 
4092 #ifdef CONFIG_PM
4093 static int btusb_suspend(struct usb_interface *intf, pm_message_t message)
4094 {
4095 	struct btusb_data *data = usb_get_intfdata(intf);
4096 
4097 	BT_DBG("intf %p", intf);
4098 
4099 	if (data->suspend_count++)
4100 		return 0;
4101 
4102 	spin_lock_irq(&data->txlock);
4103 	if (!(PMSG_IS_AUTO(message) && data->tx_in_flight)) {
4104 		set_bit(BTUSB_SUSPENDING, &data->flags);
4105 		spin_unlock_irq(&data->txlock);
4106 	} else {
4107 		spin_unlock_irq(&data->txlock);
4108 		data->suspend_count--;
4109 		return -EBUSY;
4110 	}
4111 
4112 	cancel_work_sync(&data->work);
4113 
4114 	btusb_stop_traffic(data);
4115 	usb_kill_anchored_urbs(&data->tx_anchor);
4116 
4117 	if (data->oob_wake_irq && device_may_wakeup(&data->udev->dev)) {
4118 		set_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags);
4119 		enable_irq_wake(data->oob_wake_irq);
4120 		enable_irq(data->oob_wake_irq);
4121 	}
4122 
4123 	/* For global suspend, Realtek devices lose the loaded fw
4124 	 * in them. But for autosuspend, firmware should remain.
4125 	 * Actually, it depends on whether the usb host sends
4126 	 * set feature (enable wakeup) or not.
4127 	 */
4128 	if (test_bit(BTUSB_WAKEUP_DISABLE, &data->flags)) {
4129 		if (PMSG_IS_AUTO(message) &&
4130 		    device_can_wakeup(&data->udev->dev))
4131 			data->udev->do_remote_wakeup = 1;
4132 		else if (!PMSG_IS_AUTO(message))
4133 			data->udev->reset_resume = 1;
4134 	}
4135 
4136 	return 0;
4137 }
4138 
4139 static void play_deferred(struct btusb_data *data)
4140 {
4141 	struct urb *urb;
4142 	int err;
4143 
4144 	while ((urb = usb_get_from_anchor(&data->deferred))) {
4145 		usb_anchor_urb(urb, &data->tx_anchor);
4146 
4147 		err = usb_submit_urb(urb, GFP_ATOMIC);
4148 		if (err < 0) {
4149 			if (err != -EPERM && err != -ENODEV)
4150 				BT_ERR("%s urb %p submission failed (%d)",
4151 				       data->hdev->name, urb, -err);
4152 			kfree(urb->setup_packet);
4153 			usb_unanchor_urb(urb);
4154 			usb_free_urb(urb);
4155 			break;
4156 		}
4157 
4158 		data->tx_in_flight++;
4159 		usb_free_urb(urb);
4160 	}
4161 
4162 	/* Cleanup the rest deferred urbs. */
4163 	while ((urb = usb_get_from_anchor(&data->deferred))) {
4164 		kfree(urb->setup_packet);
4165 		usb_free_urb(urb);
4166 	}
4167 }
4168 
4169 static int btusb_resume(struct usb_interface *intf)
4170 {
4171 	struct btusb_data *data = usb_get_intfdata(intf);
4172 	struct hci_dev *hdev = data->hdev;
4173 	int err = 0;
4174 
4175 	BT_DBG("intf %p", intf);
4176 
4177 	if (--data->suspend_count)
4178 		return 0;
4179 
4180 	/* Disable only if not already disabled (keep it balanced) */
4181 	if (test_and_clear_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags)) {
4182 		disable_irq(data->oob_wake_irq);
4183 		disable_irq_wake(data->oob_wake_irq);
4184 	}
4185 
4186 	if (!test_bit(HCI_RUNNING, &hdev->flags))
4187 		goto done;
4188 
4189 	if (test_bit(BTUSB_INTR_RUNNING, &data->flags)) {
4190 		err = btusb_submit_intr_urb(hdev, GFP_NOIO);
4191 		if (err < 0) {
4192 			clear_bit(BTUSB_INTR_RUNNING, &data->flags);
4193 			goto failed;
4194 		}
4195 	}
4196 
4197 	if (test_bit(BTUSB_BULK_RUNNING, &data->flags)) {
4198 		err = btusb_submit_bulk_urb(hdev, GFP_NOIO);
4199 		if (err < 0) {
4200 			clear_bit(BTUSB_BULK_RUNNING, &data->flags);
4201 			goto failed;
4202 		}
4203 
4204 		btusb_submit_bulk_urb(hdev, GFP_NOIO);
4205 	}
4206 
4207 	if (test_bit(BTUSB_ISOC_RUNNING, &data->flags)) {
4208 		if (btusb_submit_isoc_urb(hdev, GFP_NOIO) < 0)
4209 			clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
4210 		else
4211 			btusb_submit_isoc_urb(hdev, GFP_NOIO);
4212 	}
4213 
4214 	spin_lock_irq(&data->txlock);
4215 	play_deferred(data);
4216 	clear_bit(BTUSB_SUSPENDING, &data->flags);
4217 	spin_unlock_irq(&data->txlock);
4218 	schedule_work(&data->work);
4219 
4220 	return 0;
4221 
4222 failed:
4223 	usb_scuttle_anchored_urbs(&data->deferred);
4224 done:
4225 	spin_lock_irq(&data->txlock);
4226 	clear_bit(BTUSB_SUSPENDING, &data->flags);
4227 	spin_unlock_irq(&data->txlock);
4228 
4229 	return err;
4230 }
4231 #endif
4232 
4233 static struct usb_driver btusb_driver = {
4234 	.name		= "btusb",
4235 	.probe		= btusb_probe,
4236 	.disconnect	= btusb_disconnect,
4237 #ifdef CONFIG_PM
4238 	.suspend	= btusb_suspend,
4239 	.resume		= btusb_resume,
4240 #endif
4241 	.id_table	= btusb_table,
4242 	.supports_autosuspend = 1,
4243 	.disable_hub_initiated_lpm = 1,
4244 };
4245 
4246 module_usb_driver(btusb_driver);
4247 
4248 module_param(disable_scofix, bool, 0644);
4249 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
4250 
4251 module_param(force_scofix, bool, 0644);
4252 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
4253 
4254 module_param(enable_autosuspend, bool, 0644);
4255 MODULE_PARM_DESC(enable_autosuspend, "Enable USB autosuspend by default");
4256 
4257 module_param(reset, bool, 0644);
4258 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
4259 
4260 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
4261 MODULE_DESCRIPTION("Generic Bluetooth USB driver ver " VERSION);
4262 MODULE_VERSION(VERSION);
4263 MODULE_LICENSE("GPL");
4264