Bluetooth: btusb: Add new VID/PID 04ca/3804 for MT7922
[platform/kernel/linux-starfive.git] / drivers / bluetooth / btusb.c
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 <linux/debugfs.h>
20 #include <asm/unaligned.h>
21
22 #include <net/bluetooth/bluetooth.h>
23 #include <net/bluetooth/hci_core.h>
24
25 #include "btintel.h"
26 #include "btbcm.h"
27 #include "btrtl.h"
28 #include "btmtk.h"
29
30 #define VERSION "0.8"
31
32 static bool disable_scofix;
33 static bool force_scofix;
34 static bool enable_autosuspend = IS_ENABLED(CONFIG_BT_HCIBTUSB_AUTOSUSPEND);
35 static bool enable_poll_sync = IS_ENABLED(CONFIG_BT_HCIBTUSB_POLL_SYNC);
36 static bool reset = true;
37
38 static struct usb_driver btusb_driver;
39
40 #define BTUSB_IGNORE                    BIT(0)
41 #define BTUSB_DIGIANSWER                BIT(1)
42 #define BTUSB_CSR                       BIT(2)
43 #define BTUSB_SNIFFER                   BIT(3)
44 #define BTUSB_BCM92035                  BIT(4)
45 #define BTUSB_BROKEN_ISOC               BIT(5)
46 #define BTUSB_WRONG_SCO_MTU             BIT(6)
47 #define BTUSB_ATH3012                   BIT(7)
48 #define BTUSB_INTEL_COMBINED            BIT(8)
49 #define BTUSB_INTEL_BOOT                BIT(9)
50 #define BTUSB_BCM_PATCHRAM              BIT(10)
51 #define BTUSB_MARVELL                   BIT(11)
52 #define BTUSB_SWAVE                     BIT(12)
53 #define BTUSB_AMP                       BIT(13)
54 #define BTUSB_QCA_ROME                  BIT(14)
55 #define BTUSB_BCM_APPLE                 BIT(15)
56 #define BTUSB_REALTEK                   BIT(16)
57 #define BTUSB_BCM2045                   BIT(17)
58 #define BTUSB_IFNUM_2                   BIT(18)
59 #define BTUSB_CW6622                    BIT(19)
60 #define BTUSB_MEDIATEK                  BIT(20)
61 #define BTUSB_WIDEBAND_SPEECH           BIT(21)
62 #define BTUSB_VALID_LE_STATES           BIT(22)
63 #define BTUSB_QCA_WCN6855               BIT(23)
64 #define BTUSB_INTEL_BROKEN_SHUTDOWN_LED BIT(24)
65 #define BTUSB_INTEL_BROKEN_INITIAL_NCMD BIT(25)
66 #define BTUSB_INTEL_NO_WBS_SUPPORT      BIT(26)
67 #define BTUSB_ACTIONS_SEMI              BIT(27)
68
69 static const struct usb_device_id btusb_table[] = {
70         /* Generic Bluetooth USB device */
71         { USB_DEVICE_INFO(0xe0, 0x01, 0x01) },
72
73         /* Generic Bluetooth AMP device */
74         { USB_DEVICE_INFO(0xe0, 0x01, 0x04), .driver_info = BTUSB_AMP },
75
76         /* Generic Bluetooth USB interface */
77         { USB_INTERFACE_INFO(0xe0, 0x01, 0x01) },
78
79         /* Apple-specific (Broadcom) devices */
80         { USB_VENDOR_AND_INTERFACE_INFO(0x05ac, 0xff, 0x01, 0x01),
81           .driver_info = BTUSB_BCM_APPLE | BTUSB_IFNUM_2 },
82
83         /* MediaTek MT76x0E */
84         { USB_DEVICE(0x0e8d, 0x763f) },
85
86         /* Broadcom SoftSailing reporting vendor specific */
87         { USB_DEVICE(0x0a5c, 0x21e1) },
88
89         /* Apple MacBookPro 7,1 */
90         { USB_DEVICE(0x05ac, 0x8213) },
91
92         /* Apple iMac11,1 */
93         { USB_DEVICE(0x05ac, 0x8215) },
94
95         /* Apple MacBookPro6,2 */
96         { USB_DEVICE(0x05ac, 0x8218) },
97
98         /* Apple MacBookAir3,1, MacBookAir3,2 */
99         { USB_DEVICE(0x05ac, 0x821b) },
100
101         /* Apple MacBookAir4,1 */
102         { USB_DEVICE(0x05ac, 0x821f) },
103
104         /* Apple MacBookPro8,2 */
105         { USB_DEVICE(0x05ac, 0x821a) },
106
107         /* Apple MacMini5,1 */
108         { USB_DEVICE(0x05ac, 0x8281) },
109
110         /* AVM BlueFRITZ! USB v2.0 */
111         { USB_DEVICE(0x057c, 0x3800), .driver_info = BTUSB_SWAVE },
112
113         /* Bluetooth Ultraport Module from IBM */
114         { USB_DEVICE(0x04bf, 0x030a) },
115
116         /* ALPS Modules with non-standard id */
117         { USB_DEVICE(0x044e, 0x3001) },
118         { USB_DEVICE(0x044e, 0x3002) },
119
120         /* Ericsson with non-standard id */
121         { USB_DEVICE(0x0bdb, 0x1002) },
122
123         /* Canyon CN-BTU1 with HID interfaces */
124         { USB_DEVICE(0x0c10, 0x0000) },
125
126         /* Broadcom BCM20702B0 (Dynex/Insignia) */
127         { USB_DEVICE(0x19ff, 0x0239), .driver_info = BTUSB_BCM_PATCHRAM },
128
129         /* Broadcom BCM43142A0 (Foxconn/Lenovo) */
130         { USB_VENDOR_AND_INTERFACE_INFO(0x105b, 0xff, 0x01, 0x01),
131           .driver_info = BTUSB_BCM_PATCHRAM },
132
133         /* Broadcom BCM920703 (HTC Vive) */
134         { USB_VENDOR_AND_INTERFACE_INFO(0x0bb4, 0xff, 0x01, 0x01),
135           .driver_info = BTUSB_BCM_PATCHRAM },
136
137         /* Foxconn - Hon Hai */
138         { USB_VENDOR_AND_INTERFACE_INFO(0x0489, 0xff, 0x01, 0x01),
139           .driver_info = BTUSB_BCM_PATCHRAM },
140
141         /* Lite-On Technology - Broadcom based */
142         { USB_VENDOR_AND_INTERFACE_INFO(0x04ca, 0xff, 0x01, 0x01),
143           .driver_info = BTUSB_BCM_PATCHRAM },
144
145         /* Broadcom devices with vendor specific id */
146         { USB_VENDOR_AND_INTERFACE_INFO(0x0a5c, 0xff, 0x01, 0x01),
147           .driver_info = BTUSB_BCM_PATCHRAM },
148
149         /* ASUSTek Computer - Broadcom based */
150         { USB_VENDOR_AND_INTERFACE_INFO(0x0b05, 0xff, 0x01, 0x01),
151           .driver_info = BTUSB_BCM_PATCHRAM },
152
153         /* Belkin F8065bf - Broadcom based */
154         { USB_VENDOR_AND_INTERFACE_INFO(0x050d, 0xff, 0x01, 0x01),
155           .driver_info = BTUSB_BCM_PATCHRAM },
156
157         /* IMC Networks - Broadcom based */
158         { USB_VENDOR_AND_INTERFACE_INFO(0x13d3, 0xff, 0x01, 0x01),
159           .driver_info = BTUSB_BCM_PATCHRAM },
160
161         /* Dell Computer - Broadcom based  */
162         { USB_VENDOR_AND_INTERFACE_INFO(0x413c, 0xff, 0x01, 0x01),
163           .driver_info = BTUSB_BCM_PATCHRAM },
164
165         /* Toshiba Corp - Broadcom based */
166         { USB_VENDOR_AND_INTERFACE_INFO(0x0930, 0xff, 0x01, 0x01),
167           .driver_info = BTUSB_BCM_PATCHRAM },
168
169         /* Intel Bluetooth USB Bootloader (RAM module) */
170         { USB_DEVICE(0x8087, 0x0a5a),
171           .driver_info = BTUSB_INTEL_BOOT | BTUSB_BROKEN_ISOC },
172
173         { }     /* Terminating entry */
174 };
175
176 MODULE_DEVICE_TABLE(usb, btusb_table);
177
178 static const struct usb_device_id blacklist_table[] = {
179         /* CSR BlueCore devices */
180         { USB_DEVICE(0x0a12, 0x0001), .driver_info = BTUSB_CSR },
181
182         /* Broadcom BCM2033 without firmware */
183         { USB_DEVICE(0x0a5c, 0x2033), .driver_info = BTUSB_IGNORE },
184
185         /* Broadcom BCM2045 devices */
186         { USB_DEVICE(0x0a5c, 0x2045), .driver_info = BTUSB_BCM2045 },
187
188         /* Atheros 3011 with sflash firmware */
189         { USB_DEVICE(0x0489, 0xe027), .driver_info = BTUSB_IGNORE },
190         { USB_DEVICE(0x0489, 0xe03d), .driver_info = BTUSB_IGNORE },
191         { USB_DEVICE(0x04f2, 0xaff1), .driver_info = BTUSB_IGNORE },
192         { USB_DEVICE(0x0930, 0x0215), .driver_info = BTUSB_IGNORE },
193         { USB_DEVICE(0x0cf3, 0x3002), .driver_info = BTUSB_IGNORE },
194         { USB_DEVICE(0x0cf3, 0xe019), .driver_info = BTUSB_IGNORE },
195         { USB_DEVICE(0x13d3, 0x3304), .driver_info = BTUSB_IGNORE },
196
197         /* Atheros AR9285 Malbec with sflash firmware */
198         { USB_DEVICE(0x03f0, 0x311d), .driver_info = BTUSB_IGNORE },
199
200         /* Atheros 3012 with sflash firmware */
201         { USB_DEVICE(0x0489, 0xe04d), .driver_info = BTUSB_ATH3012 },
202         { USB_DEVICE(0x0489, 0xe04e), .driver_info = BTUSB_ATH3012 },
203         { USB_DEVICE(0x0489, 0xe056), .driver_info = BTUSB_ATH3012 },
204         { USB_DEVICE(0x0489, 0xe057), .driver_info = BTUSB_ATH3012 },
205         { USB_DEVICE(0x0489, 0xe05f), .driver_info = BTUSB_ATH3012 },
206         { USB_DEVICE(0x0489, 0xe076), .driver_info = BTUSB_ATH3012 },
207         { USB_DEVICE(0x0489, 0xe078), .driver_info = BTUSB_ATH3012 },
208         { USB_DEVICE(0x0489, 0xe095), .driver_info = BTUSB_ATH3012 },
209         { USB_DEVICE(0x04c5, 0x1330), .driver_info = BTUSB_ATH3012 },
210         { USB_DEVICE(0x04ca, 0x3004), .driver_info = BTUSB_ATH3012 },
211         { USB_DEVICE(0x04ca, 0x3005), .driver_info = BTUSB_ATH3012 },
212         { USB_DEVICE(0x04ca, 0x3006), .driver_info = BTUSB_ATH3012 },
213         { USB_DEVICE(0x04ca, 0x3007), .driver_info = BTUSB_ATH3012 },
214         { USB_DEVICE(0x04ca, 0x3008), .driver_info = BTUSB_ATH3012 },
215         { USB_DEVICE(0x04ca, 0x300b), .driver_info = BTUSB_ATH3012 },
216         { USB_DEVICE(0x04ca, 0x300d), .driver_info = BTUSB_ATH3012 },
217         { USB_DEVICE(0x04ca, 0x300f), .driver_info = BTUSB_ATH3012 },
218         { USB_DEVICE(0x04ca, 0x3010), .driver_info = BTUSB_ATH3012 },
219         { USB_DEVICE(0x04ca, 0x3014), .driver_info = BTUSB_ATH3012 },
220         { USB_DEVICE(0x04ca, 0x3018), .driver_info = BTUSB_ATH3012 },
221         { USB_DEVICE(0x0930, 0x0219), .driver_info = BTUSB_ATH3012 },
222         { USB_DEVICE(0x0930, 0x021c), .driver_info = BTUSB_ATH3012 },
223         { USB_DEVICE(0x0930, 0x0220), .driver_info = BTUSB_ATH3012 },
224         { USB_DEVICE(0x0930, 0x0227), .driver_info = BTUSB_ATH3012 },
225         { USB_DEVICE(0x0b05, 0x17d0), .driver_info = BTUSB_ATH3012 },
226         { USB_DEVICE(0x0cf3, 0x0036), .driver_info = BTUSB_ATH3012 },
227         { USB_DEVICE(0x0cf3, 0x3004), .driver_info = BTUSB_ATH3012 },
228         { USB_DEVICE(0x0cf3, 0x3008), .driver_info = BTUSB_ATH3012 },
229         { USB_DEVICE(0x0cf3, 0x311d), .driver_info = BTUSB_ATH3012 },
230         { USB_DEVICE(0x0cf3, 0x311e), .driver_info = BTUSB_ATH3012 },
231         { USB_DEVICE(0x0cf3, 0x311f), .driver_info = BTUSB_ATH3012 },
232         { USB_DEVICE(0x0cf3, 0x3121), .driver_info = BTUSB_ATH3012 },
233         { USB_DEVICE(0x0cf3, 0x817a), .driver_info = BTUSB_ATH3012 },
234         { USB_DEVICE(0x0cf3, 0x817b), .driver_info = BTUSB_ATH3012 },
235         { USB_DEVICE(0x0cf3, 0xe003), .driver_info = BTUSB_ATH3012 },
236         { USB_DEVICE(0x0cf3, 0xe004), .driver_info = BTUSB_ATH3012 },
237         { USB_DEVICE(0x0cf3, 0xe005), .driver_info = BTUSB_ATH3012 },
238         { USB_DEVICE(0x0cf3, 0xe006), .driver_info = BTUSB_ATH3012 },
239         { USB_DEVICE(0x13d3, 0x3362), .driver_info = BTUSB_ATH3012 },
240         { USB_DEVICE(0x13d3, 0x3375), .driver_info = BTUSB_ATH3012 },
241         { USB_DEVICE(0x13d3, 0x3393), .driver_info = BTUSB_ATH3012 },
242         { USB_DEVICE(0x13d3, 0x3395), .driver_info = BTUSB_ATH3012 },
243         { USB_DEVICE(0x13d3, 0x3402), .driver_info = BTUSB_ATH3012 },
244         { USB_DEVICE(0x13d3, 0x3408), .driver_info = BTUSB_ATH3012 },
245         { USB_DEVICE(0x13d3, 0x3423), .driver_info = BTUSB_ATH3012 },
246         { USB_DEVICE(0x13d3, 0x3432), .driver_info = BTUSB_ATH3012 },
247         { USB_DEVICE(0x13d3, 0x3472), .driver_info = BTUSB_ATH3012 },
248         { USB_DEVICE(0x13d3, 0x3474), .driver_info = BTUSB_ATH3012 },
249         { USB_DEVICE(0x13d3, 0x3487), .driver_info = BTUSB_ATH3012 },
250         { USB_DEVICE(0x13d3, 0x3490), .driver_info = BTUSB_ATH3012 },
251
252         /* Atheros AR5BBU12 with sflash firmware */
253         { USB_DEVICE(0x0489, 0xe02c), .driver_info = BTUSB_IGNORE },
254
255         /* Atheros AR5BBU12 with sflash firmware */
256         { USB_DEVICE(0x0489, 0xe036), .driver_info = BTUSB_ATH3012 },
257         { USB_DEVICE(0x0489, 0xe03c), .driver_info = BTUSB_ATH3012 },
258
259         /* QCA ROME chipset */
260         { USB_DEVICE(0x0cf3, 0x535b), .driver_info = BTUSB_QCA_ROME |
261                                                      BTUSB_WIDEBAND_SPEECH },
262         { USB_DEVICE(0x0cf3, 0xe007), .driver_info = BTUSB_QCA_ROME |
263                                                      BTUSB_WIDEBAND_SPEECH },
264         { USB_DEVICE(0x0cf3, 0xe009), .driver_info = BTUSB_QCA_ROME |
265                                                      BTUSB_WIDEBAND_SPEECH },
266         { USB_DEVICE(0x0cf3, 0xe010), .driver_info = BTUSB_QCA_ROME |
267                                                      BTUSB_WIDEBAND_SPEECH },
268         { USB_DEVICE(0x0cf3, 0xe300), .driver_info = BTUSB_QCA_ROME |
269                                                      BTUSB_WIDEBAND_SPEECH },
270         { USB_DEVICE(0x0cf3, 0xe301), .driver_info = BTUSB_QCA_ROME |
271                                                      BTUSB_WIDEBAND_SPEECH },
272         { USB_DEVICE(0x0cf3, 0xe360), .driver_info = BTUSB_QCA_ROME |
273                                                      BTUSB_WIDEBAND_SPEECH },
274         { USB_DEVICE(0x0cf3, 0xe500), .driver_info = BTUSB_QCA_ROME |
275                                                      BTUSB_WIDEBAND_SPEECH },
276         { USB_DEVICE(0x0489, 0xe092), .driver_info = BTUSB_QCA_ROME |
277                                                      BTUSB_WIDEBAND_SPEECH },
278         { USB_DEVICE(0x0489, 0xe09f), .driver_info = BTUSB_QCA_ROME |
279                                                      BTUSB_WIDEBAND_SPEECH },
280         { USB_DEVICE(0x0489, 0xe0a2), .driver_info = BTUSB_QCA_ROME |
281                                                      BTUSB_WIDEBAND_SPEECH },
282         { USB_DEVICE(0x04ca, 0x3011), .driver_info = BTUSB_QCA_ROME |
283                                                      BTUSB_WIDEBAND_SPEECH },
284         { USB_DEVICE(0x04ca, 0x3015), .driver_info = BTUSB_QCA_ROME |
285                                                      BTUSB_WIDEBAND_SPEECH },
286         { USB_DEVICE(0x04ca, 0x3016), .driver_info = BTUSB_QCA_ROME |
287                                                      BTUSB_WIDEBAND_SPEECH },
288         { USB_DEVICE(0x04ca, 0x301a), .driver_info = BTUSB_QCA_ROME |
289                                                      BTUSB_WIDEBAND_SPEECH },
290         { USB_DEVICE(0x04ca, 0x3021), .driver_info = BTUSB_QCA_ROME |
291                                                      BTUSB_WIDEBAND_SPEECH },
292         { USB_DEVICE(0x13d3, 0x3491), .driver_info = BTUSB_QCA_ROME |
293                                                      BTUSB_WIDEBAND_SPEECH },
294         { USB_DEVICE(0x13d3, 0x3496), .driver_info = BTUSB_QCA_ROME |
295                                                      BTUSB_WIDEBAND_SPEECH },
296         { USB_DEVICE(0x13d3, 0x3501), .driver_info = BTUSB_QCA_ROME |
297                                                      BTUSB_WIDEBAND_SPEECH },
298
299         /* QCA WCN6855 chipset */
300         { USB_DEVICE(0x0cf3, 0xe600), .driver_info = BTUSB_QCA_WCN6855 |
301                                                      BTUSB_WIDEBAND_SPEECH |
302                                                      BTUSB_VALID_LE_STATES },
303         { USB_DEVICE(0x0489, 0xe0cc), .driver_info = BTUSB_QCA_WCN6855 |
304                                                      BTUSB_WIDEBAND_SPEECH |
305                                                      BTUSB_VALID_LE_STATES },
306         { USB_DEVICE(0x0489, 0xe0d6), .driver_info = BTUSB_QCA_WCN6855 |
307                                                      BTUSB_WIDEBAND_SPEECH |
308                                                      BTUSB_VALID_LE_STATES },
309         { USB_DEVICE(0x0489, 0xe0e3), .driver_info = BTUSB_QCA_WCN6855 |
310                                                      BTUSB_WIDEBAND_SPEECH |
311                                                      BTUSB_VALID_LE_STATES },
312         { USB_DEVICE(0x10ab, 0x9309), .driver_info = BTUSB_QCA_WCN6855 |
313                                                      BTUSB_WIDEBAND_SPEECH |
314                                                      BTUSB_VALID_LE_STATES },
315         { USB_DEVICE(0x10ab, 0x9409), .driver_info = BTUSB_QCA_WCN6855 |
316                                                      BTUSB_WIDEBAND_SPEECH |
317                                                      BTUSB_VALID_LE_STATES },
318         { USB_DEVICE(0x0489, 0xe0d0), .driver_info = BTUSB_QCA_WCN6855 |
319                                                      BTUSB_WIDEBAND_SPEECH |
320                                                      BTUSB_VALID_LE_STATES },
321         { USB_DEVICE(0x10ab, 0x9108), .driver_info = BTUSB_QCA_WCN6855 |
322                                                      BTUSB_WIDEBAND_SPEECH |
323                                                      BTUSB_VALID_LE_STATES },
324         { USB_DEVICE(0x10ab, 0x9109), .driver_info = BTUSB_QCA_WCN6855 |
325                                                      BTUSB_WIDEBAND_SPEECH |
326                                                      BTUSB_VALID_LE_STATES },
327         { USB_DEVICE(0x10ab, 0x9208), .driver_info = BTUSB_QCA_WCN6855 |
328                                                      BTUSB_WIDEBAND_SPEECH |
329                                                      BTUSB_VALID_LE_STATES },
330         { USB_DEVICE(0x10ab, 0x9209), .driver_info = BTUSB_QCA_WCN6855 |
331                                                      BTUSB_WIDEBAND_SPEECH |
332                                                      BTUSB_VALID_LE_STATES },
333         { USB_DEVICE(0x10ab, 0x9308), .driver_info = BTUSB_QCA_WCN6855 |
334                                                      BTUSB_WIDEBAND_SPEECH |
335                                                      BTUSB_VALID_LE_STATES },
336         { USB_DEVICE(0x10ab, 0x9408), .driver_info = BTUSB_QCA_WCN6855 |
337                                                      BTUSB_WIDEBAND_SPEECH |
338                                                      BTUSB_VALID_LE_STATES },
339         { USB_DEVICE(0x10ab, 0x9508), .driver_info = BTUSB_QCA_WCN6855 |
340                                                      BTUSB_WIDEBAND_SPEECH |
341                                                      BTUSB_VALID_LE_STATES },
342         { USB_DEVICE(0x10ab, 0x9509), .driver_info = BTUSB_QCA_WCN6855 |
343                                                      BTUSB_WIDEBAND_SPEECH |
344                                                      BTUSB_VALID_LE_STATES },
345         { USB_DEVICE(0x10ab, 0x9608), .driver_info = BTUSB_QCA_WCN6855 |
346                                                      BTUSB_WIDEBAND_SPEECH |
347                                                      BTUSB_VALID_LE_STATES },
348         { USB_DEVICE(0x10ab, 0x9609), .driver_info = BTUSB_QCA_WCN6855 |
349                                                      BTUSB_WIDEBAND_SPEECH |
350                                                      BTUSB_VALID_LE_STATES },
351         { USB_DEVICE(0x10ab, 0x9f09), .driver_info = BTUSB_QCA_WCN6855 |
352                                                      BTUSB_WIDEBAND_SPEECH |
353                                                      BTUSB_VALID_LE_STATES },
354         { USB_DEVICE(0x04ca, 0x3022), .driver_info = BTUSB_QCA_WCN6855 |
355                                                      BTUSB_WIDEBAND_SPEECH |
356                                                      BTUSB_VALID_LE_STATES },
357         { USB_DEVICE(0x0489, 0xe0c7), .driver_info = BTUSB_QCA_WCN6855 |
358                                                      BTUSB_WIDEBAND_SPEECH |
359                                                      BTUSB_VALID_LE_STATES },
360         { USB_DEVICE(0x0489, 0xe0c9), .driver_info = BTUSB_QCA_WCN6855 |
361                                                      BTUSB_WIDEBAND_SPEECH |
362                                                      BTUSB_VALID_LE_STATES },
363         { USB_DEVICE(0x0489, 0xe0ca), .driver_info = BTUSB_QCA_WCN6855 |
364                                                      BTUSB_WIDEBAND_SPEECH |
365                                                      BTUSB_VALID_LE_STATES },
366         { USB_DEVICE(0x0489, 0xe0cb), .driver_info = BTUSB_QCA_WCN6855 |
367                                                      BTUSB_WIDEBAND_SPEECH |
368                                                      BTUSB_VALID_LE_STATES },
369         { USB_DEVICE(0x0489, 0xe0ce), .driver_info = BTUSB_QCA_WCN6855 |
370                                                      BTUSB_WIDEBAND_SPEECH |
371                                                      BTUSB_VALID_LE_STATES },
372         { USB_DEVICE(0x0489, 0xe0de), .driver_info = BTUSB_QCA_WCN6855 |
373                                                      BTUSB_WIDEBAND_SPEECH |
374                                                      BTUSB_VALID_LE_STATES },
375         { USB_DEVICE(0x0489, 0xe0df), .driver_info = BTUSB_QCA_WCN6855 |
376                                                      BTUSB_WIDEBAND_SPEECH |
377                                                      BTUSB_VALID_LE_STATES },
378         { USB_DEVICE(0x0489, 0xe0e1), .driver_info = BTUSB_QCA_WCN6855 |
379                                                      BTUSB_WIDEBAND_SPEECH |
380                                                      BTUSB_VALID_LE_STATES },
381         { USB_DEVICE(0x0489, 0xe0ea), .driver_info = BTUSB_QCA_WCN6855 |
382                                                      BTUSB_WIDEBAND_SPEECH |
383                                                      BTUSB_VALID_LE_STATES },
384         { USB_DEVICE(0x0489, 0xe0ec), .driver_info = BTUSB_QCA_WCN6855 |
385                                                      BTUSB_WIDEBAND_SPEECH |
386                                                      BTUSB_VALID_LE_STATES },
387         { USB_DEVICE(0x04ca, 0x3023), .driver_info = BTUSB_QCA_WCN6855 |
388                                                      BTUSB_WIDEBAND_SPEECH |
389                                                      BTUSB_VALID_LE_STATES },
390         { USB_DEVICE(0x04ca, 0x3024), .driver_info = BTUSB_QCA_WCN6855 |
391                                                      BTUSB_WIDEBAND_SPEECH |
392                                                      BTUSB_VALID_LE_STATES },
393         { USB_DEVICE(0x04ca, 0x3a22), .driver_info = BTUSB_QCA_WCN6855 |
394                                                      BTUSB_WIDEBAND_SPEECH |
395                                                      BTUSB_VALID_LE_STATES },
396         { USB_DEVICE(0x04ca, 0x3a24), .driver_info = BTUSB_QCA_WCN6855 |
397                                                      BTUSB_WIDEBAND_SPEECH |
398                                                      BTUSB_VALID_LE_STATES },
399         { USB_DEVICE(0x04ca, 0x3a26), .driver_info = BTUSB_QCA_WCN6855 |
400                                                      BTUSB_WIDEBAND_SPEECH |
401                                                      BTUSB_VALID_LE_STATES },
402         { USB_DEVICE(0x04ca, 0x3a27), .driver_info = BTUSB_QCA_WCN6855 |
403                                                      BTUSB_WIDEBAND_SPEECH |
404                                                      BTUSB_VALID_LE_STATES },
405
406         /* QCA WCN785x chipset */
407         { USB_DEVICE(0x0cf3, 0xe700), .driver_info = BTUSB_QCA_WCN6855 |
408                                                      BTUSB_WIDEBAND_SPEECH |
409                                                      BTUSB_VALID_LE_STATES },
410
411         /* Broadcom BCM2035 */
412         { USB_DEVICE(0x0a5c, 0x2009), .driver_info = BTUSB_BCM92035 },
413         { USB_DEVICE(0x0a5c, 0x200a), .driver_info = BTUSB_WRONG_SCO_MTU },
414         { USB_DEVICE(0x0a5c, 0x2035), .driver_info = BTUSB_WRONG_SCO_MTU },
415
416         /* Broadcom BCM2045 */
417         { USB_DEVICE(0x0a5c, 0x2039), .driver_info = BTUSB_WRONG_SCO_MTU },
418         { USB_DEVICE(0x0a5c, 0x2101), .driver_info = BTUSB_WRONG_SCO_MTU },
419
420         /* IBM/Lenovo ThinkPad with Broadcom chip */
421         { USB_DEVICE(0x0a5c, 0x201e), .driver_info = BTUSB_WRONG_SCO_MTU },
422         { USB_DEVICE(0x0a5c, 0x2110), .driver_info = BTUSB_WRONG_SCO_MTU },
423
424         /* HP laptop with Broadcom chip */
425         { USB_DEVICE(0x03f0, 0x171d), .driver_info = BTUSB_WRONG_SCO_MTU },
426
427         /* Dell laptop with Broadcom chip */
428         { USB_DEVICE(0x413c, 0x8126), .driver_info = BTUSB_WRONG_SCO_MTU },
429
430         /* Dell Wireless 370 and 410 devices */
431         { USB_DEVICE(0x413c, 0x8152), .driver_info = BTUSB_WRONG_SCO_MTU },
432         { USB_DEVICE(0x413c, 0x8156), .driver_info = BTUSB_WRONG_SCO_MTU },
433
434         /* Belkin F8T012 and F8T013 devices */
435         { USB_DEVICE(0x050d, 0x0012), .driver_info = BTUSB_WRONG_SCO_MTU },
436         { USB_DEVICE(0x050d, 0x0013), .driver_info = BTUSB_WRONG_SCO_MTU },
437
438         /* Asus WL-BTD202 device */
439         { USB_DEVICE(0x0b05, 0x1715), .driver_info = BTUSB_WRONG_SCO_MTU },
440
441         /* Kensington Bluetooth USB adapter */
442         { USB_DEVICE(0x047d, 0x105e), .driver_info = BTUSB_WRONG_SCO_MTU },
443
444         /* RTX Telecom based adapters with buggy SCO support */
445         { USB_DEVICE(0x0400, 0x0807), .driver_info = BTUSB_BROKEN_ISOC },
446         { USB_DEVICE(0x0400, 0x080a), .driver_info = BTUSB_BROKEN_ISOC },
447
448         /* CONWISE Technology based adapters with buggy SCO support */
449         { USB_DEVICE(0x0e5e, 0x6622),
450           .driver_info = BTUSB_BROKEN_ISOC | BTUSB_CW6622},
451
452         /* Roper Class 1 Bluetooth Dongle (Silicon Wave based) */
453         { USB_DEVICE(0x1310, 0x0001), .driver_info = BTUSB_SWAVE },
454
455         /* Digianswer devices */
456         { USB_DEVICE(0x08fd, 0x0001), .driver_info = BTUSB_DIGIANSWER },
457         { USB_DEVICE(0x08fd, 0x0002), .driver_info = BTUSB_IGNORE },
458
459         /* CSR BlueCore Bluetooth Sniffer */
460         { USB_DEVICE(0x0a12, 0x0002),
461           .driver_info = BTUSB_SNIFFER | BTUSB_BROKEN_ISOC },
462
463         /* Frontline ComProbe Bluetooth Sniffer */
464         { USB_DEVICE(0x16d3, 0x0002),
465           .driver_info = BTUSB_SNIFFER | BTUSB_BROKEN_ISOC },
466
467         /* Marvell Bluetooth devices */
468         { USB_DEVICE(0x1286, 0x2044), .driver_info = BTUSB_MARVELL },
469         { USB_DEVICE(0x1286, 0x2046), .driver_info = BTUSB_MARVELL },
470         { USB_DEVICE(0x1286, 0x204e), .driver_info = BTUSB_MARVELL },
471
472         /* Intel Bluetooth devices */
473         { USB_DEVICE(0x8087, 0x0025), .driver_info = BTUSB_INTEL_COMBINED },
474         { USB_DEVICE(0x8087, 0x0026), .driver_info = BTUSB_INTEL_COMBINED },
475         { USB_DEVICE(0x8087, 0x0029), .driver_info = BTUSB_INTEL_COMBINED },
476         { USB_DEVICE(0x8087, 0x0032), .driver_info = BTUSB_INTEL_COMBINED },
477         { USB_DEVICE(0x8087, 0x0033), .driver_info = BTUSB_INTEL_COMBINED },
478         { USB_DEVICE(0x8087, 0x0035), .driver_info = BTUSB_INTEL_COMBINED },
479         { USB_DEVICE(0x8087, 0x0036), .driver_info = BTUSB_INTEL_COMBINED },
480         { USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR },
481         { USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL_COMBINED |
482                                                      BTUSB_INTEL_NO_WBS_SUPPORT |
483                                                      BTUSB_INTEL_BROKEN_INITIAL_NCMD |
484                                                      BTUSB_INTEL_BROKEN_SHUTDOWN_LED },
485         { USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL_COMBINED |
486                                                      BTUSB_INTEL_NO_WBS_SUPPORT |
487                                                      BTUSB_INTEL_BROKEN_SHUTDOWN_LED },
488         { USB_DEVICE(0x8087, 0x0a2b), .driver_info = BTUSB_INTEL_COMBINED },
489         { USB_DEVICE(0x8087, 0x0aa7), .driver_info = BTUSB_INTEL_COMBINED |
490                                                      BTUSB_INTEL_BROKEN_SHUTDOWN_LED },
491         { USB_DEVICE(0x8087, 0x0aaa), .driver_info = BTUSB_INTEL_COMBINED },
492
493         /* Other Intel Bluetooth devices */
494         { USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01),
495           .driver_info = BTUSB_IGNORE },
496
497         /* Realtek 8821CE Bluetooth devices */
498         { USB_DEVICE(0x13d3, 0x3529), .driver_info = BTUSB_REALTEK |
499                                                      BTUSB_WIDEBAND_SPEECH },
500
501         /* Realtek 8822CE Bluetooth devices */
502         { USB_DEVICE(0x0bda, 0xb00c), .driver_info = BTUSB_REALTEK |
503                                                      BTUSB_WIDEBAND_SPEECH },
504         { USB_DEVICE(0x0bda, 0xc822), .driver_info = BTUSB_REALTEK |
505                                                      BTUSB_WIDEBAND_SPEECH },
506
507         /* Realtek 8822CU Bluetooth devices */
508         { USB_DEVICE(0x13d3, 0x3549), .driver_info = BTUSB_REALTEK |
509                                                      BTUSB_WIDEBAND_SPEECH },
510
511         /* Realtek 8852AE Bluetooth devices */
512         { USB_DEVICE(0x0bda, 0x2852), .driver_info = BTUSB_REALTEK |
513                                                      BTUSB_WIDEBAND_SPEECH },
514         { USB_DEVICE(0x0bda, 0xc852), .driver_info = BTUSB_REALTEK |
515                                                      BTUSB_WIDEBAND_SPEECH },
516         { USB_DEVICE(0x0bda, 0x385a), .driver_info = BTUSB_REALTEK |
517                                                      BTUSB_WIDEBAND_SPEECH },
518         { USB_DEVICE(0x0bda, 0x4852), .driver_info = BTUSB_REALTEK |
519                                                      BTUSB_WIDEBAND_SPEECH },
520         { USB_DEVICE(0x04c5, 0x165c), .driver_info = BTUSB_REALTEK |
521                                                      BTUSB_WIDEBAND_SPEECH },
522         { USB_DEVICE(0x04ca, 0x4006), .driver_info = BTUSB_REALTEK |
523                                                      BTUSB_WIDEBAND_SPEECH },
524         { USB_DEVICE(0x0cb8, 0xc549), .driver_info = BTUSB_REALTEK |
525                                                      BTUSB_WIDEBAND_SPEECH },
526
527         /* Realtek 8852CE Bluetooth devices */
528         { USB_DEVICE(0x04ca, 0x4007), .driver_info = BTUSB_REALTEK |
529                                                      BTUSB_WIDEBAND_SPEECH },
530         { USB_DEVICE(0x04c5, 0x1675), .driver_info = BTUSB_REALTEK |
531                                                      BTUSB_WIDEBAND_SPEECH },
532         { USB_DEVICE(0x0cb8, 0xc558), .driver_info = BTUSB_REALTEK |
533                                                      BTUSB_WIDEBAND_SPEECH },
534         { USB_DEVICE(0x13d3, 0x3587), .driver_info = BTUSB_REALTEK |
535                                                      BTUSB_WIDEBAND_SPEECH },
536         { USB_DEVICE(0x13d3, 0x3586), .driver_info = BTUSB_REALTEK |
537                                                      BTUSB_WIDEBAND_SPEECH },
538         { USB_DEVICE(0x13d3, 0x3592), .driver_info = BTUSB_REALTEK |
539                                                      BTUSB_WIDEBAND_SPEECH },
540
541         /* Realtek 8852BE Bluetooth devices */
542         { USB_DEVICE(0x0cb8, 0xc559), .driver_info = BTUSB_REALTEK |
543                                                      BTUSB_WIDEBAND_SPEECH },
544         { USB_DEVICE(0x0bda, 0x887b), .driver_info = BTUSB_REALTEK |
545                                                      BTUSB_WIDEBAND_SPEECH },
546         { USB_DEVICE(0x13d3, 0x3571), .driver_info = BTUSB_REALTEK |
547                                                      BTUSB_WIDEBAND_SPEECH },
548
549         /* Realtek Bluetooth devices */
550         { USB_VENDOR_AND_INTERFACE_INFO(0x0bda, 0xe0, 0x01, 0x01),
551           .driver_info = BTUSB_REALTEK },
552
553         /* MediaTek Bluetooth devices */
554         { USB_VENDOR_AND_INTERFACE_INFO(0x0e8d, 0xe0, 0x01, 0x01),
555           .driver_info = BTUSB_MEDIATEK |
556                          BTUSB_WIDEBAND_SPEECH |
557                          BTUSB_VALID_LE_STATES },
558
559         /* Additional MediaTek MT7615E Bluetooth devices */
560         { USB_DEVICE(0x13d3, 0x3560), .driver_info = BTUSB_MEDIATEK},
561
562         /* Additional MediaTek MT7663 Bluetooth devices */
563         { USB_DEVICE(0x043e, 0x310c), .driver_info = BTUSB_MEDIATEK |
564                                                      BTUSB_WIDEBAND_SPEECH |
565                                                      BTUSB_VALID_LE_STATES },
566         { USB_DEVICE(0x04ca, 0x3801), .driver_info = BTUSB_MEDIATEK |
567                                                      BTUSB_WIDEBAND_SPEECH |
568                                                      BTUSB_VALID_LE_STATES },
569
570         /* Additional MediaTek MT7668 Bluetooth devices */
571         { USB_DEVICE(0x043e, 0x3109), .driver_info = BTUSB_MEDIATEK |
572                                                      BTUSB_WIDEBAND_SPEECH |
573                                                      BTUSB_VALID_LE_STATES },
574
575         /* Additional MediaTek MT7921 Bluetooth devices */
576         { USB_DEVICE(0x0489, 0xe0c8), .driver_info = BTUSB_MEDIATEK |
577                                                      BTUSB_WIDEBAND_SPEECH |
578                                                      BTUSB_VALID_LE_STATES },
579         { USB_DEVICE(0x0489, 0xe0e0), .driver_info = BTUSB_MEDIATEK |
580                                                      BTUSB_WIDEBAND_SPEECH |
581                                                      BTUSB_VALID_LE_STATES },
582         { USB_DEVICE(0x0489, 0xe0f2), .driver_info = BTUSB_MEDIATEK |
583                                                      BTUSB_WIDEBAND_SPEECH |
584                                                      BTUSB_VALID_LE_STATES },
585         { USB_DEVICE(0x04ca, 0x3802), .driver_info = BTUSB_MEDIATEK |
586                                                      BTUSB_WIDEBAND_SPEECH |
587                                                      BTUSB_VALID_LE_STATES },
588         { USB_DEVICE(0x13d3, 0x3563), .driver_info = BTUSB_MEDIATEK |
589                                                      BTUSB_WIDEBAND_SPEECH |
590                                                      BTUSB_VALID_LE_STATES },
591         { USB_DEVICE(0x13d3, 0x3564), .driver_info = BTUSB_MEDIATEK |
592                                                      BTUSB_WIDEBAND_SPEECH |
593                                                      BTUSB_VALID_LE_STATES },
594         { USB_DEVICE(0x13d3, 0x3567), .driver_info = BTUSB_MEDIATEK |
595                                                      BTUSB_WIDEBAND_SPEECH |
596                                                      BTUSB_VALID_LE_STATES },
597         { USB_DEVICE(0x13d3, 0x3578), .driver_info = BTUSB_MEDIATEK |
598                                                      BTUSB_WIDEBAND_SPEECH |
599                                                      BTUSB_VALID_LE_STATES },
600         { USB_DEVICE(0x13d3, 0x3583), .driver_info = BTUSB_MEDIATEK |
601                                                      BTUSB_WIDEBAND_SPEECH |
602                                                      BTUSB_VALID_LE_STATES },
603         { USB_DEVICE(0x0489, 0xe0cd), .driver_info = BTUSB_MEDIATEK |
604                                                      BTUSB_WIDEBAND_SPEECH |
605                                                      BTUSB_VALID_LE_STATES },
606         { USB_DEVICE(0x0e8d, 0x0608), .driver_info = BTUSB_MEDIATEK |
607                                                      BTUSB_WIDEBAND_SPEECH |
608                                                      BTUSB_VALID_LE_STATES },
609
610         /* MediaTek MT7922A Bluetooth devices */
611         { USB_DEVICE(0x0489, 0xe0d8), .driver_info = BTUSB_MEDIATEK |
612                                                      BTUSB_WIDEBAND_SPEECH |
613                                                      BTUSB_VALID_LE_STATES },
614         { USB_DEVICE(0x0489, 0xe0d9), .driver_info = BTUSB_MEDIATEK |
615                                                      BTUSB_WIDEBAND_SPEECH |
616                                                      BTUSB_VALID_LE_STATES },
617         { USB_DEVICE(0x0489, 0xe0f5), .driver_info = BTUSB_MEDIATEK |
618                                                      BTUSB_WIDEBAND_SPEECH |
619                                                      BTUSB_VALID_LE_STATES },
620         { USB_DEVICE(0x13d3, 0x3568), .driver_info = BTUSB_MEDIATEK |
621                                                      BTUSB_WIDEBAND_SPEECH |
622                                                      BTUSB_VALID_LE_STATES },
623         { USB_DEVICE(0x0489, 0xe0e2), .driver_info = BTUSB_MEDIATEK |
624                                                      BTUSB_WIDEBAND_SPEECH |
625                                                      BTUSB_VALID_LE_STATES },
626         { USB_DEVICE(0x0489, 0xe0e4), .driver_info = BTUSB_MEDIATEK |
627                                                      BTUSB_WIDEBAND_SPEECH |
628                                                      BTUSB_VALID_LE_STATES },
629         { USB_DEVICE(0x0489, 0xe0f2), .driver_info = BTUSB_MEDIATEK |
630                                                      BTUSB_WIDEBAND_SPEECH |
631                                                      BTUSB_VALID_LE_STATES },
632         { USB_DEVICE(0x0489, 0xe0f5), .driver_info = BTUSB_MEDIATEK |
633                                                      BTUSB_WIDEBAND_SPEECH |
634                                                      BTUSB_VALID_LE_STATES },
635         { USB_DEVICE(0x0489, 0xe0f6), .driver_info = BTUSB_MEDIATEK |
636                                                      BTUSB_WIDEBAND_SPEECH |
637                                                      BTUSB_VALID_LE_STATES },
638         { USB_DEVICE(0x0489, 0xe102), .driver_info = BTUSB_MEDIATEK |
639                                                      BTUSB_WIDEBAND_SPEECH |
640                                                      BTUSB_VALID_LE_STATES },
641         { USB_DEVICE(0x04ca, 0x3804), .driver_info = BTUSB_MEDIATEK |
642                                                      BTUSB_WIDEBAND_SPEECH |
643                                                      BTUSB_VALID_LE_STATES },
644
645         /* Additional Realtek 8723AE Bluetooth devices */
646         { USB_DEVICE(0x0930, 0x021d), .driver_info = BTUSB_REALTEK },
647         { USB_DEVICE(0x13d3, 0x3394), .driver_info = BTUSB_REALTEK },
648
649         /* Additional Realtek 8723BE Bluetooth devices */
650         { USB_DEVICE(0x0489, 0xe085), .driver_info = BTUSB_REALTEK },
651         { USB_DEVICE(0x0489, 0xe08b), .driver_info = BTUSB_REALTEK },
652         { USB_DEVICE(0x04f2, 0xb49f), .driver_info = BTUSB_REALTEK },
653         { USB_DEVICE(0x13d3, 0x3410), .driver_info = BTUSB_REALTEK },
654         { USB_DEVICE(0x13d3, 0x3416), .driver_info = BTUSB_REALTEK },
655         { USB_DEVICE(0x13d3, 0x3459), .driver_info = BTUSB_REALTEK },
656         { USB_DEVICE(0x13d3, 0x3494), .driver_info = BTUSB_REALTEK },
657
658         /* Additional Realtek 8723BU Bluetooth devices */
659         { USB_DEVICE(0x7392, 0xa611), .driver_info = BTUSB_REALTEK },
660
661         /* Additional Realtek 8723DE Bluetooth devices */
662         { USB_DEVICE(0x0bda, 0xb009), .driver_info = BTUSB_REALTEK },
663         { USB_DEVICE(0x2ff8, 0xb011), .driver_info = BTUSB_REALTEK },
664
665         /* Additional Realtek 8761BUV Bluetooth devices */
666         { USB_DEVICE(0x2357, 0x0604), .driver_info = BTUSB_REALTEK |
667                                                      BTUSB_WIDEBAND_SPEECH },
668         { USB_DEVICE(0x0b05, 0x190e), .driver_info = BTUSB_REALTEK |
669                                                      BTUSB_WIDEBAND_SPEECH },
670         { USB_DEVICE(0x2550, 0x8761), .driver_info = BTUSB_REALTEK |
671                                                      BTUSB_WIDEBAND_SPEECH },
672         { USB_DEVICE(0x0bda, 0x8771), .driver_info = BTUSB_REALTEK |
673                                                      BTUSB_WIDEBAND_SPEECH },
674         { USB_DEVICE(0x6655, 0x8771), .driver_info = BTUSB_REALTEK |
675                                                      BTUSB_WIDEBAND_SPEECH },
676         { USB_DEVICE(0x7392, 0xc611), .driver_info = BTUSB_REALTEK |
677                                                      BTUSB_WIDEBAND_SPEECH },
678         { USB_DEVICE(0x2b89, 0x8761), .driver_info = BTUSB_REALTEK |
679                                                      BTUSB_WIDEBAND_SPEECH },
680
681         /* Additional Realtek 8821AE Bluetooth devices */
682         { USB_DEVICE(0x0b05, 0x17dc), .driver_info = BTUSB_REALTEK },
683         { USB_DEVICE(0x13d3, 0x3414), .driver_info = BTUSB_REALTEK },
684         { USB_DEVICE(0x13d3, 0x3458), .driver_info = BTUSB_REALTEK },
685         { USB_DEVICE(0x13d3, 0x3461), .driver_info = BTUSB_REALTEK },
686         { USB_DEVICE(0x13d3, 0x3462), .driver_info = BTUSB_REALTEK },
687
688         /* Additional Realtek 8822BE Bluetooth devices */
689         { USB_DEVICE(0x13d3, 0x3526), .driver_info = BTUSB_REALTEK },
690         { USB_DEVICE(0x0b05, 0x185c), .driver_info = BTUSB_REALTEK },
691
692         /* Additional Realtek 8822CE Bluetooth devices */
693         { USB_DEVICE(0x04ca, 0x4005), .driver_info = BTUSB_REALTEK |
694                                                      BTUSB_WIDEBAND_SPEECH },
695         { USB_DEVICE(0x04c5, 0x161f), .driver_info = BTUSB_REALTEK |
696                                                      BTUSB_WIDEBAND_SPEECH },
697         { USB_DEVICE(0x0b05, 0x18ef), .driver_info = BTUSB_REALTEK |
698                                                      BTUSB_WIDEBAND_SPEECH },
699         { USB_DEVICE(0x13d3, 0x3548), .driver_info = BTUSB_REALTEK |
700                                                      BTUSB_WIDEBAND_SPEECH },
701         { USB_DEVICE(0x13d3, 0x3549), .driver_info = BTUSB_REALTEK |
702                                                      BTUSB_WIDEBAND_SPEECH },
703         { USB_DEVICE(0x13d3, 0x3553), .driver_info = BTUSB_REALTEK |
704                                                      BTUSB_WIDEBAND_SPEECH },
705         { USB_DEVICE(0x13d3, 0x3555), .driver_info = BTUSB_REALTEK |
706                                                      BTUSB_WIDEBAND_SPEECH },
707         { USB_DEVICE(0x2ff8, 0x3051), .driver_info = BTUSB_REALTEK |
708                                                      BTUSB_WIDEBAND_SPEECH },
709         { USB_DEVICE(0x1358, 0xc123), .driver_info = BTUSB_REALTEK |
710                                                      BTUSB_WIDEBAND_SPEECH },
711         { USB_DEVICE(0x0bda, 0xc123), .driver_info = BTUSB_REALTEK |
712                                                      BTUSB_WIDEBAND_SPEECH },
713         { USB_DEVICE(0x0cb5, 0xc547), .driver_info = BTUSB_REALTEK |
714                                                      BTUSB_WIDEBAND_SPEECH },
715
716         /* Actions Semiconductor ATS2851 based devices */
717         { USB_DEVICE(0x10d7, 0xb012), .driver_info = BTUSB_ACTIONS_SEMI },
718
719         /* Silicon Wave based devices */
720         { USB_DEVICE(0x0c10, 0x0000), .driver_info = BTUSB_SWAVE },
721
722         { }     /* Terminating entry */
723 };
724
725 /* The Bluetooth USB module build into some devices needs to be reset on resume,
726  * this is a problem with the platform (likely shutting off all power) not with
727  * the module itself. So we use a DMI list to match known broken platforms.
728  */
729 static const struct dmi_system_id btusb_needs_reset_resume_table[] = {
730         {
731                 /* Dell OptiPlex 3060 (QCA ROME device 0cf3:e007) */
732                 .matches = {
733                         DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
734                         DMI_MATCH(DMI_PRODUCT_NAME, "OptiPlex 3060"),
735                 },
736         },
737         {
738                 /* Dell XPS 9360 (QCA ROME device 0cf3:e300) */
739                 .matches = {
740                         DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
741                         DMI_MATCH(DMI_PRODUCT_NAME, "XPS 13 9360"),
742                 },
743         },
744         {
745                 /* Dell Inspiron 5565 (QCA ROME device 0cf3:e009) */
746                 .matches = {
747                         DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
748                         DMI_MATCH(DMI_PRODUCT_NAME, "Inspiron 5565"),
749                 },
750         },
751         {}
752 };
753
754 struct qca_dump_info {
755         /* fields for dump collection */
756         u16 id_vendor;
757         u16 id_product;
758         u32 fw_version;
759         u32 controller_id;
760         u32 ram_dump_size;
761         u16 ram_dump_seqno;
762 };
763
764 #define BTUSB_MAX_ISOC_FRAMES   10
765
766 #define BTUSB_INTR_RUNNING      0
767 #define BTUSB_BULK_RUNNING      1
768 #define BTUSB_ISOC_RUNNING      2
769 #define BTUSB_SUSPENDING        3
770 #define BTUSB_DID_ISO_RESUME    4
771 #define BTUSB_BOOTLOADER        5
772 #define BTUSB_DOWNLOADING       6
773 #define BTUSB_FIRMWARE_LOADED   7
774 #define BTUSB_FIRMWARE_FAILED   8
775 #define BTUSB_BOOTING           9
776 #define BTUSB_DIAG_RUNNING      10
777 #define BTUSB_OOB_WAKE_ENABLED  11
778 #define BTUSB_HW_RESET_ACTIVE   12
779 #define BTUSB_TX_WAIT_VND_EVT   13
780 #define BTUSB_WAKEUP_AUTOSUSPEND        14
781 #define BTUSB_USE_ALT3_FOR_WBS  15
782 #define BTUSB_ALT6_CONTINUOUS_TX        16
783 #define BTUSB_HW_SSR_ACTIVE     17
784
785 struct btusb_data {
786         struct hci_dev       *hdev;
787         struct usb_device    *udev;
788         struct usb_interface *intf;
789         struct usb_interface *isoc;
790         struct usb_interface *diag;
791         unsigned isoc_ifnum;
792
793         unsigned long flags;
794
795         bool poll_sync;
796         int intr_interval;
797         struct work_struct  work;
798         struct work_struct  waker;
799         struct delayed_work rx_work;
800
801         struct sk_buff_head acl_q;
802
803         struct usb_anchor deferred;
804         struct usb_anchor tx_anchor;
805         int tx_in_flight;
806         spinlock_t txlock;
807
808         struct usb_anchor intr_anchor;
809         struct usb_anchor bulk_anchor;
810         struct usb_anchor isoc_anchor;
811         struct usb_anchor diag_anchor;
812         struct usb_anchor ctrl_anchor;
813         spinlock_t rxlock;
814
815         struct sk_buff *evt_skb;
816         struct sk_buff *acl_skb;
817         struct sk_buff *sco_skb;
818
819         struct usb_endpoint_descriptor *intr_ep;
820         struct usb_endpoint_descriptor *bulk_tx_ep;
821         struct usb_endpoint_descriptor *bulk_rx_ep;
822         struct usb_endpoint_descriptor *isoc_tx_ep;
823         struct usb_endpoint_descriptor *isoc_rx_ep;
824         struct usb_endpoint_descriptor *diag_tx_ep;
825         struct usb_endpoint_descriptor *diag_rx_ep;
826
827         struct gpio_desc *reset_gpio;
828
829         __u8 cmdreq_type;
830         __u8 cmdreq;
831
832         unsigned int sco_num;
833         unsigned int air_mode;
834         bool usb_alt6_packet_flow;
835         int isoc_altsetting;
836         int suspend_count;
837
838         int (*recv_event)(struct hci_dev *hdev, struct sk_buff *skb);
839         int (*recv_acl)(struct hci_dev *hdev, struct sk_buff *skb);
840         int (*recv_bulk)(struct btusb_data *data, void *buffer, int count);
841
842         int (*setup_on_usb)(struct hci_dev *hdev);
843
844         int oob_wake_irq;   /* irq for out-of-band wake-on-bt */
845         unsigned cmd_timeout_cnt;
846
847         struct qca_dump_info qca_dump;
848 };
849
850 static void btusb_reset(struct hci_dev *hdev)
851 {
852         struct btusb_data *data;
853         int err;
854
855         if (hdev->reset) {
856                 hdev->reset(hdev);
857                 return;
858         }
859
860         data = hci_get_drvdata(hdev);
861         /* This is not an unbalanced PM reference since the device will reset */
862         err = usb_autopm_get_interface(data->intf);
863         if (err) {
864                 bt_dev_err(hdev, "Failed usb_autopm_get_interface: %d", err);
865                 return;
866         }
867
868         bt_dev_err(hdev, "Resetting usb device.");
869         usb_queue_reset_device(data->intf);
870 }
871
872 static void btusb_intel_cmd_timeout(struct hci_dev *hdev)
873 {
874         struct btusb_data *data = hci_get_drvdata(hdev);
875         struct gpio_desc *reset_gpio = data->reset_gpio;
876         struct btintel_data *intel_data = hci_get_priv(hdev);
877
878         if (++data->cmd_timeout_cnt < 5)
879                 return;
880
881         if (intel_data->acpi_reset_method) {
882                 if (test_and_set_bit(INTEL_ACPI_RESET_ACTIVE, intel_data->flags)) {
883                         bt_dev_err(hdev, "acpi: last reset failed ? Not resetting again");
884                         return;
885                 }
886
887                 bt_dev_err(hdev, "Initiating acpi reset method");
888                 /* If ACPI reset method fails, lets try with legacy GPIO
889                  * toggling
890                  */
891                 if (!intel_data->acpi_reset_method(hdev)) {
892                         return;
893                 }
894         }
895
896         if (!reset_gpio) {
897                 btusb_reset(hdev);
898                 return;
899         }
900
901         /*
902          * Toggle the hard reset line if the platform provides one. The reset
903          * is going to yank the device off the USB and then replug. So doing
904          * once is enough. The cleanup is handled correctly on the way out
905          * (standard USB disconnect), and the new device is detected cleanly
906          * and bound to the driver again like it should be.
907          */
908         if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
909                 bt_dev_err(hdev, "last reset failed? Not resetting again");
910                 return;
911         }
912
913         bt_dev_err(hdev, "Initiating HW reset via gpio");
914         gpiod_set_value_cansleep(reset_gpio, 1);
915         msleep(100);
916         gpiod_set_value_cansleep(reset_gpio, 0);
917 }
918
919 #define RTK_DEVCOREDUMP_CODE_MEMDUMP            0x01
920 #define RTK_DEVCOREDUMP_CODE_HW_ERR             0x02
921 #define RTK_DEVCOREDUMP_CODE_CMD_TIMEOUT        0x03
922
923 #define RTK_SUB_EVENT_CODE_COREDUMP             0x34
924
925 struct rtk_dev_coredump_hdr {
926         u8 type;
927         u8 code;
928         u8 reserved[2];
929 } __packed;
930
931 static inline void btusb_rtl_alloc_devcoredump(struct hci_dev *hdev,
932                 struct rtk_dev_coredump_hdr *hdr, u8 *buf, u32 len)
933 {
934         struct sk_buff *skb;
935
936         skb = alloc_skb(len + sizeof(*hdr), GFP_ATOMIC);
937         if (!skb)
938                 return;
939
940         skb_put_data(skb, hdr, sizeof(*hdr));
941         if (len)
942                 skb_put_data(skb, buf, len);
943
944         if (!hci_devcd_init(hdev, skb->len)) {
945                 hci_devcd_append(hdev, skb);
946                 hci_devcd_complete(hdev);
947         } else {
948                 bt_dev_err(hdev, "RTL: Failed to generate devcoredump");
949                 kfree_skb(skb);
950         }
951 }
952
953 static void btusb_rtl_cmd_timeout(struct hci_dev *hdev)
954 {
955         struct btusb_data *data = hci_get_drvdata(hdev);
956         struct gpio_desc *reset_gpio = data->reset_gpio;
957         struct rtk_dev_coredump_hdr hdr = {
958                 .type = RTK_DEVCOREDUMP_CODE_CMD_TIMEOUT,
959         };
960
961         btusb_rtl_alloc_devcoredump(hdev, &hdr, NULL, 0);
962
963         if (++data->cmd_timeout_cnt < 5)
964                 return;
965
966         if (!reset_gpio) {
967                 btusb_reset(hdev);
968                 return;
969         }
970
971         /* Toggle the hard reset line. The Realtek device is going to
972          * yank itself off the USB and then replug. The cleanup is handled
973          * correctly on the way out (standard USB disconnect), and the new
974          * device is detected cleanly and bound to the driver again like
975          * it should be.
976          */
977         if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
978                 bt_dev_err(hdev, "last reset failed? Not resetting again");
979                 return;
980         }
981
982         bt_dev_err(hdev, "Reset Realtek device via gpio");
983         gpiod_set_value_cansleep(reset_gpio, 1);
984         msleep(200);
985         gpiod_set_value_cansleep(reset_gpio, 0);
986 }
987
988 static void btusb_rtl_hw_error(struct hci_dev *hdev, u8 code)
989 {
990         struct rtk_dev_coredump_hdr hdr = {
991                 .type = RTK_DEVCOREDUMP_CODE_HW_ERR,
992                 .code = code,
993         };
994
995         bt_dev_err(hdev, "RTL: hw err, trigger devcoredump (%d)", code);
996
997         btusb_rtl_alloc_devcoredump(hdev, &hdr, NULL, 0);
998 }
999
1000 static void btusb_qca_cmd_timeout(struct hci_dev *hdev)
1001 {
1002         struct btusb_data *data = hci_get_drvdata(hdev);
1003         struct gpio_desc *reset_gpio = data->reset_gpio;
1004
1005         if (test_bit(BTUSB_HW_SSR_ACTIVE, &data->flags)) {
1006                 bt_dev_info(hdev, "Ramdump in progress, defer cmd_timeout");
1007                 return;
1008         }
1009
1010         if (++data->cmd_timeout_cnt < 5)
1011                 return;
1012
1013         if (reset_gpio) {
1014                 bt_dev_err(hdev, "Reset qca device via bt_en gpio");
1015
1016                 /* Toggle the hard reset line. The qca bt device is going to
1017                  * yank itself off the USB and then replug. The cleanup is handled
1018                  * correctly on the way out (standard USB disconnect), and the new
1019                  * device is detected cleanly and bound to the driver again like
1020                  * it should be.
1021                  */
1022                 if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
1023                         bt_dev_err(hdev, "last reset failed? Not resetting again");
1024                         return;
1025                 }
1026
1027                 gpiod_set_value_cansleep(reset_gpio, 0);
1028                 msleep(200);
1029                 gpiod_set_value_cansleep(reset_gpio, 1);
1030
1031                 return;
1032         }
1033
1034         btusb_reset(hdev);
1035 }
1036
1037 static inline void btusb_free_frags(struct btusb_data *data)
1038 {
1039         unsigned long flags;
1040
1041         spin_lock_irqsave(&data->rxlock, flags);
1042
1043         dev_kfree_skb_irq(data->evt_skb);
1044         data->evt_skb = NULL;
1045
1046         dev_kfree_skb_irq(data->acl_skb);
1047         data->acl_skb = NULL;
1048
1049         dev_kfree_skb_irq(data->sco_skb);
1050         data->sco_skb = NULL;
1051
1052         spin_unlock_irqrestore(&data->rxlock, flags);
1053 }
1054
1055 static int btusb_recv_event(struct btusb_data *data, struct sk_buff *skb)
1056 {
1057         if (data->intr_interval) {
1058                 /* Trigger dequeue immediatelly if an event is received */
1059                 schedule_delayed_work(&data->rx_work, 0);
1060         }
1061
1062         return data->recv_event(data->hdev, skb);
1063 }
1064
1065 static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count)
1066 {
1067         struct sk_buff *skb;
1068         unsigned long flags;
1069         int err = 0;
1070
1071         spin_lock_irqsave(&data->rxlock, flags);
1072         skb = data->evt_skb;
1073
1074         while (count) {
1075                 int len;
1076
1077                 if (!skb) {
1078                         skb = bt_skb_alloc(HCI_MAX_EVENT_SIZE, GFP_ATOMIC);
1079                         if (!skb) {
1080                                 err = -ENOMEM;
1081                                 break;
1082                         }
1083
1084                         hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
1085                         hci_skb_expect(skb) = HCI_EVENT_HDR_SIZE;
1086                 }
1087
1088                 len = min_t(uint, hci_skb_expect(skb), count);
1089                 skb_put_data(skb, buffer, len);
1090
1091                 count -= len;
1092                 buffer += len;
1093                 hci_skb_expect(skb) -= len;
1094
1095                 if (skb->len == HCI_EVENT_HDR_SIZE) {
1096                         /* Complete event header */
1097                         hci_skb_expect(skb) = hci_event_hdr(skb)->plen;
1098
1099                         if (skb_tailroom(skb) < hci_skb_expect(skb)) {
1100                                 kfree_skb(skb);
1101                                 skb = NULL;
1102
1103                                 err = -EILSEQ;
1104                                 break;
1105                         }
1106                 }
1107
1108                 if (!hci_skb_expect(skb)) {
1109                         /* Complete frame */
1110                         btusb_recv_event(data, skb);
1111                         skb = NULL;
1112                 }
1113         }
1114
1115         data->evt_skb = skb;
1116         spin_unlock_irqrestore(&data->rxlock, flags);
1117
1118         return err;
1119 }
1120
1121 static int btusb_recv_acl(struct btusb_data *data, struct sk_buff *skb)
1122 {
1123         /* Only queue ACL packet if intr_interval is set as it means
1124          * force_poll_sync has been enabled.
1125          */
1126         if (!data->intr_interval)
1127                 return data->recv_acl(data->hdev, skb);
1128
1129         skb_queue_tail(&data->acl_q, skb);
1130         schedule_delayed_work(&data->rx_work, data->intr_interval);
1131
1132         return 0;
1133 }
1134
1135 static int btusb_recv_bulk(struct btusb_data *data, void *buffer, int count)
1136 {
1137         struct sk_buff *skb;
1138         unsigned long flags;
1139         int err = 0;
1140
1141         spin_lock_irqsave(&data->rxlock, flags);
1142         skb = data->acl_skb;
1143
1144         while (count) {
1145                 int len;
1146
1147                 if (!skb) {
1148                         skb = bt_skb_alloc(HCI_MAX_FRAME_SIZE, GFP_ATOMIC);
1149                         if (!skb) {
1150                                 err = -ENOMEM;
1151                                 break;
1152                         }
1153
1154                         hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT;
1155                         hci_skb_expect(skb) = HCI_ACL_HDR_SIZE;
1156                 }
1157
1158                 len = min_t(uint, hci_skb_expect(skb), count);
1159                 skb_put_data(skb, buffer, len);
1160
1161                 count -= len;
1162                 buffer += len;
1163                 hci_skb_expect(skb) -= len;
1164
1165                 if (skb->len == HCI_ACL_HDR_SIZE) {
1166                         __le16 dlen = hci_acl_hdr(skb)->dlen;
1167
1168                         /* Complete ACL header */
1169                         hci_skb_expect(skb) = __le16_to_cpu(dlen);
1170
1171                         if (skb_tailroom(skb) < hci_skb_expect(skb)) {
1172                                 kfree_skb(skb);
1173                                 skb = NULL;
1174
1175                                 err = -EILSEQ;
1176                                 break;
1177                         }
1178                 }
1179
1180                 if (!hci_skb_expect(skb)) {
1181                         /* Complete frame */
1182                         btusb_recv_acl(data, skb);
1183                         skb = NULL;
1184                 }
1185         }
1186
1187         data->acl_skb = skb;
1188         spin_unlock_irqrestore(&data->rxlock, flags);
1189
1190         return err;
1191 }
1192
1193 static bool btusb_validate_sco_handle(struct hci_dev *hdev,
1194                                       struct hci_sco_hdr *hdr)
1195 {
1196         __u16 handle;
1197
1198         if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL))
1199                 // Can't validate, userspace controls everything.
1200                 return true;
1201
1202         /*
1203          * USB isochronous transfers are not designed to be reliable and may
1204          * lose fragments.  When this happens, the next first fragment
1205          * encountered might actually be a continuation fragment.
1206          * Validate the handle to detect it and drop it, or else the upper
1207          * layer will get garbage for a while.
1208          */
1209
1210         handle = hci_handle(__le16_to_cpu(hdr->handle));
1211
1212         switch (hci_conn_lookup_type(hdev, handle)) {
1213         case SCO_LINK:
1214         case ESCO_LINK:
1215                 return true;
1216         default:
1217                 return false;
1218         }
1219 }
1220
1221 static int btusb_recv_isoc(struct btusb_data *data, void *buffer, int count)
1222 {
1223         struct sk_buff *skb;
1224         unsigned long flags;
1225         int err = 0;
1226
1227         spin_lock_irqsave(&data->rxlock, flags);
1228         skb = data->sco_skb;
1229
1230         while (count) {
1231                 int len;
1232
1233                 if (!skb) {
1234                         skb = bt_skb_alloc(HCI_MAX_SCO_SIZE, GFP_ATOMIC);
1235                         if (!skb) {
1236                                 err = -ENOMEM;
1237                                 break;
1238                         }
1239
1240                         hci_skb_pkt_type(skb) = HCI_SCODATA_PKT;
1241                         hci_skb_expect(skb) = HCI_SCO_HDR_SIZE;
1242                 }
1243
1244                 len = min_t(uint, hci_skb_expect(skb), count);
1245                 skb_put_data(skb, buffer, len);
1246
1247                 count -= len;
1248                 buffer += len;
1249                 hci_skb_expect(skb) -= len;
1250
1251                 if (skb->len == HCI_SCO_HDR_SIZE) {
1252                         /* Complete SCO header */
1253                         struct hci_sco_hdr *hdr = hci_sco_hdr(skb);
1254
1255                         hci_skb_expect(skb) = hdr->dlen;
1256
1257                         if (skb_tailroom(skb) < hci_skb_expect(skb) ||
1258                             !btusb_validate_sco_handle(data->hdev, hdr)) {
1259                                 kfree_skb(skb);
1260                                 skb = NULL;
1261
1262                                 err = -EILSEQ;
1263                                 break;
1264                         }
1265                 }
1266
1267                 if (!hci_skb_expect(skb)) {
1268                         /* Complete frame */
1269                         hci_recv_frame(data->hdev, skb);
1270                         skb = NULL;
1271                 }
1272         }
1273
1274         data->sco_skb = skb;
1275         spin_unlock_irqrestore(&data->rxlock, flags);
1276
1277         return err;
1278 }
1279
1280 static void btusb_intr_complete(struct urb *urb)
1281 {
1282         struct hci_dev *hdev = urb->context;
1283         struct btusb_data *data = hci_get_drvdata(hdev);
1284         int err;
1285
1286         BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
1287                urb->actual_length);
1288
1289         if (!test_bit(HCI_RUNNING, &hdev->flags))
1290                 return;
1291
1292         if (urb->status == 0) {
1293                 hdev->stat.byte_rx += urb->actual_length;
1294
1295                 if (btusb_recv_intr(data, urb->transfer_buffer,
1296                                     urb->actual_length) < 0) {
1297                         bt_dev_err(hdev, "corrupted event packet");
1298                         hdev->stat.err_rx++;
1299                 }
1300         } else if (urb->status == -ENOENT) {
1301                 /* Avoid suspend failed when usb_kill_urb */
1302                 return;
1303         }
1304
1305         if (!test_bit(BTUSB_INTR_RUNNING, &data->flags))
1306                 return;
1307
1308         usb_mark_last_busy(data->udev);
1309         usb_anchor_urb(urb, &data->intr_anchor);
1310
1311         err = usb_submit_urb(urb, GFP_ATOMIC);
1312         if (err < 0) {
1313                 /* -EPERM: urb is being killed;
1314                  * -ENODEV: device got disconnected
1315                  */
1316                 if (err != -EPERM && err != -ENODEV)
1317                         bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
1318                                    urb, -err);
1319                 if (err != -EPERM)
1320                         hci_cmd_sync_cancel(hdev, -err);
1321                 usb_unanchor_urb(urb);
1322         }
1323 }
1324
1325 static int btusb_submit_intr_urb(struct hci_dev *hdev, gfp_t mem_flags)
1326 {
1327         struct btusb_data *data = hci_get_drvdata(hdev);
1328         struct urb *urb;
1329         unsigned char *buf;
1330         unsigned int pipe;
1331         int err, size;
1332
1333         BT_DBG("%s", hdev->name);
1334
1335         if (!data->intr_ep)
1336                 return -ENODEV;
1337
1338         urb = usb_alloc_urb(0, mem_flags);
1339         if (!urb)
1340                 return -ENOMEM;
1341
1342         size = le16_to_cpu(data->intr_ep->wMaxPacketSize);
1343
1344         buf = kmalloc(size, mem_flags);
1345         if (!buf) {
1346                 usb_free_urb(urb);
1347                 return -ENOMEM;
1348         }
1349
1350         pipe = usb_rcvintpipe(data->udev, data->intr_ep->bEndpointAddress);
1351
1352         usb_fill_int_urb(urb, data->udev, pipe, buf, size,
1353                          btusb_intr_complete, hdev, data->intr_ep->bInterval);
1354
1355         urb->transfer_flags |= URB_FREE_BUFFER;
1356
1357         usb_anchor_urb(urb, &data->intr_anchor);
1358
1359         err = usb_submit_urb(urb, mem_flags);
1360         if (err < 0) {
1361                 if (err != -EPERM && err != -ENODEV)
1362                         bt_dev_err(hdev, "urb %p submission failed (%d)",
1363                                    urb, -err);
1364                 if (err != -EPERM)
1365                         hci_cmd_sync_cancel(hdev, -err);
1366                 usb_unanchor_urb(urb);
1367         }
1368
1369         /* Only initialize intr_interval if URB poll sync is enabled */
1370         if (!data->poll_sync)
1371                 goto done;
1372
1373         /* The units are frames (milliseconds) for full and low speed devices,
1374          * and microframes (1/8 millisecond) for highspeed and SuperSpeed
1375          * devices.
1376          *
1377          * This is done once on open/resume so it shouldn't change even if
1378          * force_poll_sync changes.
1379          */
1380         switch (urb->dev->speed) {
1381         case USB_SPEED_SUPER_PLUS:
1382         case USB_SPEED_SUPER:   /* units are 125us */
1383                 data->intr_interval = usecs_to_jiffies(urb->interval * 125);
1384                 break;
1385         default:
1386                 data->intr_interval = msecs_to_jiffies(urb->interval);
1387                 break;
1388         }
1389
1390 done:
1391         usb_free_urb(urb);
1392
1393         return err;
1394 }
1395
1396 static void btusb_bulk_complete(struct urb *urb)
1397 {
1398         struct hci_dev *hdev = urb->context;
1399         struct btusb_data *data = hci_get_drvdata(hdev);
1400         int err;
1401
1402         BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
1403                urb->actual_length);
1404
1405         if (!test_bit(HCI_RUNNING, &hdev->flags))
1406                 return;
1407
1408         if (urb->status == 0) {
1409                 hdev->stat.byte_rx += urb->actual_length;
1410
1411                 if (data->recv_bulk(data, urb->transfer_buffer,
1412                                     urb->actual_length) < 0) {
1413                         bt_dev_err(hdev, "corrupted ACL packet");
1414                         hdev->stat.err_rx++;
1415                 }
1416         } else if (urb->status == -ENOENT) {
1417                 /* Avoid suspend failed when usb_kill_urb */
1418                 return;
1419         }
1420
1421         if (!test_bit(BTUSB_BULK_RUNNING, &data->flags))
1422                 return;
1423
1424         usb_anchor_urb(urb, &data->bulk_anchor);
1425         usb_mark_last_busy(data->udev);
1426
1427         err = usb_submit_urb(urb, GFP_ATOMIC);
1428         if (err < 0) {
1429                 /* -EPERM: urb is being killed;
1430                  * -ENODEV: device got disconnected
1431                  */
1432                 if (err != -EPERM && err != -ENODEV)
1433                         bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
1434                                    urb, -err);
1435                 usb_unanchor_urb(urb);
1436         }
1437 }
1438
1439 static int btusb_submit_bulk_urb(struct hci_dev *hdev, gfp_t mem_flags)
1440 {
1441         struct btusb_data *data = hci_get_drvdata(hdev);
1442         struct urb *urb;
1443         unsigned char *buf;
1444         unsigned int pipe;
1445         int err, size = HCI_MAX_FRAME_SIZE;
1446
1447         BT_DBG("%s", hdev->name);
1448
1449         if (!data->bulk_rx_ep)
1450                 return -ENODEV;
1451
1452         urb = usb_alloc_urb(0, mem_flags);
1453         if (!urb)
1454                 return -ENOMEM;
1455
1456         buf = kmalloc(size, mem_flags);
1457         if (!buf) {
1458                 usb_free_urb(urb);
1459                 return -ENOMEM;
1460         }
1461
1462         pipe = usb_rcvbulkpipe(data->udev, data->bulk_rx_ep->bEndpointAddress);
1463
1464         usb_fill_bulk_urb(urb, data->udev, pipe, buf, size,
1465                           btusb_bulk_complete, hdev);
1466
1467         urb->transfer_flags |= URB_FREE_BUFFER;
1468
1469         usb_mark_last_busy(data->udev);
1470         usb_anchor_urb(urb, &data->bulk_anchor);
1471
1472         err = usb_submit_urb(urb, mem_flags);
1473         if (err < 0) {
1474                 if (err != -EPERM && err != -ENODEV)
1475                         bt_dev_err(hdev, "urb %p submission failed (%d)",
1476                                    urb, -err);
1477                 usb_unanchor_urb(urb);
1478         }
1479
1480         usb_free_urb(urb);
1481
1482         return err;
1483 }
1484
1485 static void btusb_isoc_complete(struct urb *urb)
1486 {
1487         struct hci_dev *hdev = urb->context;
1488         struct btusb_data *data = hci_get_drvdata(hdev);
1489         int i, err;
1490
1491         BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
1492                urb->actual_length);
1493
1494         if (!test_bit(HCI_RUNNING, &hdev->flags))
1495                 return;
1496
1497         if (urb->status == 0) {
1498                 for (i = 0; i < urb->number_of_packets; i++) {
1499                         unsigned int offset = urb->iso_frame_desc[i].offset;
1500                         unsigned int length = urb->iso_frame_desc[i].actual_length;
1501
1502                         if (urb->iso_frame_desc[i].status)
1503                                 continue;
1504
1505                         hdev->stat.byte_rx += length;
1506
1507                         if (btusb_recv_isoc(data, urb->transfer_buffer + offset,
1508                                             length) < 0) {
1509                                 bt_dev_err(hdev, "corrupted SCO packet");
1510                                 hdev->stat.err_rx++;
1511                         }
1512                 }
1513         } else if (urb->status == -ENOENT) {
1514                 /* Avoid suspend failed when usb_kill_urb */
1515                 return;
1516         }
1517
1518         if (!test_bit(BTUSB_ISOC_RUNNING, &data->flags))
1519                 return;
1520
1521         usb_anchor_urb(urb, &data->isoc_anchor);
1522
1523         err = usb_submit_urb(urb, GFP_ATOMIC);
1524         if (err < 0) {
1525                 /* -EPERM: urb is being killed;
1526                  * -ENODEV: device got disconnected
1527                  */
1528                 if (err != -EPERM && err != -ENODEV)
1529                         bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
1530                                    urb, -err);
1531                 usb_unanchor_urb(urb);
1532         }
1533 }
1534
1535 static inline void __fill_isoc_descriptor_msbc(struct urb *urb, int len,
1536                                                int mtu, struct btusb_data *data)
1537 {
1538         int i = 0, offset = 0;
1539         unsigned int interval;
1540
1541         BT_DBG("len %d mtu %d", len, mtu);
1542
1543         /* For mSBC ALT 6 settings some chips need to transmit the data
1544          * continuously without the zero length of USB packets.
1545          */
1546         if (test_bit(BTUSB_ALT6_CONTINUOUS_TX, &data->flags))
1547                 goto ignore_usb_alt6_packet_flow;
1548
1549         /* For mSBC ALT 6 setting the host will send the packet at continuous
1550          * flow. As per core spec 5, vol 4, part B, table 2.1. For ALT setting
1551          * 6 the HCI PACKET INTERVAL should be 7.5ms for every usb packets.
1552          * To maintain the rate we send 63bytes of usb packets alternatively for
1553          * 7ms and 8ms to maintain the rate as 7.5ms.
1554          */
1555         if (data->usb_alt6_packet_flow) {
1556                 interval = 7;
1557                 data->usb_alt6_packet_flow = false;
1558         } else {
1559                 interval = 6;
1560                 data->usb_alt6_packet_flow = true;
1561         }
1562
1563         for (i = 0; i < interval; i++) {
1564                 urb->iso_frame_desc[i].offset = offset;
1565                 urb->iso_frame_desc[i].length = offset;
1566         }
1567
1568 ignore_usb_alt6_packet_flow:
1569         if (len && i < BTUSB_MAX_ISOC_FRAMES) {
1570                 urb->iso_frame_desc[i].offset = offset;
1571                 urb->iso_frame_desc[i].length = len;
1572                 i++;
1573         }
1574
1575         urb->number_of_packets = i;
1576 }
1577
1578 static inline void __fill_isoc_descriptor(struct urb *urb, int len, int mtu)
1579 {
1580         int i, offset = 0;
1581
1582         BT_DBG("len %d mtu %d", len, mtu);
1583
1584         for (i = 0; i < BTUSB_MAX_ISOC_FRAMES && len >= mtu;
1585                                         i++, offset += mtu, len -= mtu) {
1586                 urb->iso_frame_desc[i].offset = offset;
1587                 urb->iso_frame_desc[i].length = mtu;
1588         }
1589
1590         if (len && i < BTUSB_MAX_ISOC_FRAMES) {
1591                 urb->iso_frame_desc[i].offset = offset;
1592                 urb->iso_frame_desc[i].length = len;
1593                 i++;
1594         }
1595
1596         urb->number_of_packets = i;
1597 }
1598
1599 static int btusb_submit_isoc_urb(struct hci_dev *hdev, gfp_t mem_flags)
1600 {
1601         struct btusb_data *data = hci_get_drvdata(hdev);
1602         struct urb *urb;
1603         unsigned char *buf;
1604         unsigned int pipe;
1605         int err, size;
1606
1607         BT_DBG("%s", hdev->name);
1608
1609         if (!data->isoc_rx_ep)
1610                 return -ENODEV;
1611
1612         urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, mem_flags);
1613         if (!urb)
1614                 return -ENOMEM;
1615
1616         size = le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize) *
1617                                                 BTUSB_MAX_ISOC_FRAMES;
1618
1619         buf = kmalloc(size, mem_flags);
1620         if (!buf) {
1621                 usb_free_urb(urb);
1622                 return -ENOMEM;
1623         }
1624
1625         pipe = usb_rcvisocpipe(data->udev, data->isoc_rx_ep->bEndpointAddress);
1626
1627         usb_fill_int_urb(urb, data->udev, pipe, buf, size, btusb_isoc_complete,
1628                          hdev, data->isoc_rx_ep->bInterval);
1629
1630         urb->transfer_flags = URB_FREE_BUFFER | URB_ISO_ASAP;
1631
1632         __fill_isoc_descriptor(urb, size,
1633                                le16_to_cpu(data->isoc_rx_ep->wMaxPacketSize));
1634
1635         usb_anchor_urb(urb, &data->isoc_anchor);
1636
1637         err = usb_submit_urb(urb, mem_flags);
1638         if (err < 0) {
1639                 if (err != -EPERM && err != -ENODEV)
1640                         bt_dev_err(hdev, "urb %p submission failed (%d)",
1641                                    urb, -err);
1642                 usb_unanchor_urb(urb);
1643         }
1644
1645         usb_free_urb(urb);
1646
1647         return err;
1648 }
1649
1650 static void btusb_diag_complete(struct urb *urb)
1651 {
1652         struct hci_dev *hdev = urb->context;
1653         struct btusb_data *data = hci_get_drvdata(hdev);
1654         int err;
1655
1656         BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
1657                urb->actual_length);
1658
1659         if (urb->status == 0) {
1660                 struct sk_buff *skb;
1661
1662                 skb = bt_skb_alloc(urb->actual_length, GFP_ATOMIC);
1663                 if (skb) {
1664                         skb_put_data(skb, urb->transfer_buffer,
1665                                      urb->actual_length);
1666                         hci_recv_diag(hdev, skb);
1667                 }
1668         } else if (urb->status == -ENOENT) {
1669                 /* Avoid suspend failed when usb_kill_urb */
1670                 return;
1671         }
1672
1673         if (!test_bit(BTUSB_DIAG_RUNNING, &data->flags))
1674                 return;
1675
1676         usb_anchor_urb(urb, &data->diag_anchor);
1677         usb_mark_last_busy(data->udev);
1678
1679         err = usb_submit_urb(urb, GFP_ATOMIC);
1680         if (err < 0) {
1681                 /* -EPERM: urb is being killed;
1682                  * -ENODEV: device got disconnected
1683                  */
1684                 if (err != -EPERM && err != -ENODEV)
1685                         bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
1686                                    urb, -err);
1687                 usb_unanchor_urb(urb);
1688         }
1689 }
1690
1691 static int btusb_submit_diag_urb(struct hci_dev *hdev, gfp_t mem_flags)
1692 {
1693         struct btusb_data *data = hci_get_drvdata(hdev);
1694         struct urb *urb;
1695         unsigned char *buf;
1696         unsigned int pipe;
1697         int err, size = HCI_MAX_FRAME_SIZE;
1698
1699         BT_DBG("%s", hdev->name);
1700
1701         if (!data->diag_rx_ep)
1702                 return -ENODEV;
1703
1704         urb = usb_alloc_urb(0, mem_flags);
1705         if (!urb)
1706                 return -ENOMEM;
1707
1708         buf = kmalloc(size, mem_flags);
1709         if (!buf) {
1710                 usb_free_urb(urb);
1711                 return -ENOMEM;
1712         }
1713
1714         pipe = usb_rcvbulkpipe(data->udev, data->diag_rx_ep->bEndpointAddress);
1715
1716         usb_fill_bulk_urb(urb, data->udev, pipe, buf, size,
1717                           btusb_diag_complete, hdev);
1718
1719         urb->transfer_flags |= URB_FREE_BUFFER;
1720
1721         usb_mark_last_busy(data->udev);
1722         usb_anchor_urb(urb, &data->diag_anchor);
1723
1724         err = usb_submit_urb(urb, mem_flags);
1725         if (err < 0) {
1726                 if (err != -EPERM && err != -ENODEV)
1727                         bt_dev_err(hdev, "urb %p submission failed (%d)",
1728                                    urb, -err);
1729                 usb_unanchor_urb(urb);
1730         }
1731
1732         usb_free_urb(urb);
1733
1734         return err;
1735 }
1736
1737 static void btusb_tx_complete(struct urb *urb)
1738 {
1739         struct sk_buff *skb = urb->context;
1740         struct hci_dev *hdev = (struct hci_dev *)skb->dev;
1741         struct btusb_data *data = hci_get_drvdata(hdev);
1742         unsigned long flags;
1743
1744         BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
1745                urb->actual_length);
1746
1747         if (!test_bit(HCI_RUNNING, &hdev->flags))
1748                 goto done;
1749
1750         if (!urb->status) {
1751                 hdev->stat.byte_tx += urb->transfer_buffer_length;
1752         } else {
1753                 if (hci_skb_pkt_type(skb) == HCI_COMMAND_PKT)
1754                         hci_cmd_sync_cancel(hdev, -urb->status);
1755                 hdev->stat.err_tx++;
1756         }
1757
1758 done:
1759         spin_lock_irqsave(&data->txlock, flags);
1760         data->tx_in_flight--;
1761         spin_unlock_irqrestore(&data->txlock, flags);
1762
1763         kfree(urb->setup_packet);
1764
1765         kfree_skb(skb);
1766 }
1767
1768 static void btusb_isoc_tx_complete(struct urb *urb)
1769 {
1770         struct sk_buff *skb = urb->context;
1771         struct hci_dev *hdev = (struct hci_dev *)skb->dev;
1772
1773         BT_DBG("%s urb %p status %d count %d", hdev->name, urb, urb->status,
1774                urb->actual_length);
1775
1776         if (!test_bit(HCI_RUNNING, &hdev->flags))
1777                 goto done;
1778
1779         if (!urb->status)
1780                 hdev->stat.byte_tx += urb->transfer_buffer_length;
1781         else
1782                 hdev->stat.err_tx++;
1783
1784 done:
1785         kfree(urb->setup_packet);
1786
1787         kfree_skb(skb);
1788 }
1789
1790 static int btusb_open(struct hci_dev *hdev)
1791 {
1792         struct btusb_data *data = hci_get_drvdata(hdev);
1793         int err;
1794
1795         BT_DBG("%s", hdev->name);
1796
1797         err = usb_autopm_get_interface(data->intf);
1798         if (err < 0)
1799                 return err;
1800
1801         /* Patching USB firmware files prior to starting any URBs of HCI path
1802          * It is more safe to use USB bulk channel for downloading USB patch
1803          */
1804         if (data->setup_on_usb) {
1805                 err = data->setup_on_usb(hdev);
1806                 if (err < 0)
1807                         goto setup_fail;
1808         }
1809
1810         data->intf->needs_remote_wakeup = 1;
1811
1812         if (test_and_set_bit(BTUSB_INTR_RUNNING, &data->flags))
1813                 goto done;
1814
1815         err = btusb_submit_intr_urb(hdev, GFP_KERNEL);
1816         if (err < 0)
1817                 goto failed;
1818
1819         err = btusb_submit_bulk_urb(hdev, GFP_KERNEL);
1820         if (err < 0) {
1821                 usb_kill_anchored_urbs(&data->intr_anchor);
1822                 goto failed;
1823         }
1824
1825         set_bit(BTUSB_BULK_RUNNING, &data->flags);
1826         btusb_submit_bulk_urb(hdev, GFP_KERNEL);
1827
1828         if (data->diag) {
1829                 if (!btusb_submit_diag_urb(hdev, GFP_KERNEL))
1830                         set_bit(BTUSB_DIAG_RUNNING, &data->flags);
1831         }
1832
1833 done:
1834         usb_autopm_put_interface(data->intf);
1835         return 0;
1836
1837 failed:
1838         clear_bit(BTUSB_INTR_RUNNING, &data->flags);
1839 setup_fail:
1840         usb_autopm_put_interface(data->intf);
1841         return err;
1842 }
1843
1844 static void btusb_stop_traffic(struct btusb_data *data)
1845 {
1846         usb_kill_anchored_urbs(&data->intr_anchor);
1847         usb_kill_anchored_urbs(&data->bulk_anchor);
1848         usb_kill_anchored_urbs(&data->isoc_anchor);
1849         usb_kill_anchored_urbs(&data->diag_anchor);
1850         usb_kill_anchored_urbs(&data->ctrl_anchor);
1851 }
1852
1853 static int btusb_close(struct hci_dev *hdev)
1854 {
1855         struct btusb_data *data = hci_get_drvdata(hdev);
1856         int err;
1857
1858         BT_DBG("%s", hdev->name);
1859
1860         cancel_delayed_work(&data->rx_work);
1861         cancel_work_sync(&data->work);
1862         cancel_work_sync(&data->waker);
1863
1864         skb_queue_purge(&data->acl_q);
1865
1866         clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
1867         clear_bit(BTUSB_BULK_RUNNING, &data->flags);
1868         clear_bit(BTUSB_INTR_RUNNING, &data->flags);
1869         clear_bit(BTUSB_DIAG_RUNNING, &data->flags);
1870
1871         btusb_stop_traffic(data);
1872         btusb_free_frags(data);
1873
1874         err = usb_autopm_get_interface(data->intf);
1875         if (err < 0)
1876                 goto failed;
1877
1878         data->intf->needs_remote_wakeup = 0;
1879
1880         /* Enable remote wake up for auto-suspend */
1881         if (test_bit(BTUSB_WAKEUP_AUTOSUSPEND, &data->flags))
1882                 data->intf->needs_remote_wakeup = 1;
1883
1884         usb_autopm_put_interface(data->intf);
1885
1886 failed:
1887         usb_scuttle_anchored_urbs(&data->deferred);
1888         return 0;
1889 }
1890
1891 static int btusb_flush(struct hci_dev *hdev)
1892 {
1893         struct btusb_data *data = hci_get_drvdata(hdev);
1894
1895         BT_DBG("%s", hdev->name);
1896
1897         cancel_delayed_work(&data->rx_work);
1898
1899         skb_queue_purge(&data->acl_q);
1900
1901         usb_kill_anchored_urbs(&data->tx_anchor);
1902         btusb_free_frags(data);
1903
1904         return 0;
1905 }
1906
1907 static struct urb *alloc_ctrl_urb(struct hci_dev *hdev, struct sk_buff *skb)
1908 {
1909         struct btusb_data *data = hci_get_drvdata(hdev);
1910         struct usb_ctrlrequest *dr;
1911         struct urb *urb;
1912         unsigned int pipe;
1913
1914         urb = usb_alloc_urb(0, GFP_KERNEL);
1915         if (!urb)
1916                 return ERR_PTR(-ENOMEM);
1917
1918         dr = kmalloc(sizeof(*dr), GFP_KERNEL);
1919         if (!dr) {
1920                 usb_free_urb(urb);
1921                 return ERR_PTR(-ENOMEM);
1922         }
1923
1924         dr->bRequestType = data->cmdreq_type;
1925         dr->bRequest     = data->cmdreq;
1926         dr->wIndex       = 0;
1927         dr->wValue       = 0;
1928         dr->wLength      = __cpu_to_le16(skb->len);
1929
1930         pipe = usb_sndctrlpipe(data->udev, 0x00);
1931
1932         usb_fill_control_urb(urb, data->udev, pipe, (void *)dr,
1933                              skb->data, skb->len, btusb_tx_complete, skb);
1934
1935         skb->dev = (void *)hdev;
1936
1937         return urb;
1938 }
1939
1940 static struct urb *alloc_bulk_urb(struct hci_dev *hdev, struct sk_buff *skb)
1941 {
1942         struct btusb_data *data = hci_get_drvdata(hdev);
1943         struct urb *urb;
1944         unsigned int pipe;
1945
1946         if (!data->bulk_tx_ep)
1947                 return ERR_PTR(-ENODEV);
1948
1949         urb = usb_alloc_urb(0, GFP_KERNEL);
1950         if (!urb)
1951                 return ERR_PTR(-ENOMEM);
1952
1953         pipe = usb_sndbulkpipe(data->udev, data->bulk_tx_ep->bEndpointAddress);
1954
1955         usb_fill_bulk_urb(urb, data->udev, pipe,
1956                           skb->data, skb->len, btusb_tx_complete, skb);
1957
1958         skb->dev = (void *)hdev;
1959
1960         return urb;
1961 }
1962
1963 static struct urb *alloc_isoc_urb(struct hci_dev *hdev, struct sk_buff *skb)
1964 {
1965         struct btusb_data *data = hci_get_drvdata(hdev);
1966         struct urb *urb;
1967         unsigned int pipe;
1968
1969         if (!data->isoc_tx_ep)
1970                 return ERR_PTR(-ENODEV);
1971
1972         urb = usb_alloc_urb(BTUSB_MAX_ISOC_FRAMES, GFP_KERNEL);
1973         if (!urb)
1974                 return ERR_PTR(-ENOMEM);
1975
1976         pipe = usb_sndisocpipe(data->udev, data->isoc_tx_ep->bEndpointAddress);
1977
1978         usb_fill_int_urb(urb, data->udev, pipe,
1979                          skb->data, skb->len, btusb_isoc_tx_complete,
1980                          skb, data->isoc_tx_ep->bInterval);
1981
1982         urb->transfer_flags  = URB_ISO_ASAP;
1983
1984         if (data->isoc_altsetting == 6)
1985                 __fill_isoc_descriptor_msbc(urb, skb->len,
1986                                             le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize),
1987                                             data);
1988         else
1989                 __fill_isoc_descriptor(urb, skb->len,
1990                                        le16_to_cpu(data->isoc_tx_ep->wMaxPacketSize));
1991         skb->dev = (void *)hdev;
1992
1993         return urb;
1994 }
1995
1996 static int submit_tx_urb(struct hci_dev *hdev, struct urb *urb)
1997 {
1998         struct btusb_data *data = hci_get_drvdata(hdev);
1999         int err;
2000
2001         usb_anchor_urb(urb, &data->tx_anchor);
2002
2003         err = usb_submit_urb(urb, GFP_KERNEL);
2004         if (err < 0) {
2005                 if (err != -EPERM && err != -ENODEV)
2006                         bt_dev_err(hdev, "urb %p submission failed (%d)",
2007                                    urb, -err);
2008                 kfree(urb->setup_packet);
2009                 usb_unanchor_urb(urb);
2010         } else {
2011                 usb_mark_last_busy(data->udev);
2012         }
2013
2014         usb_free_urb(urb);
2015         return err;
2016 }
2017
2018 static int submit_or_queue_tx_urb(struct hci_dev *hdev, struct urb *urb)
2019 {
2020         struct btusb_data *data = hci_get_drvdata(hdev);
2021         unsigned long flags;
2022         bool suspending;
2023
2024         spin_lock_irqsave(&data->txlock, flags);
2025         suspending = test_bit(BTUSB_SUSPENDING, &data->flags);
2026         if (!suspending)
2027                 data->tx_in_flight++;
2028         spin_unlock_irqrestore(&data->txlock, flags);
2029
2030         if (!suspending)
2031                 return submit_tx_urb(hdev, urb);
2032
2033         usb_anchor_urb(urb, &data->deferred);
2034         schedule_work(&data->waker);
2035
2036         usb_free_urb(urb);
2037         return 0;
2038 }
2039
2040 static int btusb_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
2041 {
2042         struct urb *urb;
2043
2044         BT_DBG("%s", hdev->name);
2045
2046         switch (hci_skb_pkt_type(skb)) {
2047         case HCI_COMMAND_PKT:
2048                 urb = alloc_ctrl_urb(hdev, skb);
2049                 if (IS_ERR(urb))
2050                         return PTR_ERR(urb);
2051
2052                 hdev->stat.cmd_tx++;
2053                 return submit_or_queue_tx_urb(hdev, urb);
2054
2055         case HCI_ACLDATA_PKT:
2056                 urb = alloc_bulk_urb(hdev, skb);
2057                 if (IS_ERR(urb))
2058                         return PTR_ERR(urb);
2059
2060                 hdev->stat.acl_tx++;
2061                 return submit_or_queue_tx_urb(hdev, urb);
2062
2063         case HCI_SCODATA_PKT:
2064                 if (hci_conn_num(hdev, SCO_LINK) < 1)
2065                         return -ENODEV;
2066
2067                 urb = alloc_isoc_urb(hdev, skb);
2068                 if (IS_ERR(urb))
2069                         return PTR_ERR(urb);
2070
2071                 hdev->stat.sco_tx++;
2072                 return submit_tx_urb(hdev, urb);
2073
2074         case HCI_ISODATA_PKT:
2075                 urb = alloc_bulk_urb(hdev, skb);
2076                 if (IS_ERR(urb))
2077                         return PTR_ERR(urb);
2078
2079                 return submit_or_queue_tx_urb(hdev, urb);
2080         }
2081
2082         return -EILSEQ;
2083 }
2084
2085 static void btusb_notify(struct hci_dev *hdev, unsigned int evt)
2086 {
2087         struct btusb_data *data = hci_get_drvdata(hdev);
2088
2089         BT_DBG("%s evt %d", hdev->name, evt);
2090
2091         if (hci_conn_num(hdev, SCO_LINK) != data->sco_num) {
2092                 data->sco_num = hci_conn_num(hdev, SCO_LINK);
2093                 data->air_mode = evt;
2094                 schedule_work(&data->work);
2095         }
2096 }
2097
2098 static inline int __set_isoc_interface(struct hci_dev *hdev, int altsetting)
2099 {
2100         struct btusb_data *data = hci_get_drvdata(hdev);
2101         struct usb_interface *intf = data->isoc;
2102         struct usb_endpoint_descriptor *ep_desc;
2103         int i, err;
2104
2105         if (!data->isoc)
2106                 return -ENODEV;
2107
2108         err = usb_set_interface(data->udev, data->isoc_ifnum, altsetting);
2109         if (err < 0) {
2110                 bt_dev_err(hdev, "setting interface failed (%d)", -err);
2111                 return err;
2112         }
2113
2114         data->isoc_altsetting = altsetting;
2115
2116         data->isoc_tx_ep = NULL;
2117         data->isoc_rx_ep = NULL;
2118
2119         for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
2120                 ep_desc = &intf->cur_altsetting->endpoint[i].desc;
2121
2122                 if (!data->isoc_tx_ep && usb_endpoint_is_isoc_out(ep_desc)) {
2123                         data->isoc_tx_ep = ep_desc;
2124                         continue;
2125                 }
2126
2127                 if (!data->isoc_rx_ep && usb_endpoint_is_isoc_in(ep_desc)) {
2128                         data->isoc_rx_ep = ep_desc;
2129                         continue;
2130                 }
2131         }
2132
2133         if (!data->isoc_tx_ep || !data->isoc_rx_ep) {
2134                 bt_dev_err(hdev, "invalid SCO descriptors");
2135                 return -ENODEV;
2136         }
2137
2138         return 0;
2139 }
2140
2141 static int btusb_switch_alt_setting(struct hci_dev *hdev, int new_alts)
2142 {
2143         struct btusb_data *data = hci_get_drvdata(hdev);
2144         int err;
2145
2146         if (data->isoc_altsetting != new_alts) {
2147                 unsigned long flags;
2148
2149                 clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
2150                 usb_kill_anchored_urbs(&data->isoc_anchor);
2151
2152                 /* When isochronous alternate setting needs to be
2153                  * changed, because SCO connection has been added
2154                  * or removed, a packet fragment may be left in the
2155                  * reassembling state. This could lead to wrongly
2156                  * assembled fragments.
2157                  *
2158                  * Clear outstanding fragment when selecting a new
2159                  * alternate setting.
2160                  */
2161                 spin_lock_irqsave(&data->rxlock, flags);
2162                 kfree_skb(data->sco_skb);
2163                 data->sco_skb = NULL;
2164                 spin_unlock_irqrestore(&data->rxlock, flags);
2165
2166                 err = __set_isoc_interface(hdev, new_alts);
2167                 if (err < 0)
2168                         return err;
2169         }
2170
2171         if (!test_and_set_bit(BTUSB_ISOC_RUNNING, &data->flags)) {
2172                 if (btusb_submit_isoc_urb(hdev, GFP_KERNEL) < 0)
2173                         clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
2174                 else
2175                         btusb_submit_isoc_urb(hdev, GFP_KERNEL);
2176         }
2177
2178         return 0;
2179 }
2180
2181 static struct usb_host_interface *btusb_find_altsetting(struct btusb_data *data,
2182                                                         int alt)
2183 {
2184         struct usb_interface *intf = data->isoc;
2185         int i;
2186
2187         BT_DBG("Looking for Alt no :%d", alt);
2188
2189         if (!intf)
2190                 return NULL;
2191
2192         for (i = 0; i < intf->num_altsetting; i++) {
2193                 if (intf->altsetting[i].desc.bAlternateSetting == alt)
2194                         return &intf->altsetting[i];
2195         }
2196
2197         return NULL;
2198 }
2199
2200 static void btusb_work(struct work_struct *work)
2201 {
2202         struct btusb_data *data = container_of(work, struct btusb_data, work);
2203         struct hci_dev *hdev = data->hdev;
2204         int new_alts = 0;
2205         int err;
2206
2207         if (data->sco_num > 0) {
2208                 if (!test_bit(BTUSB_DID_ISO_RESUME, &data->flags)) {
2209                         err = usb_autopm_get_interface(data->isoc ? data->isoc : data->intf);
2210                         if (err < 0) {
2211                                 clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
2212                                 usb_kill_anchored_urbs(&data->isoc_anchor);
2213                                 return;
2214                         }
2215
2216                         set_bit(BTUSB_DID_ISO_RESUME, &data->flags);
2217                 }
2218
2219                 if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_CVSD) {
2220                         if (hdev->voice_setting & 0x0020) {
2221                                 static const int alts[3] = { 2, 4, 5 };
2222
2223                                 new_alts = alts[data->sco_num - 1];
2224                         } else {
2225                                 new_alts = data->sco_num;
2226                         }
2227                 } else if (data->air_mode == HCI_NOTIFY_ENABLE_SCO_TRANSP) {
2228                         /* Bluetooth USB spec recommends alt 6 (63 bytes), but
2229                          * many adapters do not support it.  Alt 1 appears to
2230                          * work for all adapters that do not have alt 6, and
2231                          * which work with WBS at all.  Some devices prefer
2232                          * alt 3 (HCI payload >= 60 Bytes let air packet
2233                          * data satisfy 60 bytes), requiring
2234                          * MTU >= 3 (packets) * 25 (size) - 3 (headers) = 72
2235                          * see also Core spec 5, vol 4, B 2.1.1 & Table 2.1.
2236                          */
2237                         if (btusb_find_altsetting(data, 6))
2238                                 new_alts = 6;
2239                         else if (btusb_find_altsetting(data, 3) &&
2240                                  hdev->sco_mtu >= 72 &&
2241                                  test_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags))
2242                                 new_alts = 3;
2243                         else
2244                                 new_alts = 1;
2245                 }
2246
2247                 if (btusb_switch_alt_setting(hdev, new_alts) < 0)
2248                         bt_dev_err(hdev, "set USB alt:(%d) failed!", new_alts);
2249         } else {
2250                 usb_kill_anchored_urbs(&data->isoc_anchor);
2251
2252                 if (test_and_clear_bit(BTUSB_ISOC_RUNNING, &data->flags))
2253                         __set_isoc_interface(hdev, 0);
2254
2255                 if (test_and_clear_bit(BTUSB_DID_ISO_RESUME, &data->flags))
2256                         usb_autopm_put_interface(data->isoc ? data->isoc : data->intf);
2257         }
2258 }
2259
2260 static void btusb_waker(struct work_struct *work)
2261 {
2262         struct btusb_data *data = container_of(work, struct btusb_data, waker);
2263         int err;
2264
2265         err = usb_autopm_get_interface(data->intf);
2266         if (err < 0)
2267                 return;
2268
2269         usb_autopm_put_interface(data->intf);
2270 }
2271
2272 static void btusb_rx_work(struct work_struct *work)
2273 {
2274         struct btusb_data *data = container_of(work, struct btusb_data,
2275                                                rx_work.work);
2276         struct sk_buff *skb;
2277
2278         /* Dequeue ACL data received during the interval */
2279         while ((skb = skb_dequeue(&data->acl_q)))
2280                 data->recv_acl(data->hdev, skb);
2281 }
2282
2283 static int btusb_setup_bcm92035(struct hci_dev *hdev)
2284 {
2285         struct sk_buff *skb;
2286         u8 val = 0x00;
2287
2288         BT_DBG("%s", hdev->name);
2289
2290         skb = __hci_cmd_sync(hdev, 0xfc3b, 1, &val, HCI_INIT_TIMEOUT);
2291         if (IS_ERR(skb))
2292                 bt_dev_err(hdev, "BCM92035 command failed (%ld)", PTR_ERR(skb));
2293         else
2294                 kfree_skb(skb);
2295
2296         return 0;
2297 }
2298
2299 static int btusb_setup_csr(struct hci_dev *hdev)
2300 {
2301         struct btusb_data *data = hci_get_drvdata(hdev);
2302         u16 bcdDevice = le16_to_cpu(data->udev->descriptor.bcdDevice);
2303         struct hci_rp_read_local_version *rp;
2304         struct sk_buff *skb;
2305         bool is_fake = false;
2306         int ret;
2307
2308         BT_DBG("%s", hdev->name);
2309
2310         skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL,
2311                              HCI_INIT_TIMEOUT);
2312         if (IS_ERR(skb)) {
2313                 int err = PTR_ERR(skb);
2314                 bt_dev_err(hdev, "CSR: Local version failed (%d)", err);
2315                 return err;
2316         }
2317
2318         rp = skb_pull_data(skb, sizeof(*rp));
2319         if (!rp) {
2320                 bt_dev_err(hdev, "CSR: Local version length mismatch");
2321                 kfree_skb(skb);
2322                 return -EIO;
2323         }
2324
2325         bt_dev_info(hdev, "CSR: Setting up dongle with HCI ver=%u rev=%04x",
2326                     rp->hci_ver, le16_to_cpu(rp->hci_rev));
2327
2328         bt_dev_info(hdev, "LMP ver=%u subver=%04x; manufacturer=%u",
2329                     rp->lmp_ver, le16_to_cpu(rp->lmp_subver),
2330                     le16_to_cpu(rp->manufacturer));
2331
2332         /* Detect a wide host of Chinese controllers that aren't CSR.
2333          *
2334          * Known fake bcdDevices: 0x0100, 0x0134, 0x1915, 0x2520, 0x7558, 0x8891
2335          *
2336          * The main thing they have in common is that these are really popular low-cost
2337          * options that support newer Bluetooth versions but rely on heavy VID/PID
2338          * squatting of this poor old Bluetooth 1.1 device. Even sold as such.
2339          *
2340          * We detect actual CSR devices by checking that the HCI manufacturer code
2341          * is Cambridge Silicon Radio (10) and ensuring that LMP sub-version and
2342          * HCI rev values always match. As they both store the firmware number.
2343          */
2344         if (le16_to_cpu(rp->manufacturer) != 10 ||
2345             le16_to_cpu(rp->hci_rev) != le16_to_cpu(rp->lmp_subver))
2346                 is_fake = true;
2347
2348         /* Known legit CSR firmware build numbers and their supported BT versions:
2349          * - 1.1 (0x1) -> 0x0073, 0x020d, 0x033c, 0x034e
2350          * - 1.2 (0x2) ->                 0x04d9, 0x0529
2351          * - 2.0 (0x3) ->         0x07a6, 0x07ad, 0x0c5c
2352          * - 2.1 (0x4) ->         0x149c, 0x1735, 0x1899 (0x1899 is a BlueCore4-External)
2353          * - 4.0 (0x6) ->         0x1d86, 0x2031, 0x22bb
2354          *
2355          * e.g. Real CSR dongles with LMP subversion 0x73 are old enough that
2356          *      support BT 1.1 only; so it's a dead giveaway when some
2357          *      third-party BT 4.0 dongle reuses it.
2358          */
2359         else if (le16_to_cpu(rp->lmp_subver) <= 0x034e &&
2360                  rp->hci_ver > BLUETOOTH_VER_1_1)
2361                 is_fake = true;
2362
2363         else if (le16_to_cpu(rp->lmp_subver) <= 0x0529 &&
2364                  rp->hci_ver > BLUETOOTH_VER_1_2)
2365                 is_fake = true;
2366
2367         else if (le16_to_cpu(rp->lmp_subver) <= 0x0c5c &&
2368                  rp->hci_ver > BLUETOOTH_VER_2_0)
2369                 is_fake = true;
2370
2371         else if (le16_to_cpu(rp->lmp_subver) <= 0x1899 &&
2372                  rp->hci_ver > BLUETOOTH_VER_2_1)
2373                 is_fake = true;
2374
2375         else if (le16_to_cpu(rp->lmp_subver) <= 0x22bb &&
2376                  rp->hci_ver > BLUETOOTH_VER_4_0)
2377                 is_fake = true;
2378
2379         /* Other clones which beat all the above checks */
2380         else if (bcdDevice == 0x0134 &&
2381                  le16_to_cpu(rp->lmp_subver) == 0x0c5c &&
2382                  rp->hci_ver == BLUETOOTH_VER_2_0)
2383                 is_fake = true;
2384
2385         if (is_fake) {
2386                 bt_dev_warn(hdev, "CSR: Unbranded CSR clone detected; adding workarounds and force-suspending once...");
2387
2388                 /* Generally these clones have big discrepancies between
2389                  * advertised features and what's actually supported.
2390                  * Probably will need to be expanded in the future;
2391                  * without these the controller will lock up.
2392                  */
2393                 set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
2394                 set_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks);
2395                 set_bit(HCI_QUIRK_BROKEN_FILTER_CLEAR_ALL, &hdev->quirks);
2396                 set_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks);
2397
2398                 /* Clear the reset quirk since this is not an actual
2399                  * early Bluetooth 1.1 device from CSR.
2400                  */
2401                 clear_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
2402                 clear_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
2403
2404                 /*
2405                  * Special workaround for these BT 4.0 chip clones, and potentially more:
2406                  *
2407                  * - 0x0134: a Barrot 8041a02                 (HCI rev: 0x0810 sub: 0x1012)
2408                  * - 0x7558: IC markings FR3191AHAL 749H15143 (HCI rev/sub-version: 0x0709)
2409                  *
2410                  * These controllers are really messed-up.
2411                  *
2412                  * 1. Their bulk RX endpoint will never report any data unless
2413                  *    the device was suspended at least once (yes, really).
2414                  * 2. They will not wakeup when autosuspended and receiving data
2415                  *    on their bulk RX endpoint from e.g. a keyboard or mouse
2416                  *    (IOW remote-wakeup support is broken for the bulk endpoint).
2417                  *
2418                  * To fix 1. enable runtime-suspend, force-suspend the
2419                  * HCI and then wake-it up by disabling runtime-suspend.
2420                  *
2421                  * To fix 2. clear the HCI's can_wake flag, this way the HCI
2422                  * will still be autosuspended when it is not open.
2423                  *
2424                  * --
2425                  *
2426                  * Because these are widespread problems we prefer generic solutions; so
2427                  * apply this initialization quirk to every controller that gets here,
2428                  * it should be harmless. The alternative is to not work at all.
2429                  */
2430                 pm_runtime_allow(&data->udev->dev);
2431
2432                 ret = pm_runtime_suspend(&data->udev->dev);
2433                 if (ret >= 0)
2434                         msleep(200);
2435                 else
2436                         bt_dev_warn(hdev, "CSR: Couldn't suspend the device for our Barrot 8041a02 receive-issue workaround");
2437
2438                 pm_runtime_forbid(&data->udev->dev);
2439
2440                 device_set_wakeup_capable(&data->udev->dev, false);
2441
2442                 /* Re-enable autosuspend if this was requested */
2443                 if (enable_autosuspend)
2444                         usb_enable_autosuspend(data->udev);
2445         }
2446
2447         kfree_skb(skb);
2448
2449         return 0;
2450 }
2451
2452 static int inject_cmd_complete(struct hci_dev *hdev, __u16 opcode)
2453 {
2454         struct sk_buff *skb;
2455         struct hci_event_hdr *hdr;
2456         struct hci_ev_cmd_complete *evt;
2457
2458         skb = bt_skb_alloc(sizeof(*hdr) + sizeof(*evt) + 1, GFP_KERNEL);
2459         if (!skb)
2460                 return -ENOMEM;
2461
2462         hdr = skb_put(skb, sizeof(*hdr));
2463         hdr->evt = HCI_EV_CMD_COMPLETE;
2464         hdr->plen = sizeof(*evt) + 1;
2465
2466         evt = skb_put(skb, sizeof(*evt));
2467         evt->ncmd = 0x01;
2468         evt->opcode = cpu_to_le16(opcode);
2469
2470         skb_put_u8(skb, 0x00);
2471
2472         hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
2473
2474         return hci_recv_frame(hdev, skb);
2475 }
2476
2477 static int btusb_recv_bulk_intel(struct btusb_data *data, void *buffer,
2478                                  int count)
2479 {
2480         struct hci_dev *hdev = data->hdev;
2481
2482         /* When the device is in bootloader mode, then it can send
2483          * events via the bulk endpoint. These events are treated the
2484          * same way as the ones received from the interrupt endpoint.
2485          */
2486         if (btintel_test_flag(hdev, INTEL_BOOTLOADER))
2487                 return btusb_recv_intr(data, buffer, count);
2488
2489         return btusb_recv_bulk(data, buffer, count);
2490 }
2491
2492 static int btusb_intel_diagnostics(struct hci_dev *hdev, struct sk_buff *skb)
2493 {
2494         struct intel_tlv *tlv = (void *)&skb->data[5];
2495
2496         /* The first event is always an event type TLV */
2497         if (tlv->type != INTEL_TLV_TYPE_ID)
2498                 goto recv_frame;
2499
2500         switch (tlv->val[0]) {
2501         case INTEL_TLV_SYSTEM_EXCEPTION:
2502         case INTEL_TLV_FATAL_EXCEPTION:
2503         case INTEL_TLV_DEBUG_EXCEPTION:
2504         case INTEL_TLV_TEST_EXCEPTION:
2505                 /* Generate devcoredump from exception */
2506                 if (!hci_devcd_init(hdev, skb->len)) {
2507                         hci_devcd_append(hdev, skb);
2508                         hci_devcd_complete(hdev);
2509                 } else {
2510                         bt_dev_err(hdev, "Failed to generate devcoredump");
2511                         kfree_skb(skb);
2512                 }
2513                 return 0;
2514         default:
2515                 bt_dev_err(hdev, "Invalid exception type %02X", tlv->val[0]);
2516         }
2517
2518 recv_frame:
2519         return hci_recv_frame(hdev, skb);
2520 }
2521
2522 static int btusb_recv_event_intel(struct hci_dev *hdev, struct sk_buff *skb)
2523 {
2524         struct hci_event_hdr *hdr = (void *)skb->data;
2525         const char diagnostics_hdr[] = { 0x87, 0x80, 0x03 };
2526
2527         if (skb->len > HCI_EVENT_HDR_SIZE && hdr->evt == 0xff &&
2528             hdr->plen > 0) {
2529                 const void *ptr = skb->data + HCI_EVENT_HDR_SIZE + 1;
2530                 unsigned int len = skb->len - HCI_EVENT_HDR_SIZE - 1;
2531
2532                 if (btintel_test_flag(hdev, INTEL_BOOTLOADER)) {
2533                         switch (skb->data[2]) {
2534                         case 0x02:
2535                                 /* When switching to the operational firmware
2536                                  * the device sends a vendor specific event
2537                                  * indicating that the bootup completed.
2538                                  */
2539                                 btintel_bootup(hdev, ptr, len);
2540                                 break;
2541                         case 0x06:
2542                                 /* When the firmware loading completes the
2543                                  * device sends out a vendor specific event
2544                                  * indicating the result of the firmware
2545                                  * loading.
2546                                  */
2547                                 btintel_secure_send_result(hdev, ptr, len);
2548                                 break;
2549                         }
2550                 }
2551
2552                 /* Handle all diagnostics events separately. May still call
2553                  * hci_recv_frame.
2554                  */
2555                 if (len >= sizeof(diagnostics_hdr) &&
2556                     memcmp(&skb->data[2], diagnostics_hdr,
2557                            sizeof(diagnostics_hdr)) == 0) {
2558                         return btusb_intel_diagnostics(hdev, skb);
2559                 }
2560         }
2561
2562         return hci_recv_frame(hdev, skb);
2563 }
2564
2565 static int btusb_send_frame_intel(struct hci_dev *hdev, struct sk_buff *skb)
2566 {
2567         struct urb *urb;
2568
2569         BT_DBG("%s", hdev->name);
2570
2571         switch (hci_skb_pkt_type(skb)) {
2572         case HCI_COMMAND_PKT:
2573                 if (btintel_test_flag(hdev, INTEL_BOOTLOADER)) {
2574                         struct hci_command_hdr *cmd = (void *)skb->data;
2575                         __u16 opcode = le16_to_cpu(cmd->opcode);
2576
2577                         /* When in bootloader mode and the command 0xfc09
2578                          * is received, it needs to be send down the
2579                          * bulk endpoint. So allocate a bulk URB instead.
2580                          */
2581                         if (opcode == 0xfc09)
2582                                 urb = alloc_bulk_urb(hdev, skb);
2583                         else
2584                                 urb = alloc_ctrl_urb(hdev, skb);
2585
2586                         /* When the 0xfc01 command is issued to boot into
2587                          * the operational firmware, it will actually not
2588                          * send a command complete event. To keep the flow
2589                          * control working inject that event here.
2590                          */
2591                         if (opcode == 0xfc01)
2592                                 inject_cmd_complete(hdev, opcode);
2593                 } else {
2594                         urb = alloc_ctrl_urb(hdev, skb);
2595                 }
2596                 if (IS_ERR(urb))
2597                         return PTR_ERR(urb);
2598
2599                 hdev->stat.cmd_tx++;
2600                 return submit_or_queue_tx_urb(hdev, urb);
2601
2602         case HCI_ACLDATA_PKT:
2603                 urb = alloc_bulk_urb(hdev, skb);
2604                 if (IS_ERR(urb))
2605                         return PTR_ERR(urb);
2606
2607                 hdev->stat.acl_tx++;
2608                 return submit_or_queue_tx_urb(hdev, urb);
2609
2610         case HCI_SCODATA_PKT:
2611                 if (hci_conn_num(hdev, SCO_LINK) < 1)
2612                         return -ENODEV;
2613
2614                 urb = alloc_isoc_urb(hdev, skb);
2615                 if (IS_ERR(urb))
2616                         return PTR_ERR(urb);
2617
2618                 hdev->stat.sco_tx++;
2619                 return submit_tx_urb(hdev, urb);
2620
2621         case HCI_ISODATA_PKT:
2622                 urb = alloc_bulk_urb(hdev, skb);
2623                 if (IS_ERR(urb))
2624                         return PTR_ERR(urb);
2625
2626                 return submit_or_queue_tx_urb(hdev, urb);
2627         }
2628
2629         return -EILSEQ;
2630 }
2631
2632 static int btusb_setup_realtek(struct hci_dev *hdev)
2633 {
2634         struct btusb_data *data = hci_get_drvdata(hdev);
2635         int ret;
2636
2637         ret = btrtl_setup_realtek(hdev);
2638
2639         if (btrealtek_test_flag(data->hdev, REALTEK_ALT6_CONTINUOUS_TX_CHIP))
2640                 set_bit(BTUSB_ALT6_CONTINUOUS_TX, &data->flags);
2641
2642         return ret;
2643 }
2644
2645 static int btusb_recv_event_realtek(struct hci_dev *hdev, struct sk_buff *skb)
2646 {
2647         if (skb->data[0] == HCI_VENDOR_PKT && skb->data[2] == RTK_SUB_EVENT_CODE_COREDUMP) {
2648                 struct rtk_dev_coredump_hdr hdr = {
2649                         .code = RTK_DEVCOREDUMP_CODE_MEMDUMP,
2650                 };
2651
2652                 bt_dev_dbg(hdev, "RTL: received coredump vendor evt, len %u",
2653                         skb->len);
2654
2655                 btusb_rtl_alloc_devcoredump(hdev, &hdr, skb->data, skb->len);
2656                 kfree_skb(skb);
2657
2658                 return 0;
2659         }
2660
2661         return hci_recv_frame(hdev, skb);
2662 }
2663
2664 /* UHW CR mapping */
2665 #define MTK_BT_MISC             0x70002510
2666 #define MTK_BT_SUBSYS_RST       0x70002610
2667 #define MTK_UDMA_INT_STA_BT     0x74000024
2668 #define MTK_UDMA_INT_STA_BT1    0x74000308
2669 #define MTK_BT_WDT_STATUS       0x740003A0
2670 #define MTK_EP_RST_OPT          0x74011890
2671 #define MTK_EP_RST_IN_OUT_OPT   0x00010001
2672 #define MTK_BT_RST_DONE         0x00000100
2673 #define MTK_BT_RESET_REG_CONNV3 0x70028610
2674 #define MTK_BT_READ_DEV_ID      0x70010200
2675
2676
2677 static void btusb_mtk_wmt_recv(struct urb *urb)
2678 {
2679         struct hci_dev *hdev = urb->context;
2680         struct btusb_data *data = hci_get_drvdata(hdev);
2681         struct sk_buff *skb;
2682         int err;
2683
2684         if (urb->status == 0 && urb->actual_length > 0) {
2685                 hdev->stat.byte_rx += urb->actual_length;
2686
2687                 /* WMT event shouldn't be fragmented and the size should be
2688                  * less than HCI_WMT_MAX_EVENT_SIZE.
2689                  */
2690                 skb = bt_skb_alloc(HCI_WMT_MAX_EVENT_SIZE, GFP_ATOMIC);
2691                 if (!skb) {
2692                         hdev->stat.err_rx++;
2693                         kfree(urb->setup_packet);
2694                         return;
2695                 }
2696
2697                 hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
2698                 skb_put_data(skb, urb->transfer_buffer, urb->actual_length);
2699
2700                 /* When someone waits for the WMT event, the skb is being cloned
2701                  * and being processed the events from there then.
2702                  */
2703                 if (test_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags)) {
2704                         data->evt_skb = skb_clone(skb, GFP_ATOMIC);
2705                         if (!data->evt_skb) {
2706                                 kfree_skb(skb);
2707                                 kfree(urb->setup_packet);
2708                                 return;
2709                         }
2710                 }
2711
2712                 err = hci_recv_frame(hdev, skb);
2713                 if (err < 0) {
2714                         kfree_skb(data->evt_skb);
2715                         data->evt_skb = NULL;
2716                         kfree(urb->setup_packet);
2717                         return;
2718                 }
2719
2720                 if (test_and_clear_bit(BTUSB_TX_WAIT_VND_EVT,
2721                                        &data->flags)) {
2722                         /* Barrier to sync with other CPUs */
2723                         smp_mb__after_atomic();
2724                         wake_up_bit(&data->flags,
2725                                     BTUSB_TX_WAIT_VND_EVT);
2726                 }
2727                 kfree(urb->setup_packet);
2728                 return;
2729         } else if (urb->status == -ENOENT) {
2730                 /* Avoid suspend failed when usb_kill_urb */
2731                 return;
2732         }
2733
2734         usb_mark_last_busy(data->udev);
2735
2736         /* The URB complete handler is still called with urb->actual_length = 0
2737          * when the event is not available, so we should keep re-submitting
2738          * URB until WMT event returns, Also, It's necessary to wait some time
2739          * between the two consecutive control URBs to relax the target device
2740          * to generate the event. Otherwise, the WMT event cannot return from
2741          * the device successfully.
2742          */
2743         udelay(500);
2744
2745         usb_anchor_urb(urb, &data->ctrl_anchor);
2746         err = usb_submit_urb(urb, GFP_ATOMIC);
2747         if (err < 0) {
2748                 kfree(urb->setup_packet);
2749                 /* -EPERM: urb is being killed;
2750                  * -ENODEV: device got disconnected
2751                  */
2752                 if (err != -EPERM && err != -ENODEV)
2753                         bt_dev_err(hdev, "urb %p failed to resubmit (%d)",
2754                                    urb, -err);
2755                 usb_unanchor_urb(urb);
2756         }
2757 }
2758
2759 static int btusb_mtk_submit_wmt_recv_urb(struct hci_dev *hdev)
2760 {
2761         struct btusb_data *data = hci_get_drvdata(hdev);
2762         struct usb_ctrlrequest *dr;
2763         unsigned char *buf;
2764         int err, size = 64;
2765         unsigned int pipe;
2766         struct urb *urb;
2767
2768         urb = usb_alloc_urb(0, GFP_KERNEL);
2769         if (!urb)
2770                 return -ENOMEM;
2771
2772         dr = kmalloc(sizeof(*dr), GFP_KERNEL);
2773         if (!dr) {
2774                 usb_free_urb(urb);
2775                 return -ENOMEM;
2776         }
2777
2778         dr->bRequestType = USB_TYPE_VENDOR | USB_DIR_IN;
2779         dr->bRequest     = 1;
2780         dr->wIndex       = cpu_to_le16(0);
2781         dr->wValue       = cpu_to_le16(48);
2782         dr->wLength      = cpu_to_le16(size);
2783
2784         buf = kmalloc(size, GFP_KERNEL);
2785         if (!buf) {
2786                 kfree(dr);
2787                 usb_free_urb(urb);
2788                 return -ENOMEM;
2789         }
2790
2791         pipe = usb_rcvctrlpipe(data->udev, 0);
2792
2793         usb_fill_control_urb(urb, data->udev, pipe, (void *)dr,
2794                              buf, size, btusb_mtk_wmt_recv, hdev);
2795
2796         urb->transfer_flags |= URB_FREE_BUFFER;
2797
2798         usb_anchor_urb(urb, &data->ctrl_anchor);
2799         err = usb_submit_urb(urb, GFP_KERNEL);
2800         if (err < 0) {
2801                 if (err != -EPERM && err != -ENODEV)
2802                         bt_dev_err(hdev, "urb %p submission failed (%d)",
2803                                    urb, -err);
2804                 usb_unanchor_urb(urb);
2805         }
2806
2807         usb_free_urb(urb);
2808
2809         return err;
2810 }
2811
2812 static int btusb_mtk_hci_wmt_sync(struct hci_dev *hdev,
2813                                   struct btmtk_hci_wmt_params *wmt_params)
2814 {
2815         struct btusb_data *data = hci_get_drvdata(hdev);
2816         struct btmtk_hci_wmt_evt_funcc *wmt_evt_funcc;
2817         u32 hlen, status = BTMTK_WMT_INVALID;
2818         struct btmtk_hci_wmt_evt *wmt_evt;
2819         struct btmtk_hci_wmt_cmd *wc;
2820         struct btmtk_wmt_hdr *hdr;
2821         int err;
2822
2823         /* Send the WMT command and wait until the WMT event returns */
2824         hlen = sizeof(*hdr) + wmt_params->dlen;
2825         if (hlen > 255)
2826                 return -EINVAL;
2827
2828         wc = kzalloc(hlen, GFP_KERNEL);
2829         if (!wc)
2830                 return -ENOMEM;
2831
2832         hdr = &wc->hdr;
2833         hdr->dir = 1;
2834         hdr->op = wmt_params->op;
2835         hdr->dlen = cpu_to_le16(wmt_params->dlen + 1);
2836         hdr->flag = wmt_params->flag;
2837         memcpy(wc->data, wmt_params->data, wmt_params->dlen);
2838
2839         set_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
2840
2841         /* WMT cmd/event doesn't follow up the generic HCI cmd/event handling,
2842          * it needs constantly polling control pipe until the host received the
2843          * WMT event, thus, we should require to specifically acquire PM counter
2844          * on the USB to prevent the interface from entering auto suspended
2845          * while WMT cmd/event in progress.
2846          */
2847         err = usb_autopm_get_interface(data->intf);
2848         if (err < 0)
2849                 goto err_free_wc;
2850
2851         err = __hci_cmd_send(hdev, 0xfc6f, hlen, wc);
2852
2853         if (err < 0) {
2854                 clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
2855                 usb_autopm_put_interface(data->intf);
2856                 goto err_free_wc;
2857         }
2858
2859         /* Submit control IN URB on demand to process the WMT event */
2860         err = btusb_mtk_submit_wmt_recv_urb(hdev);
2861
2862         usb_autopm_put_interface(data->intf);
2863
2864         if (err < 0)
2865                 goto err_free_wc;
2866
2867         /* The vendor specific WMT commands are all answered by a vendor
2868          * specific event and will have the Command Status or Command
2869          * Complete as with usual HCI command flow control.
2870          *
2871          * After sending the command, wait for BTUSB_TX_WAIT_VND_EVT
2872          * state to be cleared. The driver specific event receive routine
2873          * will clear that state and with that indicate completion of the
2874          * WMT command.
2875          */
2876         err = wait_on_bit_timeout(&data->flags, BTUSB_TX_WAIT_VND_EVT,
2877                                   TASK_INTERRUPTIBLE, HCI_INIT_TIMEOUT);
2878         if (err == -EINTR) {
2879                 bt_dev_err(hdev, "Execution of wmt command interrupted");
2880                 clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
2881                 goto err_free_wc;
2882         }
2883
2884         if (err) {
2885                 bt_dev_err(hdev, "Execution of wmt command timed out");
2886                 clear_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags);
2887                 err = -ETIMEDOUT;
2888                 goto err_free_wc;
2889         }
2890
2891         /* Parse and handle the return WMT event */
2892         wmt_evt = (struct btmtk_hci_wmt_evt *)data->evt_skb->data;
2893         if (wmt_evt->whdr.op != hdr->op) {
2894                 bt_dev_err(hdev, "Wrong op received %d expected %d",
2895                            wmt_evt->whdr.op, hdr->op);
2896                 err = -EIO;
2897                 goto err_free_skb;
2898         }
2899
2900         switch (wmt_evt->whdr.op) {
2901         case BTMTK_WMT_SEMAPHORE:
2902                 if (wmt_evt->whdr.flag == 2)
2903                         status = BTMTK_WMT_PATCH_UNDONE;
2904                 else
2905                         status = BTMTK_WMT_PATCH_DONE;
2906                 break;
2907         case BTMTK_WMT_FUNC_CTRL:
2908                 wmt_evt_funcc = (struct btmtk_hci_wmt_evt_funcc *)wmt_evt;
2909                 if (be16_to_cpu(wmt_evt_funcc->status) == 0x404)
2910                         status = BTMTK_WMT_ON_DONE;
2911                 else if (be16_to_cpu(wmt_evt_funcc->status) == 0x420)
2912                         status = BTMTK_WMT_ON_PROGRESS;
2913                 else
2914                         status = BTMTK_WMT_ON_UNDONE;
2915                 break;
2916         case BTMTK_WMT_PATCH_DWNLD:
2917                 if (wmt_evt->whdr.flag == 2)
2918                         status = BTMTK_WMT_PATCH_DONE;
2919                 else if (wmt_evt->whdr.flag == 1)
2920                         status = BTMTK_WMT_PATCH_PROGRESS;
2921                 else
2922                         status = BTMTK_WMT_PATCH_UNDONE;
2923                 break;
2924         }
2925
2926         if (wmt_params->status)
2927                 *wmt_params->status = status;
2928
2929 err_free_skb:
2930         kfree_skb(data->evt_skb);
2931         data->evt_skb = NULL;
2932 err_free_wc:
2933         kfree(wc);
2934         return err;
2935 }
2936
2937 static int btusb_mtk_func_query(struct hci_dev *hdev)
2938 {
2939         struct btmtk_hci_wmt_params wmt_params;
2940         int status, err;
2941         u8 param = 0;
2942
2943         /* Query whether the function is enabled */
2944         wmt_params.op = BTMTK_WMT_FUNC_CTRL;
2945         wmt_params.flag = 4;
2946         wmt_params.dlen = sizeof(param);
2947         wmt_params.data = &param;
2948         wmt_params.status = &status;
2949
2950         err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
2951         if (err < 0) {
2952                 bt_dev_err(hdev, "Failed to query function status (%d)", err);
2953                 return err;
2954         }
2955
2956         return status;
2957 }
2958
2959 static int btusb_mtk_uhw_reg_write(struct btusb_data *data, u32 reg, u32 val)
2960 {
2961         struct hci_dev *hdev = data->hdev;
2962         int pipe, err;
2963         void *buf;
2964
2965         buf = kzalloc(4, GFP_KERNEL);
2966         if (!buf)
2967                 return -ENOMEM;
2968
2969         put_unaligned_le32(val, buf);
2970
2971         pipe = usb_sndctrlpipe(data->udev, 0);
2972         err = usb_control_msg(data->udev, pipe, 0x02,
2973                               0x5E,
2974                               reg >> 16, reg & 0xffff,
2975                               buf, 4, USB_CTRL_SET_TIMEOUT);
2976         if (err < 0) {
2977                 bt_dev_err(hdev, "Failed to write uhw reg(%d)", err);
2978                 goto err_free_buf;
2979         }
2980
2981 err_free_buf:
2982         kfree(buf);
2983
2984         return err;
2985 }
2986
2987 static int btusb_mtk_uhw_reg_read(struct btusb_data *data, u32 reg, u32 *val)
2988 {
2989         struct hci_dev *hdev = data->hdev;
2990         int pipe, err;
2991         void *buf;
2992
2993         buf = kzalloc(4, GFP_KERNEL);
2994         if (!buf)
2995                 return -ENOMEM;
2996
2997         pipe = usb_rcvctrlpipe(data->udev, 0);
2998         err = usb_control_msg(data->udev, pipe, 0x01,
2999                               0xDE,
3000                               reg >> 16, reg & 0xffff,
3001                               buf, 4, USB_CTRL_SET_TIMEOUT);
3002         if (err < 0) {
3003                 bt_dev_err(hdev, "Failed to read uhw reg(%d)", err);
3004                 goto err_free_buf;
3005         }
3006
3007         *val = get_unaligned_le32(buf);
3008         bt_dev_dbg(hdev, "reg=%x, value=0x%08x", reg, *val);
3009
3010 err_free_buf:
3011         kfree(buf);
3012
3013         return err;
3014 }
3015
3016 static int btusb_mtk_reg_read(struct btusb_data *data, u32 reg, u32 *val)
3017 {
3018         int pipe, err, size = sizeof(u32);
3019         void *buf;
3020
3021         buf = kzalloc(size, GFP_KERNEL);
3022         if (!buf)
3023                 return -ENOMEM;
3024
3025         pipe = usb_rcvctrlpipe(data->udev, 0);
3026         err = usb_control_msg(data->udev, pipe, 0x63,
3027                               USB_TYPE_VENDOR | USB_DIR_IN,
3028                               reg >> 16, reg & 0xffff,
3029                               buf, size, USB_CTRL_SET_TIMEOUT);
3030         if (err < 0)
3031                 goto err_free_buf;
3032
3033         *val = get_unaligned_le32(buf);
3034
3035 err_free_buf:
3036         kfree(buf);
3037
3038         return err;
3039 }
3040
3041 static int btusb_mtk_id_get(struct btusb_data *data, u32 reg, u32 *id)
3042 {
3043         return btusb_mtk_reg_read(data, reg, id);
3044 }
3045
3046 static u32 btusb_mtk_reset_done(struct hci_dev *hdev)
3047 {
3048         struct btusb_data *data = hci_get_drvdata(hdev);
3049         u32 val = 0;
3050
3051         btusb_mtk_uhw_reg_read(data, MTK_BT_MISC, &val);
3052
3053         return val & MTK_BT_RST_DONE;
3054 }
3055
3056 static int btusb_mtk_reset(struct hci_dev *hdev, void *rst_data)
3057 {
3058         struct btusb_data *data = hci_get_drvdata(hdev);
3059         struct btmediatek_data *mediatek;
3060         u32 val;
3061         int err;
3062
3063         /* It's MediaTek specific bluetooth reset mechanism via USB */
3064         if (test_and_set_bit(BTUSB_HW_RESET_ACTIVE, &data->flags)) {
3065                 bt_dev_err(hdev, "last reset failed? Not resetting again");
3066                 return -EBUSY;
3067         }
3068
3069         err = usb_autopm_get_interface(data->intf);
3070         if (err < 0)
3071                 return err;
3072
3073         btusb_stop_traffic(data);
3074         usb_kill_anchored_urbs(&data->tx_anchor);
3075         mediatek = hci_get_priv(hdev);
3076
3077         if (mediatek->dev_id == 0x7925) {
3078                 btusb_mtk_uhw_reg_read(data, MTK_BT_RESET_REG_CONNV3, &val);
3079                 val |= (1 << 5);
3080                 btusb_mtk_uhw_reg_write(data, MTK_BT_RESET_REG_CONNV3, val);
3081                 btusb_mtk_uhw_reg_read(data, MTK_BT_RESET_REG_CONNV3, &val);
3082                 val &= 0xFFFF00FF;
3083                 val |= (1 << 13);
3084                 btusb_mtk_uhw_reg_write(data, MTK_BT_RESET_REG_CONNV3, val);
3085                 btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, 0x00010001);
3086                 btusb_mtk_uhw_reg_read(data, MTK_BT_RESET_REG_CONNV3, &val);
3087                 val |= (1 << 0);
3088                 btusb_mtk_uhw_reg_write(data, MTK_BT_RESET_REG_CONNV3, val);
3089                 btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT, 0x000000FF);
3090                 btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT, &val);
3091                 btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT1, 0x000000FF);
3092                 btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT1, &val);
3093                 msleep(100);
3094         } else {
3095                 /* It's Device EndPoint Reset Option Register */
3096                 bt_dev_dbg(hdev, "Initiating reset mechanism via uhw");
3097                 btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, MTK_EP_RST_IN_OUT_OPT);
3098                 btusb_mtk_uhw_reg_read(data, MTK_BT_WDT_STATUS, &val);
3099
3100                 /* Reset the bluetooth chip via USB interface. */
3101                 btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 1);
3102                 btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT, 0x000000FF);
3103                 btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT, &val);
3104                 btusb_mtk_uhw_reg_write(data, MTK_UDMA_INT_STA_BT1, 0x000000FF);
3105                 btusb_mtk_uhw_reg_read(data, MTK_UDMA_INT_STA_BT1, &val);
3106                 /* MT7921 need to delay 20ms between toggle reset bit */
3107                 msleep(20);
3108                 btusb_mtk_uhw_reg_write(data, MTK_BT_SUBSYS_RST, 0);
3109                 btusb_mtk_uhw_reg_read(data, MTK_BT_SUBSYS_RST, &val);
3110         }
3111
3112         err = readx_poll_timeout(btusb_mtk_reset_done, hdev, val,
3113                                  val & MTK_BT_RST_DONE, 20000, 1000000);
3114         if (err < 0)
3115                 bt_dev_err(hdev, "Reset timeout");
3116
3117         btusb_mtk_id_get(data, 0x70010200, &val);
3118         if (!val)
3119                 bt_dev_err(hdev, "Can't get device id, subsys reset fail.");
3120
3121         usb_queue_reset_device(data->intf);
3122
3123         clear_bit(BTUSB_HW_RESET_ACTIVE, &data->flags);
3124
3125         return err;
3126 }
3127
3128 static int btusb_mtk_setup(struct hci_dev *hdev)
3129 {
3130         struct btusb_data *data = hci_get_drvdata(hdev);
3131         struct btmtk_hci_wmt_params wmt_params;
3132         ktime_t calltime, delta, rettime;
3133         struct btmtk_tci_sleep tci_sleep;
3134         unsigned long long duration;
3135         struct sk_buff *skb;
3136         const char *fwname;
3137         int err, status;
3138         u32 dev_id = 0;
3139         char fw_bin_name[64];
3140         u32 fw_version = 0;
3141         u8 param;
3142         struct btmediatek_data *mediatek;
3143
3144         calltime = ktime_get();
3145
3146         err = btusb_mtk_id_get(data, 0x80000008, &dev_id);
3147         if (err < 0) {
3148                 bt_dev_err(hdev, "Failed to get device id (%d)", err);
3149                 return err;
3150         }
3151
3152         if (!dev_id || dev_id != 0x7663) {
3153                 err = btusb_mtk_id_get(data, 0x70010200, &dev_id);
3154                 if (err < 0) {
3155                         bt_dev_err(hdev, "Failed to get device id (%d)", err);
3156                         return err;
3157                 }
3158                 err = btusb_mtk_id_get(data, 0x80021004, &fw_version);
3159                 if (err < 0) {
3160                         bt_dev_err(hdev, "Failed to get fw version (%d)", err);
3161                         return err;
3162                 }
3163         }
3164
3165         mediatek = hci_get_priv(hdev);
3166         mediatek->dev_id = dev_id;
3167         mediatek->reset_sync = btusb_mtk_reset;
3168
3169         err = btmtk_register_coredump(hdev, btusb_driver.name, fw_version);
3170         if (err < 0)
3171                 bt_dev_err(hdev, "Failed to register coredump (%d)", err);
3172
3173         switch (dev_id) {
3174         case 0x7663:
3175                 fwname = FIRMWARE_MT7663;
3176                 break;
3177         case 0x7668:
3178                 fwname = FIRMWARE_MT7668;
3179                 break;
3180         case 0x7922:
3181         case 0x7961:
3182         case 0x7925:
3183                 if (dev_id == 0x7925)
3184                         snprintf(fw_bin_name, sizeof(fw_bin_name),
3185                                  "mediatek/mt%04x/BT_RAM_CODE_MT%04x_1_%x_hdr.bin",
3186                                  dev_id & 0xffff, dev_id & 0xffff, (fw_version & 0xff) + 1);
3187                 else
3188                         snprintf(fw_bin_name, sizeof(fw_bin_name),
3189                                  "mediatek/BT_RAM_CODE_MT%04x_1_%x_hdr.bin",
3190                                  dev_id & 0xffff, (fw_version & 0xff) + 1);
3191
3192                 err = btmtk_setup_firmware_79xx(hdev, fw_bin_name,
3193                                                 btusb_mtk_hci_wmt_sync);
3194                 if (err < 0) {
3195                         bt_dev_err(hdev, "Failed to set up firmware (%d)", err);
3196                         return err;
3197                 }
3198
3199                 /* It's Device EndPoint Reset Option Register */
3200                 btusb_mtk_uhw_reg_write(data, MTK_EP_RST_OPT, MTK_EP_RST_IN_OUT_OPT);
3201
3202                 /* Enable Bluetooth protocol */
3203                 param = 1;
3204                 wmt_params.op = BTMTK_WMT_FUNC_CTRL;
3205                 wmt_params.flag = 0;
3206                 wmt_params.dlen = sizeof(param);
3207                 wmt_params.data = &param;
3208                 wmt_params.status = NULL;
3209
3210                 err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
3211                 if (err < 0) {
3212                         bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
3213                         return err;
3214                 }
3215
3216                 hci_set_msft_opcode(hdev, 0xFD30);
3217                 hci_set_aosp_capable(hdev);
3218                 goto done;
3219         default:
3220                 bt_dev_err(hdev, "Unsupported hardware variant (%08x)",
3221                            dev_id);
3222                 return -ENODEV;
3223         }
3224
3225         /* Query whether the firmware is already download */
3226         wmt_params.op = BTMTK_WMT_SEMAPHORE;
3227         wmt_params.flag = 1;
3228         wmt_params.dlen = 0;
3229         wmt_params.data = NULL;
3230         wmt_params.status = &status;
3231
3232         err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
3233         if (err < 0) {
3234                 bt_dev_err(hdev, "Failed to query firmware status (%d)", err);
3235                 return err;
3236         }
3237
3238         if (status == BTMTK_WMT_PATCH_DONE) {
3239                 bt_dev_info(hdev, "firmware already downloaded");
3240                 goto ignore_setup_fw;
3241         }
3242
3243         /* Setup a firmware which the device definitely requires */
3244         err = btmtk_setup_firmware(hdev, fwname,
3245                                    btusb_mtk_hci_wmt_sync);
3246         if (err < 0)
3247                 return err;
3248
3249 ignore_setup_fw:
3250         err = readx_poll_timeout(btusb_mtk_func_query, hdev, status,
3251                                  status < 0 || status != BTMTK_WMT_ON_PROGRESS,
3252                                  2000, 5000000);
3253         /* -ETIMEDOUT happens */
3254         if (err < 0)
3255                 return err;
3256
3257         /* The other errors happen in btusb_mtk_func_query */
3258         if (status < 0)
3259                 return status;
3260
3261         if (status == BTMTK_WMT_ON_DONE) {
3262                 bt_dev_info(hdev, "function already on");
3263                 goto ignore_func_on;
3264         }
3265
3266         /* Enable Bluetooth protocol */
3267         param = 1;
3268         wmt_params.op = BTMTK_WMT_FUNC_CTRL;
3269         wmt_params.flag = 0;
3270         wmt_params.dlen = sizeof(param);
3271         wmt_params.data = &param;
3272         wmt_params.status = NULL;
3273
3274         err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
3275         if (err < 0) {
3276                 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
3277                 return err;
3278         }
3279
3280 ignore_func_on:
3281         /* Apply the low power environment setup */
3282         tci_sleep.mode = 0x5;
3283         tci_sleep.duration = cpu_to_le16(0x640);
3284         tci_sleep.host_duration = cpu_to_le16(0x640);
3285         tci_sleep.host_wakeup_pin = 0;
3286         tci_sleep.time_compensation = 0;
3287
3288         skb = __hci_cmd_sync(hdev, 0xfc7a, sizeof(tci_sleep), &tci_sleep,
3289                              HCI_INIT_TIMEOUT);
3290         if (IS_ERR(skb)) {
3291                 err = PTR_ERR(skb);
3292                 bt_dev_err(hdev, "Failed to apply low power setting (%d)", err);
3293                 return err;
3294         }
3295         kfree_skb(skb);
3296
3297 done:
3298         rettime = ktime_get();
3299         delta = ktime_sub(rettime, calltime);
3300         duration = (unsigned long long)ktime_to_ns(delta) >> 10;
3301
3302         bt_dev_info(hdev, "Device setup in %llu usecs", duration);
3303
3304         return 0;
3305 }
3306
3307 static int btusb_mtk_shutdown(struct hci_dev *hdev)
3308 {
3309         struct btmtk_hci_wmt_params wmt_params;
3310         u8 param = 0;
3311         int err;
3312
3313         /* Disable the device */
3314         wmt_params.op = BTMTK_WMT_FUNC_CTRL;
3315         wmt_params.flag = 0;
3316         wmt_params.dlen = sizeof(param);
3317         wmt_params.data = &param;
3318         wmt_params.status = NULL;
3319
3320         err = btusb_mtk_hci_wmt_sync(hdev, &wmt_params);
3321         if (err < 0) {
3322                 bt_dev_err(hdev, "Failed to send wmt func ctrl (%d)", err);
3323                 return err;
3324         }
3325
3326         return 0;
3327 }
3328
3329 static int btusb_recv_acl_mtk(struct hci_dev *hdev, struct sk_buff *skb)
3330 {
3331         struct btusb_data *data = hci_get_drvdata(hdev);
3332         u16 handle = le16_to_cpu(hci_acl_hdr(skb)->handle);
3333         struct sk_buff *skb_cd;
3334
3335         switch (handle) {
3336         case 0xfc6f:            /* Firmware dump from device */
3337                 /* When the firmware hangs, the device can no longer
3338                  * suspend and thus disable auto-suspend.
3339                  */
3340                 usb_disable_autosuspend(data->udev);
3341
3342                 /* We need to forward the diagnostic packet to userspace daemon
3343                  * for backward compatibility, so we have to clone the packet
3344                  * extraly for the in-kernel coredump support.
3345                  */
3346                 skb_cd = skb_clone(skb, GFP_ATOMIC);
3347                 if (skb_cd)
3348                         btmtk_process_coredump(hdev, skb_cd);
3349
3350                 fallthrough;
3351         case 0x05ff:            /* Firmware debug logging 1 */
3352         case 0x05fe:            /* Firmware debug logging 2 */
3353                 return hci_recv_diag(hdev, skb);
3354         }
3355
3356         return hci_recv_frame(hdev, skb);
3357 }
3358
3359 #ifdef CONFIG_PM
3360 /* Configure an out-of-band gpio as wake-up pin, if specified in device tree */
3361 static int marvell_config_oob_wake(struct hci_dev *hdev)
3362 {
3363         struct sk_buff *skb;
3364         struct btusb_data *data = hci_get_drvdata(hdev);
3365         struct device *dev = &data->udev->dev;
3366         u16 pin, gap, opcode;
3367         int ret;
3368         u8 cmd[5];
3369
3370         /* Move on if no wakeup pin specified */
3371         if (of_property_read_u16(dev->of_node, "marvell,wakeup-pin", &pin) ||
3372             of_property_read_u16(dev->of_node, "marvell,wakeup-gap-ms", &gap))
3373                 return 0;
3374
3375         /* Vendor specific command to configure a GPIO as wake-up pin */
3376         opcode = hci_opcode_pack(0x3F, 0x59);
3377         cmd[0] = opcode & 0xFF;
3378         cmd[1] = opcode >> 8;
3379         cmd[2] = 2; /* length of parameters that follow */
3380         cmd[3] = pin;
3381         cmd[4] = gap; /* time in ms, for which wakeup pin should be asserted */
3382
3383         skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
3384         if (!skb) {
3385                 bt_dev_err(hdev, "%s: No memory", __func__);
3386                 return -ENOMEM;
3387         }
3388
3389         skb_put_data(skb, cmd, sizeof(cmd));
3390         hci_skb_pkt_type(skb) = HCI_COMMAND_PKT;
3391
3392         ret = btusb_send_frame(hdev, skb);
3393         if (ret) {
3394                 bt_dev_err(hdev, "%s: configuration failed", __func__);
3395                 kfree_skb(skb);
3396                 return ret;
3397         }
3398
3399         return 0;
3400 }
3401 #endif
3402
3403 static int btusb_set_bdaddr_marvell(struct hci_dev *hdev,
3404                                     const bdaddr_t *bdaddr)
3405 {
3406         struct sk_buff *skb;
3407         u8 buf[8];
3408         long ret;
3409
3410         buf[0] = 0xfe;
3411         buf[1] = sizeof(bdaddr_t);
3412         memcpy(buf + 2, bdaddr, sizeof(bdaddr_t));
3413
3414         skb = __hci_cmd_sync(hdev, 0xfc22, sizeof(buf), buf, HCI_INIT_TIMEOUT);
3415         if (IS_ERR(skb)) {
3416                 ret = PTR_ERR(skb);
3417                 bt_dev_err(hdev, "changing Marvell device address failed (%ld)",
3418                            ret);
3419                 return ret;
3420         }
3421         kfree_skb(skb);
3422
3423         return 0;
3424 }
3425
3426 static int btusb_set_bdaddr_ath3012(struct hci_dev *hdev,
3427                                     const bdaddr_t *bdaddr)
3428 {
3429         struct sk_buff *skb;
3430         u8 buf[10];
3431         long ret;
3432
3433         buf[0] = 0x01;
3434         buf[1] = 0x01;
3435         buf[2] = 0x00;
3436         buf[3] = sizeof(bdaddr_t);
3437         memcpy(buf + 4, bdaddr, sizeof(bdaddr_t));
3438
3439         skb = __hci_cmd_sync(hdev, 0xfc0b, sizeof(buf), buf, HCI_INIT_TIMEOUT);
3440         if (IS_ERR(skb)) {
3441                 ret = PTR_ERR(skb);
3442                 bt_dev_err(hdev, "Change address command failed (%ld)", ret);
3443                 return ret;
3444         }
3445         kfree_skb(skb);
3446
3447         return 0;
3448 }
3449
3450 static int btusb_set_bdaddr_wcn6855(struct hci_dev *hdev,
3451                                 const bdaddr_t *bdaddr)
3452 {
3453         struct sk_buff *skb;
3454         u8 buf[6];
3455         long ret;
3456
3457         memcpy(buf, bdaddr, sizeof(bdaddr_t));
3458
3459         skb = __hci_cmd_sync_ev(hdev, 0xfc14, sizeof(buf), buf,
3460                                 HCI_EV_CMD_COMPLETE, HCI_INIT_TIMEOUT);
3461         if (IS_ERR(skb)) {
3462                 ret = PTR_ERR(skb);
3463                 bt_dev_err(hdev, "Change address command failed (%ld)", ret);
3464                 return ret;
3465         }
3466         kfree_skb(skb);
3467
3468         return 0;
3469 }
3470
3471 #define QCA_MEMDUMP_ACL_HANDLE 0x2EDD
3472 #define QCA_MEMDUMP_SIZE_MAX  0x100000
3473 #define QCA_MEMDUMP_VSE_CLASS 0x01
3474 #define QCA_MEMDUMP_MSG_TYPE 0x08
3475 #define QCA_MEMDUMP_PKT_SIZE 248
3476 #define QCA_LAST_SEQUENCE_NUM 0xffff
3477
3478 struct qca_dump_hdr {
3479         u8 vse_class;
3480         u8 msg_type;
3481         __le16 seqno;
3482         u8 reserved;
3483         union {
3484                 u8 data[0];
3485                 struct {
3486                         __le32 ram_dump_size;
3487                         u8 data0[0];
3488                 } __packed;
3489         };
3490 } __packed;
3491
3492
3493 static void btusb_dump_hdr_qca(struct hci_dev *hdev, struct sk_buff *skb)
3494 {
3495         char buf[128];
3496         struct btusb_data *btdata = hci_get_drvdata(hdev);
3497
3498         snprintf(buf, sizeof(buf), "Controller Name: 0x%x\n",
3499                         btdata->qca_dump.controller_id);
3500         skb_put_data(skb, buf, strlen(buf));
3501
3502         snprintf(buf, sizeof(buf), "Firmware Version: 0x%x\n",
3503                         btdata->qca_dump.fw_version);
3504         skb_put_data(skb, buf, strlen(buf));
3505
3506         snprintf(buf, sizeof(buf), "Driver: %s\nVendor: qca\n",
3507                         btusb_driver.name);
3508         skb_put_data(skb, buf, strlen(buf));
3509
3510         snprintf(buf, sizeof(buf), "VID: 0x%x\nPID:0x%x\n",
3511                         btdata->qca_dump.id_vendor, btdata->qca_dump.id_product);
3512         skb_put_data(skb, buf, strlen(buf));
3513
3514         snprintf(buf, sizeof(buf), "Lmp Subversion: 0x%x\n",
3515                         hdev->lmp_subver);
3516         skb_put_data(skb, buf, strlen(buf));
3517 }
3518
3519 static void btusb_coredump_qca(struct hci_dev *hdev)
3520 {
3521         static const u8 param[] = { 0x26 };
3522         struct sk_buff *skb;
3523
3524         skb = __hci_cmd_sync(hdev, 0xfc0c, 1, param, HCI_CMD_TIMEOUT);
3525         if (IS_ERR(skb))
3526                 bt_dev_err(hdev, "%s: triggle crash failed (%ld)", __func__, PTR_ERR(skb));
3527         kfree_skb(skb);
3528 }
3529
3530 /*
3531  * ==0: not a dump pkt.
3532  * < 0: fails to handle a dump pkt
3533  * > 0: otherwise.
3534  */
3535 static int handle_dump_pkt_qca(struct hci_dev *hdev, struct sk_buff *skb)
3536 {
3537         int ret = 1;
3538         u8 pkt_type;
3539         u8 *sk_ptr;
3540         unsigned int sk_len;
3541         u16 seqno;
3542         u32 dump_size;
3543
3544         struct hci_event_hdr *event_hdr;
3545         struct hci_acl_hdr *acl_hdr;
3546         struct qca_dump_hdr *dump_hdr;
3547         struct btusb_data *btdata = hci_get_drvdata(hdev);
3548         struct usb_device *udev = btdata->udev;
3549
3550         pkt_type = hci_skb_pkt_type(skb);
3551         sk_ptr = skb->data;
3552         sk_len = skb->len;
3553
3554         if (pkt_type == HCI_ACLDATA_PKT) {
3555                 acl_hdr = hci_acl_hdr(skb);
3556                 if (le16_to_cpu(acl_hdr->handle) != QCA_MEMDUMP_ACL_HANDLE)
3557                         return 0;
3558                 sk_ptr += HCI_ACL_HDR_SIZE;
3559                 sk_len -= HCI_ACL_HDR_SIZE;
3560                 event_hdr = (struct hci_event_hdr *)sk_ptr;
3561         } else {
3562                 event_hdr = hci_event_hdr(skb);
3563         }
3564
3565         if ((event_hdr->evt != HCI_VENDOR_PKT)
3566                 || (event_hdr->plen != (sk_len - HCI_EVENT_HDR_SIZE)))
3567                 return 0;
3568
3569         sk_ptr += HCI_EVENT_HDR_SIZE;
3570         sk_len -= HCI_EVENT_HDR_SIZE;
3571
3572         dump_hdr = (struct qca_dump_hdr *)sk_ptr;
3573         if ((sk_len < offsetof(struct qca_dump_hdr, data))
3574                 || (dump_hdr->vse_class != QCA_MEMDUMP_VSE_CLASS)
3575             || (dump_hdr->msg_type != QCA_MEMDUMP_MSG_TYPE))
3576                 return 0;
3577
3578         /*it is dump pkt now*/
3579         seqno = le16_to_cpu(dump_hdr->seqno);
3580         if (seqno == 0) {
3581                 set_bit(BTUSB_HW_SSR_ACTIVE, &btdata->flags);
3582                 dump_size = le32_to_cpu(dump_hdr->ram_dump_size);
3583                 if (!dump_size || (dump_size > QCA_MEMDUMP_SIZE_MAX)) {
3584                         ret = -EILSEQ;
3585                         bt_dev_err(hdev, "Invalid memdump size(%u)",
3586                                    dump_size);
3587                         goto out;
3588                 }
3589
3590                 ret = hci_devcd_init(hdev, dump_size);
3591                 if (ret < 0) {
3592                         bt_dev_err(hdev, "memdump init error(%d)", ret);
3593                         goto out;
3594                 }
3595
3596                 btdata->qca_dump.ram_dump_size = dump_size;
3597                 btdata->qca_dump.ram_dump_seqno = 0;
3598                 sk_ptr += offsetof(struct qca_dump_hdr, data0);
3599                 sk_len -= offsetof(struct qca_dump_hdr, data0);
3600
3601                 usb_disable_autosuspend(udev);
3602                 bt_dev_info(hdev, "%s memdump size(%u)\n",
3603                             (pkt_type == HCI_ACLDATA_PKT) ? "ACL" : "event",
3604                             dump_size);
3605         } else {
3606                 sk_ptr += offsetof(struct qca_dump_hdr, data);
3607                 sk_len -= offsetof(struct qca_dump_hdr, data);
3608         }
3609
3610         if (!btdata->qca_dump.ram_dump_size) {
3611                 ret = -EINVAL;
3612                 bt_dev_err(hdev, "memdump is not active");
3613                 goto out;
3614         }
3615
3616         if ((seqno > btdata->qca_dump.ram_dump_seqno + 1) && (seqno != QCA_LAST_SEQUENCE_NUM)) {
3617                 dump_size = QCA_MEMDUMP_PKT_SIZE * (seqno - btdata->qca_dump.ram_dump_seqno - 1);
3618                 hci_devcd_append_pattern(hdev, 0x0, dump_size);
3619                 bt_dev_err(hdev,
3620                            "expected memdump seqno(%u) is not received(%u)\n",
3621                            btdata->qca_dump.ram_dump_seqno, seqno);
3622                 btdata->qca_dump.ram_dump_seqno = seqno;
3623                 kfree_skb(skb);
3624                 return ret;
3625         }
3626
3627         skb_pull(skb, skb->len - sk_len);
3628         hci_devcd_append(hdev, skb);
3629         btdata->qca_dump.ram_dump_seqno++;
3630         if (seqno == QCA_LAST_SEQUENCE_NUM) {
3631                 bt_dev_info(hdev,
3632                                 "memdump done: pkts(%u), total(%u)\n",
3633                                 btdata->qca_dump.ram_dump_seqno, btdata->qca_dump.ram_dump_size);
3634
3635                 hci_devcd_complete(hdev);
3636                 goto out;
3637         }
3638         return ret;
3639
3640 out:
3641         if (btdata->qca_dump.ram_dump_size)
3642                 usb_enable_autosuspend(udev);
3643         btdata->qca_dump.ram_dump_size = 0;
3644         btdata->qca_dump.ram_dump_seqno = 0;
3645         clear_bit(BTUSB_HW_SSR_ACTIVE, &btdata->flags);
3646
3647         if (ret < 0)
3648                 kfree_skb(skb);
3649         return ret;
3650 }
3651
3652 static int btusb_recv_acl_qca(struct hci_dev *hdev, struct sk_buff *skb)
3653 {
3654         if (handle_dump_pkt_qca(hdev, skb))
3655                 return 0;
3656         return hci_recv_frame(hdev, skb);
3657 }
3658
3659 static int btusb_recv_evt_qca(struct hci_dev *hdev, struct sk_buff *skb)
3660 {
3661         if (handle_dump_pkt_qca(hdev, skb))
3662                 return 0;
3663         return hci_recv_frame(hdev, skb);
3664 }
3665
3666
3667 #define QCA_DFU_PACKET_LEN      4096
3668
3669 #define QCA_GET_TARGET_VERSION  0x09
3670 #define QCA_CHECK_STATUS        0x05
3671 #define QCA_DFU_DOWNLOAD        0x01
3672
3673 #define QCA_SYSCFG_UPDATED      0x40
3674 #define QCA_PATCH_UPDATED       0x80
3675 #define QCA_DFU_TIMEOUT         3000
3676 #define QCA_FLAG_MULTI_NVM      0x80
3677 #define QCA_BT_RESET_WAIT_MS    100
3678
3679 #define WCN6855_2_0_RAM_VERSION_GF 0x400c1200
3680 #define WCN6855_2_1_RAM_VERSION_GF 0x400c1211
3681
3682 struct qca_version {
3683         __le32  rom_version;
3684         __le32  patch_version;
3685         __le32  ram_version;
3686         __u8    chip_id;
3687         __u8    platform_id;
3688         __le16  flag;
3689         __u8    reserved[4];
3690 } __packed;
3691
3692 struct qca_rampatch_version {
3693         __le16  rom_version_high;
3694         __le16  rom_version_low;
3695         __le16  patch_version;
3696 } __packed;
3697
3698 struct qca_device_info {
3699         u32     rom_version;
3700         u8      rampatch_hdr;   /* length of header in rampatch */
3701         u8      nvm_hdr;        /* length of header in NVM */
3702         u8      ver_offset;     /* offset of version structure in rampatch */
3703 };
3704
3705 static const struct qca_device_info qca_devices_table[] = {
3706         { 0x00000100, 20, 4,  8 }, /* Rome 1.0 */
3707         { 0x00000101, 20, 4,  8 }, /* Rome 1.1 */
3708         { 0x00000200, 28, 4, 16 }, /* Rome 2.0 */
3709         { 0x00000201, 28, 4, 16 }, /* Rome 2.1 */
3710         { 0x00000300, 28, 4, 16 }, /* Rome 3.0 */
3711         { 0x00000302, 28, 4, 16 }, /* Rome 3.2 */
3712         { 0x00130100, 40, 4, 16 }, /* WCN6855 1.0 */
3713         { 0x00130200, 40, 4, 16 }, /* WCN6855 2.0 */
3714         { 0x00130201, 40, 4, 16 }, /* WCN6855 2.1 */
3715         { 0x00190200, 40, 4, 16 }, /* WCN785x 2.0 */
3716 };
3717
3718 static int btusb_qca_send_vendor_req(struct usb_device *udev, u8 request,
3719                                      void *data, u16 size)
3720 {
3721         int pipe, err;
3722         u8 *buf;
3723
3724         buf = kmalloc(size, GFP_KERNEL);
3725         if (!buf)
3726                 return -ENOMEM;
3727
3728         /* Found some of USB hosts have IOT issues with ours so that we should
3729          * not wait until HCI layer is ready.
3730          */
3731         pipe = usb_rcvctrlpipe(udev, 0);
3732         err = usb_control_msg(udev, pipe, request, USB_TYPE_VENDOR | USB_DIR_IN,
3733                               0, 0, buf, size, USB_CTRL_SET_TIMEOUT);
3734         if (err < 0) {
3735                 dev_err(&udev->dev, "Failed to access otp area (%d)", err);
3736                 goto done;
3737         }
3738
3739         memcpy(data, buf, size);
3740
3741 done:
3742         kfree(buf);
3743
3744         return err;
3745 }
3746
3747 static int btusb_setup_qca_download_fw(struct hci_dev *hdev,
3748                                        const struct firmware *firmware,
3749                                        size_t hdr_size)
3750 {
3751         struct btusb_data *btdata = hci_get_drvdata(hdev);
3752         struct usb_device *udev = btdata->udev;
3753         size_t count, size, sent = 0;
3754         int pipe, len, err;
3755         u8 *buf;
3756
3757         buf = kmalloc(QCA_DFU_PACKET_LEN, GFP_KERNEL);
3758         if (!buf)
3759                 return -ENOMEM;
3760
3761         count = firmware->size;
3762
3763         size = min_t(size_t, count, hdr_size);
3764         memcpy(buf, firmware->data, size);
3765
3766         /* USB patches should go down to controller through USB path
3767          * because binary format fits to go down through USB channel.
3768          * USB control path is for patching headers and USB bulk is for
3769          * patch body.
3770          */
3771         pipe = usb_sndctrlpipe(udev, 0);
3772         err = usb_control_msg(udev, pipe, QCA_DFU_DOWNLOAD, USB_TYPE_VENDOR,
3773                               0, 0, buf, size, USB_CTRL_SET_TIMEOUT);
3774         if (err < 0) {
3775                 bt_dev_err(hdev, "Failed to send headers (%d)", err);
3776                 goto done;
3777         }
3778
3779         sent += size;
3780         count -= size;
3781
3782         /* ep2 need time to switch from function acl to function dfu,
3783          * so we add 20ms delay here.
3784          */
3785         msleep(20);
3786
3787         while (count) {
3788                 size = min_t(size_t, count, QCA_DFU_PACKET_LEN);
3789
3790                 memcpy(buf, firmware->data + sent, size);
3791
3792                 pipe = usb_sndbulkpipe(udev, 0x02);
3793                 err = usb_bulk_msg(udev, pipe, buf, size, &len,
3794                                    QCA_DFU_TIMEOUT);
3795                 if (err < 0) {
3796                         bt_dev_err(hdev, "Failed to send body at %zd of %zd (%d)",
3797                                    sent, firmware->size, err);
3798                         break;
3799                 }
3800
3801                 if (size != len) {
3802                         bt_dev_err(hdev, "Failed to get bulk buffer");
3803                         err = -EILSEQ;
3804                         break;
3805                 }
3806
3807                 sent  += size;
3808                 count -= size;
3809         }
3810
3811 done:
3812         kfree(buf);
3813         return err;
3814 }
3815
3816 static int btusb_setup_qca_load_rampatch(struct hci_dev *hdev,
3817                                          struct qca_version *ver,
3818                                          const struct qca_device_info *info)
3819 {
3820         struct qca_rampatch_version *rver;
3821         const struct firmware *fw;
3822         u32 ver_rom, ver_patch, rver_rom;
3823         u16 rver_rom_low, rver_rom_high, rver_patch;
3824         char fwname[64];
3825         int err;
3826
3827         ver_rom = le32_to_cpu(ver->rom_version);
3828         ver_patch = le32_to_cpu(ver->patch_version);
3829
3830         snprintf(fwname, sizeof(fwname), "qca/rampatch_usb_%08x.bin", ver_rom);
3831
3832         err = request_firmware(&fw, fwname, &hdev->dev);
3833         if (err) {
3834                 bt_dev_err(hdev, "failed to request rampatch file: %s (%d)",
3835                            fwname, err);
3836                 return err;
3837         }
3838
3839         bt_dev_info(hdev, "using rampatch file: %s", fwname);
3840
3841         rver = (struct qca_rampatch_version *)(fw->data + info->ver_offset);
3842         rver_rom_low = le16_to_cpu(rver->rom_version_low);
3843         rver_patch = le16_to_cpu(rver->patch_version);
3844
3845         if (ver_rom & ~0xffffU) {
3846                 rver_rom_high = le16_to_cpu(rver->rom_version_high);
3847                 rver_rom = rver_rom_high << 16 | rver_rom_low;
3848         } else {
3849                 rver_rom = rver_rom_low;
3850         }
3851
3852         bt_dev_info(hdev, "QCA: patch rome 0x%x build 0x%x, "
3853                     "firmware rome 0x%x build 0x%x",
3854                     rver_rom, rver_patch, ver_rom, ver_patch);
3855
3856         if (rver_rom != ver_rom || rver_patch <= ver_patch) {
3857                 bt_dev_err(hdev, "rampatch file version did not match with firmware");
3858                 err = -EINVAL;
3859                 goto done;
3860         }
3861
3862         err = btusb_setup_qca_download_fw(hdev, fw, info->rampatch_hdr);
3863
3864 done:
3865         release_firmware(fw);
3866
3867         return err;
3868 }
3869
3870 static void btusb_generate_qca_nvm_name(char *fwname, size_t max_size,
3871                                         const struct qca_version *ver)
3872 {
3873         u32 rom_version = le32_to_cpu(ver->rom_version);
3874         u16 flag = le16_to_cpu(ver->flag);
3875
3876         if (((flag >> 8) & 0xff) == QCA_FLAG_MULTI_NVM) {
3877                 /* The board_id should be split into two bytes
3878                  * The 1st byte is chip ID, and the 2nd byte is platform ID
3879                  * For example, board ID 0x010A, 0x01 is platform ID. 0x0A is chip ID
3880                  * we have several platforms, and platform IDs are continuously added
3881                  * Platform ID:
3882                  * 0x00 is for Mobile
3883                  * 0x01 is for X86
3884                  * 0x02 is for Automotive
3885                  * 0x03 is for Consumer electronic
3886                  */
3887                 u16 board_id = (ver->chip_id << 8) + ver->platform_id;
3888                 const char *variant;
3889
3890                 switch (le32_to_cpu(ver->ram_version)) {
3891                 case WCN6855_2_0_RAM_VERSION_GF:
3892                 case WCN6855_2_1_RAM_VERSION_GF:
3893                         variant = "_gf";
3894                         break;
3895                 default:
3896                         variant = "";
3897                         break;
3898                 }
3899
3900                 if (board_id == 0) {
3901                         snprintf(fwname, max_size, "qca/nvm_usb_%08x%s.bin",
3902                                 rom_version, variant);
3903                 } else {
3904                         snprintf(fwname, max_size, "qca/nvm_usb_%08x%s_%04x.bin",
3905                                 rom_version, variant, board_id);
3906                 }
3907         } else {
3908                 snprintf(fwname, max_size, "qca/nvm_usb_%08x.bin",
3909                         rom_version);
3910         }
3911
3912 }
3913
3914 static int btusb_setup_qca_load_nvm(struct hci_dev *hdev,
3915                                     struct qca_version *ver,
3916                                     const struct qca_device_info *info)
3917 {
3918         const struct firmware *fw;
3919         char fwname[64];
3920         int err;
3921
3922         btusb_generate_qca_nvm_name(fwname, sizeof(fwname), ver);
3923
3924         err = request_firmware(&fw, fwname, &hdev->dev);
3925         if (err) {
3926                 bt_dev_err(hdev, "failed to request NVM file: %s (%d)",
3927                            fwname, err);
3928                 return err;
3929         }
3930
3931         bt_dev_info(hdev, "using NVM file: %s", fwname);
3932
3933         err = btusb_setup_qca_download_fw(hdev, fw, info->nvm_hdr);
3934
3935         release_firmware(fw);
3936
3937         return err;
3938 }
3939
3940 /* identify the ROM version and check whether patches are needed */
3941 static bool btusb_qca_need_patch(struct usb_device *udev)
3942 {
3943         struct qca_version ver;
3944
3945         if (btusb_qca_send_vendor_req(udev, QCA_GET_TARGET_VERSION, &ver,
3946                                       sizeof(ver)) < 0)
3947                 return false;
3948         /* only low ROM versions need patches */
3949         return !(le32_to_cpu(ver.rom_version) & ~0xffffU);
3950 }
3951
3952 static int btusb_setup_qca(struct hci_dev *hdev)
3953 {
3954         struct btusb_data *btdata = hci_get_drvdata(hdev);
3955         struct usb_device *udev = btdata->udev;
3956         const struct qca_device_info *info = NULL;
3957         struct qca_version ver;
3958         u32 ver_rom;
3959         u8 status;
3960         int i, err;
3961
3962         err = btusb_qca_send_vendor_req(udev, QCA_GET_TARGET_VERSION, &ver,
3963                                         sizeof(ver));
3964         if (err < 0)
3965                 return err;
3966
3967         ver_rom = le32_to_cpu(ver.rom_version);
3968
3969         for (i = 0; i < ARRAY_SIZE(qca_devices_table); i++) {
3970                 if (ver_rom == qca_devices_table[i].rom_version)
3971                         info = &qca_devices_table[i];
3972         }
3973         if (!info) {
3974                 /* If the rom_version is not matched in the qca_devices_table
3975                  * and the high ROM version is not zero, we assume this chip no
3976                  * need to load the rampatch and nvm.
3977                  */
3978                 if (ver_rom & ~0xffffU)
3979                         return 0;
3980
3981                 bt_dev_err(hdev, "don't support firmware rome 0x%x", ver_rom);
3982                 return -ENODEV;
3983         }
3984
3985         err = btusb_qca_send_vendor_req(udev, QCA_CHECK_STATUS, &status,
3986                                         sizeof(status));
3987         if (err < 0)
3988                 return err;
3989
3990         if (!(status & QCA_PATCH_UPDATED)) {
3991                 err = btusb_setup_qca_load_rampatch(hdev, &ver, info);
3992                 if (err < 0)
3993                         return err;
3994         }
3995
3996         err = btusb_qca_send_vendor_req(udev, QCA_GET_TARGET_VERSION, &ver,
3997                                         sizeof(ver));
3998         if (err < 0)
3999                 return err;
4000
4001         btdata->qca_dump.fw_version = le32_to_cpu(ver.patch_version);
4002         btdata->qca_dump.controller_id = le32_to_cpu(ver.rom_version);
4003
4004         if (!(status & QCA_SYSCFG_UPDATED)) {
4005                 err = btusb_setup_qca_load_nvm(hdev, &ver, info);
4006                 if (err < 0)
4007                         return err;
4008
4009                 /* WCN6855 2.1 and later will reset to apply firmware downloaded here, so
4010                  * wait ~100ms for reset Done then go ahead, otherwise, it maybe
4011                  * cause potential enable failure.
4012                  */
4013                 if (info->rom_version >= 0x00130201)
4014                         msleep(QCA_BT_RESET_WAIT_MS);
4015         }
4016
4017         /* Mark HCI_OP_ENHANCED_SETUP_SYNC_CONN as broken as it doesn't seem to
4018          * work with the likes of HSP/HFP mSBC.
4019          */
4020         set_bit(HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN, &hdev->quirks);
4021
4022         return 0;
4023 }
4024
4025 static inline int __set_diag_interface(struct hci_dev *hdev)
4026 {
4027         struct btusb_data *data = hci_get_drvdata(hdev);
4028         struct usb_interface *intf = data->diag;
4029         int i;
4030
4031         if (!data->diag)
4032                 return -ENODEV;
4033
4034         data->diag_tx_ep = NULL;
4035         data->diag_rx_ep = NULL;
4036
4037         for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
4038                 struct usb_endpoint_descriptor *ep_desc;
4039
4040                 ep_desc = &intf->cur_altsetting->endpoint[i].desc;
4041
4042                 if (!data->diag_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) {
4043                         data->diag_tx_ep = ep_desc;
4044                         continue;
4045                 }
4046
4047                 if (!data->diag_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) {
4048                         data->diag_rx_ep = ep_desc;
4049                         continue;
4050                 }
4051         }
4052
4053         if (!data->diag_tx_ep || !data->diag_rx_ep) {
4054                 bt_dev_err(hdev, "invalid diagnostic descriptors");
4055                 return -ENODEV;
4056         }
4057
4058         return 0;
4059 }
4060
4061 static struct urb *alloc_diag_urb(struct hci_dev *hdev, bool enable)
4062 {
4063         struct btusb_data *data = hci_get_drvdata(hdev);
4064         struct sk_buff *skb;
4065         struct urb *urb;
4066         unsigned int pipe;
4067
4068         if (!data->diag_tx_ep)
4069                 return ERR_PTR(-ENODEV);
4070
4071         urb = usb_alloc_urb(0, GFP_KERNEL);
4072         if (!urb)
4073                 return ERR_PTR(-ENOMEM);
4074
4075         skb = bt_skb_alloc(2, GFP_KERNEL);
4076         if (!skb) {
4077                 usb_free_urb(urb);
4078                 return ERR_PTR(-ENOMEM);
4079         }
4080
4081         skb_put_u8(skb, 0xf0);
4082         skb_put_u8(skb, enable);
4083
4084         pipe = usb_sndbulkpipe(data->udev, data->diag_tx_ep->bEndpointAddress);
4085
4086         usb_fill_bulk_urb(urb, data->udev, pipe,
4087                           skb->data, skb->len, btusb_tx_complete, skb);
4088
4089         skb->dev = (void *)hdev;
4090
4091         return urb;
4092 }
4093
4094 static int btusb_bcm_set_diag(struct hci_dev *hdev, bool enable)
4095 {
4096         struct btusb_data *data = hci_get_drvdata(hdev);
4097         struct urb *urb;
4098
4099         if (!data->diag)
4100                 return -ENODEV;
4101
4102         if (!test_bit(HCI_RUNNING, &hdev->flags))
4103                 return -ENETDOWN;
4104
4105         urb = alloc_diag_urb(hdev, enable);
4106         if (IS_ERR(urb))
4107                 return PTR_ERR(urb);
4108
4109         return submit_or_queue_tx_urb(hdev, urb);
4110 }
4111
4112 #ifdef CONFIG_PM
4113 static irqreturn_t btusb_oob_wake_handler(int irq, void *priv)
4114 {
4115         struct btusb_data *data = priv;
4116
4117         pm_wakeup_event(&data->udev->dev, 0);
4118         pm_system_wakeup();
4119
4120         /* Disable only if not already disabled (keep it balanced) */
4121         if (test_and_clear_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags)) {
4122                 disable_irq_nosync(irq);
4123                 disable_irq_wake(irq);
4124         }
4125         return IRQ_HANDLED;
4126 }
4127
4128 static const struct of_device_id btusb_match_table[] = {
4129         { .compatible = "usb1286,204e" },
4130         { .compatible = "usbcf3,e300" }, /* QCA6174A */
4131         { .compatible = "usb4ca,301a" }, /* QCA6174A (Lite-On) */
4132         { }
4133 };
4134 MODULE_DEVICE_TABLE(of, btusb_match_table);
4135
4136 /* Use an oob wakeup pin? */
4137 static int btusb_config_oob_wake(struct hci_dev *hdev)
4138 {
4139         struct btusb_data *data = hci_get_drvdata(hdev);
4140         struct device *dev = &data->udev->dev;
4141         int irq, ret;
4142
4143         clear_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags);
4144
4145         if (!of_match_device(btusb_match_table, dev))
4146                 return 0;
4147
4148         /* Move on if no IRQ specified */
4149         irq = of_irq_get_byname(dev->of_node, "wakeup");
4150         if (irq <= 0) {
4151                 bt_dev_dbg(hdev, "%s: no OOB Wakeup IRQ in DT", __func__);
4152                 return 0;
4153         }
4154
4155         irq_set_status_flags(irq, IRQ_NOAUTOEN);
4156         ret = devm_request_irq(&hdev->dev, irq, btusb_oob_wake_handler,
4157                                0, "OOB Wake-on-BT", data);
4158         if (ret) {
4159                 bt_dev_err(hdev, "%s: IRQ request failed", __func__);
4160                 return ret;
4161         }
4162
4163         ret = device_init_wakeup(dev, true);
4164         if (ret) {
4165                 bt_dev_err(hdev, "%s: failed to init_wakeup", __func__);
4166                 return ret;
4167         }
4168
4169         data->oob_wake_irq = irq;
4170         bt_dev_info(hdev, "OOB Wake-on-BT configured at IRQ %u", irq);
4171         return 0;
4172 }
4173 #endif
4174
4175 static void btusb_check_needs_reset_resume(struct usb_interface *intf)
4176 {
4177         if (dmi_check_system(btusb_needs_reset_resume_table))
4178                 interface_to_usbdev(intf)->quirks |= USB_QUIRK_RESET_RESUME;
4179 }
4180
4181 static bool btusb_wakeup(struct hci_dev *hdev)
4182 {
4183         struct btusb_data *data = hci_get_drvdata(hdev);
4184
4185         return device_may_wakeup(&data->udev->dev);
4186 }
4187
4188 static int btusb_shutdown_qca(struct hci_dev *hdev)
4189 {
4190         struct sk_buff *skb;
4191
4192         skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT);
4193         if (IS_ERR(skb)) {
4194                 bt_dev_err(hdev, "HCI reset during shutdown failed");
4195                 return PTR_ERR(skb);
4196         }
4197         kfree_skb(skb);
4198
4199         return 0;
4200 }
4201
4202 static ssize_t force_poll_sync_read(struct file *file, char __user *user_buf,
4203                                     size_t count, loff_t *ppos)
4204 {
4205         struct btusb_data *data = file->private_data;
4206         char buf[3];
4207
4208         buf[0] = data->poll_sync ? 'Y' : 'N';
4209         buf[1] = '\n';
4210         buf[2] = '\0';
4211         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
4212 }
4213
4214 static ssize_t force_poll_sync_write(struct file *file,
4215                                      const char __user *user_buf,
4216                                      size_t count, loff_t *ppos)
4217 {
4218         struct btusb_data *data = file->private_data;
4219         bool enable;
4220         int err;
4221
4222         err = kstrtobool_from_user(user_buf, count, &enable);
4223         if (err)
4224                 return err;
4225
4226         /* Only allow changes while the adapter is down */
4227         if (test_bit(HCI_UP, &data->hdev->flags))
4228                 return -EPERM;
4229
4230         if (data->poll_sync == enable)
4231                 return -EALREADY;
4232
4233         data->poll_sync = enable;
4234
4235         return count;
4236 }
4237
4238 static const struct file_operations force_poll_sync_fops = {
4239         .open           = simple_open,
4240         .read           = force_poll_sync_read,
4241         .write          = force_poll_sync_write,
4242         .llseek         = default_llseek,
4243 };
4244
4245 static int btusb_probe(struct usb_interface *intf,
4246                        const struct usb_device_id *id)
4247 {
4248         struct usb_endpoint_descriptor *ep_desc;
4249         struct gpio_desc *reset_gpio;
4250         struct btusb_data *data;
4251         struct hci_dev *hdev;
4252         unsigned ifnum_base;
4253         int i, err, priv_size;
4254
4255         BT_DBG("intf %p id %p", intf, id);
4256
4257         if ((id->driver_info & BTUSB_IFNUM_2) &&
4258             (intf->cur_altsetting->desc.bInterfaceNumber != 0) &&
4259             (intf->cur_altsetting->desc.bInterfaceNumber != 2))
4260                 return -ENODEV;
4261
4262         ifnum_base = intf->cur_altsetting->desc.bInterfaceNumber;
4263
4264         if (!id->driver_info) {
4265                 const struct usb_device_id *match;
4266
4267                 match = usb_match_id(intf, blacklist_table);
4268                 if (match)
4269                         id = match;
4270         }
4271
4272         if (id->driver_info == BTUSB_IGNORE)
4273                 return -ENODEV;
4274
4275         if (id->driver_info & BTUSB_ATH3012) {
4276                 struct usb_device *udev = interface_to_usbdev(intf);
4277
4278                 /* Old firmware would otherwise let ath3k driver load
4279                  * patch and sysconfig files
4280                  */
4281                 if (le16_to_cpu(udev->descriptor.bcdDevice) <= 0x0001 &&
4282                     !btusb_qca_need_patch(udev))
4283                         return -ENODEV;
4284         }
4285
4286         data = devm_kzalloc(&intf->dev, sizeof(*data), GFP_KERNEL);
4287         if (!data)
4288                 return -ENOMEM;
4289
4290         for (i = 0; i < intf->cur_altsetting->desc.bNumEndpoints; i++) {
4291                 ep_desc = &intf->cur_altsetting->endpoint[i].desc;
4292
4293                 if (!data->intr_ep && usb_endpoint_is_int_in(ep_desc)) {
4294                         data->intr_ep = ep_desc;
4295                         continue;
4296                 }
4297
4298                 if (!data->bulk_tx_ep && usb_endpoint_is_bulk_out(ep_desc)) {
4299                         data->bulk_tx_ep = ep_desc;
4300                         continue;
4301                 }
4302
4303                 if (!data->bulk_rx_ep && usb_endpoint_is_bulk_in(ep_desc)) {
4304                         data->bulk_rx_ep = ep_desc;
4305                         continue;
4306                 }
4307         }
4308
4309         if (!data->intr_ep || !data->bulk_tx_ep || !data->bulk_rx_ep)
4310                 return -ENODEV;
4311
4312         if (id->driver_info & BTUSB_AMP) {
4313                 data->cmdreq_type = USB_TYPE_CLASS | 0x01;
4314                 data->cmdreq = 0x2b;
4315         } else {
4316                 data->cmdreq_type = USB_TYPE_CLASS;
4317                 data->cmdreq = 0x00;
4318         }
4319
4320         data->udev = interface_to_usbdev(intf);
4321         data->intf = intf;
4322
4323         INIT_WORK(&data->work, btusb_work);
4324         INIT_WORK(&data->waker, btusb_waker);
4325         INIT_DELAYED_WORK(&data->rx_work, btusb_rx_work);
4326
4327         skb_queue_head_init(&data->acl_q);
4328
4329         init_usb_anchor(&data->deferred);
4330         init_usb_anchor(&data->tx_anchor);
4331         spin_lock_init(&data->txlock);
4332
4333         init_usb_anchor(&data->intr_anchor);
4334         init_usb_anchor(&data->bulk_anchor);
4335         init_usb_anchor(&data->isoc_anchor);
4336         init_usb_anchor(&data->diag_anchor);
4337         init_usb_anchor(&data->ctrl_anchor);
4338         spin_lock_init(&data->rxlock);
4339
4340         priv_size = 0;
4341
4342         data->recv_event = hci_recv_frame;
4343         data->recv_bulk = btusb_recv_bulk;
4344
4345         if (id->driver_info & BTUSB_INTEL_COMBINED) {
4346                 /* Allocate extra space for Intel device */
4347                 priv_size += sizeof(struct btintel_data);
4348
4349                 /* Override the rx handlers */
4350                 data->recv_event = btusb_recv_event_intel;
4351                 data->recv_bulk = btusb_recv_bulk_intel;
4352         } else if (id->driver_info & BTUSB_REALTEK) {
4353                 /* Allocate extra space for Realtek device */
4354                 priv_size += sizeof(struct btrealtek_data);
4355
4356                 data->recv_event = btusb_recv_event_realtek;
4357         } else if (id->driver_info & BTUSB_MEDIATEK) {
4358                 /* Allocate extra space for Mediatek device */
4359                 priv_size += sizeof(struct btmediatek_data);
4360         }
4361
4362         data->recv_acl = hci_recv_frame;
4363
4364         hdev = hci_alloc_dev_priv(priv_size);
4365         if (!hdev)
4366                 return -ENOMEM;
4367
4368         hdev->bus = HCI_USB;
4369         hci_set_drvdata(hdev, data);
4370
4371         if (id->driver_info & BTUSB_AMP)
4372                 hdev->dev_type = HCI_AMP;
4373         else
4374                 hdev->dev_type = HCI_PRIMARY;
4375
4376         data->hdev = hdev;
4377
4378         SET_HCIDEV_DEV(hdev, &intf->dev);
4379
4380         reset_gpio = gpiod_get_optional(&data->udev->dev, "reset",
4381                                         GPIOD_OUT_LOW);
4382         if (IS_ERR(reset_gpio)) {
4383                 err = PTR_ERR(reset_gpio);
4384                 goto out_free_dev;
4385         } else if (reset_gpio) {
4386                 data->reset_gpio = reset_gpio;
4387         }
4388
4389         hdev->open   = btusb_open;
4390         hdev->close  = btusb_close;
4391         hdev->flush  = btusb_flush;
4392         hdev->send   = btusb_send_frame;
4393         hdev->notify = btusb_notify;
4394         hdev->wakeup = btusb_wakeup;
4395
4396 #ifdef CONFIG_PM
4397         err = btusb_config_oob_wake(hdev);
4398         if (err)
4399                 goto out_free_dev;
4400
4401         /* Marvell devices may need a specific chip configuration */
4402         if (id->driver_info & BTUSB_MARVELL && data->oob_wake_irq) {
4403                 err = marvell_config_oob_wake(hdev);
4404                 if (err)
4405                         goto out_free_dev;
4406         }
4407 #endif
4408         if (id->driver_info & BTUSB_CW6622)
4409                 set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
4410
4411         if (id->driver_info & BTUSB_BCM2045)
4412                 set_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks);
4413
4414         if (id->driver_info & BTUSB_BCM92035)
4415                 hdev->setup = btusb_setup_bcm92035;
4416
4417         if (IS_ENABLED(CONFIG_BT_HCIBTUSB_BCM) &&
4418             (id->driver_info & BTUSB_BCM_PATCHRAM)) {
4419                 hdev->manufacturer = 15;
4420                 hdev->setup = btbcm_setup_patchram;
4421                 hdev->set_diag = btusb_bcm_set_diag;
4422                 hdev->set_bdaddr = btbcm_set_bdaddr;
4423
4424                 /* Broadcom LM_DIAG Interface numbers are hardcoded */
4425                 data->diag = usb_ifnum_to_if(data->udev, ifnum_base + 2);
4426         }
4427
4428         if (IS_ENABLED(CONFIG_BT_HCIBTUSB_BCM) &&
4429             (id->driver_info & BTUSB_BCM_APPLE)) {
4430                 hdev->manufacturer = 15;
4431                 hdev->setup = btbcm_setup_apple;
4432                 hdev->set_diag = btusb_bcm_set_diag;
4433
4434                 /* Broadcom LM_DIAG Interface numbers are hardcoded */
4435                 data->diag = usb_ifnum_to_if(data->udev, ifnum_base + 2);
4436         }
4437
4438         /* Combined Intel Device setup to support multiple setup routine */
4439         if (id->driver_info & BTUSB_INTEL_COMBINED) {
4440                 err = btintel_configure_setup(hdev, btusb_driver.name);
4441                 if (err)
4442                         goto out_free_dev;
4443
4444                 /* Transport specific configuration */
4445                 hdev->send = btusb_send_frame_intel;
4446                 hdev->cmd_timeout = btusb_intel_cmd_timeout;
4447
4448                 if (id->driver_info & BTUSB_INTEL_NO_WBS_SUPPORT)
4449                         btintel_set_flag(hdev, INTEL_ROM_LEGACY_NO_WBS_SUPPORT);
4450
4451                 if (id->driver_info & BTUSB_INTEL_BROKEN_INITIAL_NCMD)
4452                         btintel_set_flag(hdev, INTEL_BROKEN_INITIAL_NCMD);
4453
4454                 if (id->driver_info & BTUSB_INTEL_BROKEN_SHUTDOWN_LED)
4455                         btintel_set_flag(hdev, INTEL_BROKEN_SHUTDOWN_LED);
4456         }
4457
4458         if (id->driver_info & BTUSB_MARVELL)
4459                 hdev->set_bdaddr = btusb_set_bdaddr_marvell;
4460
4461         if (IS_ENABLED(CONFIG_BT_HCIBTUSB_MTK) &&
4462             (id->driver_info & BTUSB_MEDIATEK)) {
4463                 hdev->setup = btusb_mtk_setup;
4464                 hdev->shutdown = btusb_mtk_shutdown;
4465                 hdev->manufacturer = 70;
4466                 hdev->cmd_timeout = btmtk_reset_sync;
4467                 hdev->set_bdaddr = btmtk_set_bdaddr;
4468                 set_bit(HCI_QUIRK_BROKEN_ENHANCED_SETUP_SYNC_CONN, &hdev->quirks);
4469                 set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
4470                 data->recv_acl = btusb_recv_acl_mtk;
4471         }
4472
4473         if (id->driver_info & BTUSB_SWAVE) {
4474                 set_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks);
4475                 set_bit(HCI_QUIRK_BROKEN_LOCAL_COMMANDS, &hdev->quirks);
4476         }
4477
4478         if (id->driver_info & BTUSB_INTEL_BOOT) {
4479                 hdev->manufacturer = 2;
4480                 set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
4481         }
4482
4483         if (id->driver_info & BTUSB_ATH3012) {
4484                 data->setup_on_usb = btusb_setup_qca;
4485                 hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
4486                 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
4487                 set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
4488         }
4489
4490         if (id->driver_info & BTUSB_QCA_ROME) {
4491                 data->setup_on_usb = btusb_setup_qca;
4492                 hdev->set_bdaddr = btusb_set_bdaddr_ath3012;
4493                 hdev->cmd_timeout = btusb_qca_cmd_timeout;
4494                 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
4495                 btusb_check_needs_reset_resume(intf);
4496         }
4497
4498         if (id->driver_info & BTUSB_QCA_WCN6855) {
4499                 data->qca_dump.id_vendor = id->idVendor;
4500                 data->qca_dump.id_product = id->idProduct;
4501                 data->recv_event = btusb_recv_evt_qca;
4502                 data->recv_acl = btusb_recv_acl_qca;
4503                 hci_devcd_register(hdev, btusb_coredump_qca, btusb_dump_hdr_qca, NULL);
4504                 data->setup_on_usb = btusb_setup_qca;
4505                 hdev->shutdown = btusb_shutdown_qca;
4506                 hdev->set_bdaddr = btusb_set_bdaddr_wcn6855;
4507                 hdev->cmd_timeout = btusb_qca_cmd_timeout;
4508                 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
4509                 hci_set_msft_opcode(hdev, 0xFD70);
4510         }
4511
4512         if (id->driver_info & BTUSB_AMP) {
4513                 /* AMP controllers do not support SCO packets */
4514                 data->isoc = NULL;
4515         } else {
4516                 /* Interface orders are hardcoded in the specification */
4517                 data->isoc = usb_ifnum_to_if(data->udev, ifnum_base + 1);
4518                 data->isoc_ifnum = ifnum_base + 1;
4519         }
4520
4521         if (IS_ENABLED(CONFIG_BT_HCIBTUSB_RTL) &&
4522             (id->driver_info & BTUSB_REALTEK)) {
4523                 btrtl_set_driver_name(hdev, btusb_driver.name);
4524                 hdev->setup = btusb_setup_realtek;
4525                 hdev->shutdown = btrtl_shutdown_realtek;
4526                 hdev->cmd_timeout = btusb_rtl_cmd_timeout;
4527                 hdev->hw_error = btusb_rtl_hw_error;
4528
4529                 /* Realtek devices need to set remote wakeup on auto-suspend */
4530                 set_bit(BTUSB_WAKEUP_AUTOSUSPEND, &data->flags);
4531                 set_bit(BTUSB_USE_ALT3_FOR_WBS, &data->flags);
4532         }
4533
4534         if (id->driver_info & BTUSB_ACTIONS_SEMI) {
4535                 /* Support is advertised, but not implemented */
4536                 set_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks);
4537                 set_bit(HCI_QUIRK_BROKEN_READ_TRANSMIT_POWER, &hdev->quirks);
4538                 set_bit(HCI_QUIRK_BROKEN_SET_RPA_TIMEOUT, &hdev->quirks);
4539                 set_bit(HCI_QUIRK_BROKEN_EXT_SCAN, &hdev->quirks);
4540         }
4541
4542         if (!reset)
4543                 set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
4544
4545         if (force_scofix || id->driver_info & BTUSB_WRONG_SCO_MTU) {
4546                 if (!disable_scofix)
4547                         set_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks);
4548         }
4549
4550         if (id->driver_info & BTUSB_BROKEN_ISOC)
4551                 data->isoc = NULL;
4552
4553         if (id->driver_info & BTUSB_WIDEBAND_SPEECH)
4554                 set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED, &hdev->quirks);
4555
4556         if (id->driver_info & BTUSB_VALID_LE_STATES)
4557                 set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks);
4558
4559         if (id->driver_info & BTUSB_DIGIANSWER) {
4560                 data->cmdreq_type = USB_TYPE_VENDOR;
4561                 set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
4562         }
4563
4564         if (id->driver_info & BTUSB_CSR) {
4565                 struct usb_device *udev = data->udev;
4566                 u16 bcdDevice = le16_to_cpu(udev->descriptor.bcdDevice);
4567
4568                 /* Old firmware would otherwise execute USB reset */
4569                 if (bcdDevice < 0x117)
4570                         set_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks);
4571
4572                 /* This must be set first in case we disable it for fakes */
4573                 set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks);
4574
4575                 /* Fake CSR devices with broken commands */
4576                 if (le16_to_cpu(udev->descriptor.idVendor)  == 0x0a12 &&
4577                     le16_to_cpu(udev->descriptor.idProduct) == 0x0001)
4578                         hdev->setup = btusb_setup_csr;
4579         }
4580
4581         if (id->driver_info & BTUSB_SNIFFER) {
4582                 struct usb_device *udev = data->udev;
4583
4584                 /* New sniffer firmware has crippled HCI interface */
4585                 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
4586                         set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
4587         }
4588
4589         if (id->driver_info & BTUSB_INTEL_BOOT) {
4590                 /* A bug in the bootloader causes that interrupt interface is
4591                  * only enabled after receiving SetInterface(0, AltSetting=0).
4592                  */
4593                 err = usb_set_interface(data->udev, 0, 0);
4594                 if (err < 0) {
4595                         BT_ERR("failed to set interface 0, alt 0 %d", err);
4596                         goto out_free_dev;
4597                 }
4598         }
4599
4600         if (data->isoc) {
4601                 err = usb_driver_claim_interface(&btusb_driver,
4602                                                  data->isoc, data);
4603                 if (err < 0)
4604                         goto out_free_dev;
4605         }
4606
4607         if (IS_ENABLED(CONFIG_BT_HCIBTUSB_BCM) && data->diag) {
4608                 if (!usb_driver_claim_interface(&btusb_driver,
4609                                                 data->diag, data))
4610                         __set_diag_interface(hdev);
4611                 else
4612                         data->diag = NULL;
4613         }
4614
4615         if (enable_autosuspend)
4616                 usb_enable_autosuspend(data->udev);
4617
4618         data->poll_sync = enable_poll_sync;
4619
4620         err = hci_register_dev(hdev);
4621         if (err < 0)
4622                 goto out_free_dev;
4623
4624         usb_set_intfdata(intf, data);
4625
4626         debugfs_create_file("force_poll_sync", 0644, hdev->debugfs, data,
4627                             &force_poll_sync_fops);
4628
4629         return 0;
4630
4631 out_free_dev:
4632         if (data->reset_gpio)
4633                 gpiod_put(data->reset_gpio);
4634         hci_free_dev(hdev);
4635         return err;
4636 }
4637
4638 static void btusb_disconnect(struct usb_interface *intf)
4639 {
4640         struct btusb_data *data = usb_get_intfdata(intf);
4641         struct hci_dev *hdev;
4642
4643         BT_DBG("intf %p", intf);
4644
4645         if (!data)
4646                 return;
4647
4648         hdev = data->hdev;
4649         usb_set_intfdata(data->intf, NULL);
4650
4651         if (data->isoc)
4652                 usb_set_intfdata(data->isoc, NULL);
4653
4654         if (data->diag)
4655                 usb_set_intfdata(data->diag, NULL);
4656
4657         hci_unregister_dev(hdev);
4658
4659         if (intf == data->intf) {
4660                 if (data->isoc)
4661                         usb_driver_release_interface(&btusb_driver, data->isoc);
4662                 if (data->diag)
4663                         usb_driver_release_interface(&btusb_driver, data->diag);
4664         } else if (intf == data->isoc) {
4665                 if (data->diag)
4666                         usb_driver_release_interface(&btusb_driver, data->diag);
4667                 usb_driver_release_interface(&btusb_driver, data->intf);
4668         } else if (intf == data->diag) {
4669                 usb_driver_release_interface(&btusb_driver, data->intf);
4670                 if (data->isoc)
4671                         usb_driver_release_interface(&btusb_driver, data->isoc);
4672         }
4673
4674         if (data->oob_wake_irq)
4675                 device_init_wakeup(&data->udev->dev, false);
4676
4677         if (data->reset_gpio)
4678                 gpiod_put(data->reset_gpio);
4679
4680         hci_free_dev(hdev);
4681 }
4682
4683 #ifdef CONFIG_PM
4684 static int btusb_suspend(struct usb_interface *intf, pm_message_t message)
4685 {
4686         struct btusb_data *data = usb_get_intfdata(intf);
4687
4688         BT_DBG("intf %p", intf);
4689
4690         if (data->suspend_count++)
4691                 return 0;
4692
4693         spin_lock_irq(&data->txlock);
4694         if (!(PMSG_IS_AUTO(message) && data->tx_in_flight)) {
4695                 set_bit(BTUSB_SUSPENDING, &data->flags);
4696                 spin_unlock_irq(&data->txlock);
4697         } else {
4698                 spin_unlock_irq(&data->txlock);
4699                 data->suspend_count--;
4700                 return -EBUSY;
4701         }
4702
4703         cancel_work_sync(&data->work);
4704
4705         btusb_stop_traffic(data);
4706         usb_kill_anchored_urbs(&data->tx_anchor);
4707
4708         if (data->oob_wake_irq && device_may_wakeup(&data->udev->dev)) {
4709                 set_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags);
4710                 enable_irq_wake(data->oob_wake_irq);
4711                 enable_irq(data->oob_wake_irq);
4712         }
4713
4714         /* For global suspend, Realtek devices lose the loaded fw
4715          * in them. But for autosuspend, firmware should remain.
4716          * Actually, it depends on whether the usb host sends
4717          * set feature (enable wakeup) or not.
4718          */
4719         if (test_bit(BTUSB_WAKEUP_AUTOSUSPEND, &data->flags)) {
4720                 if (PMSG_IS_AUTO(message) &&
4721                     device_can_wakeup(&data->udev->dev))
4722                         data->udev->do_remote_wakeup = 1;
4723                 else if (!PMSG_IS_AUTO(message) &&
4724                          !device_may_wakeup(&data->udev->dev)) {
4725                         data->udev->do_remote_wakeup = 0;
4726                         data->udev->reset_resume = 1;
4727                 }
4728         }
4729
4730         return 0;
4731 }
4732
4733 static void play_deferred(struct btusb_data *data)
4734 {
4735         struct urb *urb;
4736         int err;
4737
4738         while ((urb = usb_get_from_anchor(&data->deferred))) {
4739                 usb_anchor_urb(urb, &data->tx_anchor);
4740
4741                 err = usb_submit_urb(urb, GFP_ATOMIC);
4742                 if (err < 0) {
4743                         if (err != -EPERM && err != -ENODEV)
4744                                 BT_ERR("%s urb %p submission failed (%d)",
4745                                        data->hdev->name, urb, -err);
4746                         kfree(urb->setup_packet);
4747                         usb_unanchor_urb(urb);
4748                         usb_free_urb(urb);
4749                         break;
4750                 }
4751
4752                 data->tx_in_flight++;
4753                 usb_free_urb(urb);
4754         }
4755
4756         /* Cleanup the rest deferred urbs. */
4757         while ((urb = usb_get_from_anchor(&data->deferred))) {
4758                 kfree(urb->setup_packet);
4759                 usb_free_urb(urb);
4760         }
4761 }
4762
4763 static int btusb_resume(struct usb_interface *intf)
4764 {
4765         struct btusb_data *data = usb_get_intfdata(intf);
4766         struct hci_dev *hdev = data->hdev;
4767         int err = 0;
4768
4769         BT_DBG("intf %p", intf);
4770
4771         if (--data->suspend_count)
4772                 return 0;
4773
4774         /* Disable only if not already disabled (keep it balanced) */
4775         if (test_and_clear_bit(BTUSB_OOB_WAKE_ENABLED, &data->flags)) {
4776                 disable_irq(data->oob_wake_irq);
4777                 disable_irq_wake(data->oob_wake_irq);
4778         }
4779
4780         if (!test_bit(HCI_RUNNING, &hdev->flags))
4781                 goto done;
4782
4783         if (test_bit(BTUSB_INTR_RUNNING, &data->flags)) {
4784                 err = btusb_submit_intr_urb(hdev, GFP_NOIO);
4785                 if (err < 0) {
4786                         clear_bit(BTUSB_INTR_RUNNING, &data->flags);
4787                         goto failed;
4788                 }
4789         }
4790
4791         if (test_bit(BTUSB_BULK_RUNNING, &data->flags)) {
4792                 err = btusb_submit_bulk_urb(hdev, GFP_NOIO);
4793                 if (err < 0) {
4794                         clear_bit(BTUSB_BULK_RUNNING, &data->flags);
4795                         goto failed;
4796                 }
4797
4798                 btusb_submit_bulk_urb(hdev, GFP_NOIO);
4799         }
4800
4801         if (test_bit(BTUSB_ISOC_RUNNING, &data->flags)) {
4802                 if (btusb_submit_isoc_urb(hdev, GFP_NOIO) < 0)
4803                         clear_bit(BTUSB_ISOC_RUNNING, &data->flags);
4804                 else
4805                         btusb_submit_isoc_urb(hdev, GFP_NOIO);
4806         }
4807
4808         spin_lock_irq(&data->txlock);
4809         play_deferred(data);
4810         clear_bit(BTUSB_SUSPENDING, &data->flags);
4811         spin_unlock_irq(&data->txlock);
4812         schedule_work(&data->work);
4813
4814         return 0;
4815
4816 failed:
4817         usb_scuttle_anchored_urbs(&data->deferred);
4818 done:
4819         spin_lock_irq(&data->txlock);
4820         clear_bit(BTUSB_SUSPENDING, &data->flags);
4821         spin_unlock_irq(&data->txlock);
4822
4823         return err;
4824 }
4825 #endif
4826
4827 #ifdef CONFIG_DEV_COREDUMP
4828 static void btusb_coredump(struct device *dev)
4829 {
4830         struct btusb_data *data = dev_get_drvdata(dev);
4831         struct hci_dev *hdev = data->hdev;
4832
4833         if (hdev->dump.coredump)
4834                 hdev->dump.coredump(hdev);
4835 }
4836 #endif
4837
4838 static struct usb_driver btusb_driver = {
4839         .name           = "btusb",
4840         .probe          = btusb_probe,
4841         .disconnect     = btusb_disconnect,
4842 #ifdef CONFIG_PM
4843         .suspend        = btusb_suspend,
4844         .resume         = btusb_resume,
4845 #endif
4846         .id_table       = btusb_table,
4847         .supports_autosuspend = 1,
4848         .disable_hub_initiated_lpm = 1,
4849
4850 #ifdef CONFIG_DEV_COREDUMP
4851         .drvwrap = {
4852                 .driver = {
4853                         .coredump = btusb_coredump,
4854                 },
4855         },
4856 #endif
4857 };
4858
4859 module_usb_driver(btusb_driver);
4860
4861 module_param(disable_scofix, bool, 0644);
4862 MODULE_PARM_DESC(disable_scofix, "Disable fixup of wrong SCO buffer size");
4863
4864 module_param(force_scofix, bool, 0644);
4865 MODULE_PARM_DESC(force_scofix, "Force fixup of wrong SCO buffers size");
4866
4867 module_param(enable_autosuspend, bool, 0644);
4868 MODULE_PARM_DESC(enable_autosuspend, "Enable USB autosuspend by default");
4869
4870 module_param(reset, bool, 0644);
4871 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
4872
4873 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
4874 MODULE_DESCRIPTION("Generic Bluetooth USB driver ver " VERSION);
4875 MODULE_VERSION(VERSION);
4876 MODULE_LICENSE("GPL");