21 #include <linux/module.h>
22 #include <linux/kernel.h>
24 #include <linux/slab.h>
25 #include <linux/types.h>
26 #include <linux/errno.h>
27 #include <linux/device.h>
33 #define ATH3K_FIRMWARE "ath3k-1.fw"
35 #define ATH3K_DNLOAD 0x01
36 #define ATH3K_GETSTATE 0x05
37 #define ATH3K_SET_NORMAL_MODE 0x07
38 #define ATH3K_GETVERSION 0x09
39 #define USB_REG_SWITCH_VID_PID 0x0a
41 #define ATH3K_MODE_MASK 0x3F
42 #define ATH3K_NORMAL_MODE 0x0E
44 #define ATH3K_PATCH_UPDATE 0x80
45 #define ATH3K_SYSCFG_UPDATE 0x40
47 #define ATH3K_XTAL_FREQ_26M 0x00
48 #define ATH3K_XTAL_FREQ_40M 0x01
49 #define ATH3K_XTAL_FREQ_19P2 0x02
50 #define ATH3K_NAME_LEN 0xFF
62 { USB_DEVICE(0x0CF3, 0x3000) },
65 { USB_DEVICE(0x0CF3, 0x3002) },
66 { USB_DEVICE(0x0CF3, 0xE019) },
67 { USB_DEVICE(0x13d3, 0x3304) },
68 { USB_DEVICE(0x0930, 0x0215) },
69 { USB_DEVICE(0x0489, 0xE03D) },
70 { USB_DEVICE(0x0489, 0xE027) },
73 { USB_DEVICE(0x03F0, 0x311D) },
76 { USB_DEVICE(0x0CF3, 0x3004) },
77 { USB_DEVICE(0x0CF3, 0x311D) },
78 { USB_DEVICE(0x13d3, 0x3375) },
79 { USB_DEVICE(0x04CA, 0x3005) },
80 { USB_DEVICE(0x13d3, 0x3362) },
81 { USB_DEVICE(0x0CF3, 0xE004) },
82 { USB_DEVICE(0x0930, 0x0219) },
83 { USB_DEVICE(0x0489, 0xe057) },
86 { USB_DEVICE(0x0489, 0xE02C) },
89 { USB_DEVICE(0x0489, 0xE03C) },
90 { USB_DEVICE(0x0489, 0xE036) },
97 #define BTUSB_ATH3012 0x80
103 { USB_DEVICE(0x0cf3, 0x3004), .driver_info =
BTUSB_ATH3012 },
104 { USB_DEVICE(0x0cf3, 0x311D), .driver_info =
BTUSB_ATH3012 },
105 { USB_DEVICE(0x13d3, 0x3375), .driver_info =
BTUSB_ATH3012 },
106 { USB_DEVICE(0x04ca, 0x3005), .driver_info =
BTUSB_ATH3012 },
107 { USB_DEVICE(0x13d3, 0x3362), .driver_info =
BTUSB_ATH3012 },
108 { USB_DEVICE(0x0cf3, 0xe004), .driver_info =
BTUSB_ATH3012 },
109 { USB_DEVICE(0x0930, 0x0219), .driver_info =
BTUSB_ATH3012 },
110 { USB_DEVICE(0x0489, 0xe057), .driver_info =
BTUSB_ATH3012 },
113 { USB_DEVICE(0x0489, 0xE03C), .driver_info =
BTUSB_ATH3012 },
114 { USB_DEVICE(0x0489, 0xE036), .driver_info =
BTUSB_ATH3012 },
119 #define USB_REQ_DFU_DNLOAD 1
120 #define BULK_SIZE 4096
121 #define FW_HDR_SIZE 20
123 static int ath3k_load_firmware(
struct usb_device *
udev,
132 pipe = usb_sndctrlpipe(udev, 0);
136 BT_ERR(
"Can't allocate memory chunk for firmware");
144 send_buf, 20, USB_CTRL_SET_TIMEOUT)) < 0) {
145 BT_ERR(
"Can't change to loading configuration err");
153 pipe = usb_sndbulkpipe(udev, 0x02);
154 memcpy(send_buf, firmware->
data + sent, size);
159 if (err || (len != size)) {
160 BT_ERR(
"Error in firmware loading err = %d,"
161 "len = %d, size = %d", err, len, size);
174 static int ath3k_get_state(
struct usb_device *
udev,
unsigned char *
state)
178 pipe = usb_rcvctrlpipe(udev, 0);
181 state, 0x01, USB_CTRL_SET_TIMEOUT);
184 static int ath3k_get_version(
struct usb_device *
udev,
189 pipe = usb_rcvctrlpipe(udev, 0);
193 USB_CTRL_SET_TIMEOUT);
196 static int ath3k_load_fwfile(
struct usb_device *udev,
203 count = firmware->
size;
207 BT_ERR(
"Can't allocate memory chunk for firmware");
214 pipe = usb_sndctrlpipe(udev, 0);
217 size, USB_CTRL_SET_TIMEOUT);
219 BT_ERR(
"Can't change to loading configuration err");
229 pipe = usb_sndbulkpipe(udev, 0x02);
231 memcpy(send_buf, firmware->
data + sent, size);
235 if (err || (len != size)) {
236 BT_ERR(
"Error in firmware loading err = %d,"
237 "len = %d, size = %d", err, len, size);
249 static int ath3k_switch_pid(
struct usb_device *udev)
253 pipe = usb_sndctrlpipe(udev, 0);
256 NULL, 0, USB_CTRL_SET_TIMEOUT);
259 static int ath3k_set_normal_mode(
struct usb_device *udev)
264 ret = ath3k_get_state(udev, &fw_state);
266 BT_ERR(
"Can't get state to change to normal mode err");
271 BT_DBG(
"firmware was already in normal mode");
275 pipe = usb_sndctrlpipe(udev, 0);
278 NULL, 0, USB_CTRL_SET_TIMEOUT);
281 static int ath3k_load_patch(
struct usb_device *udev)
285 const struct firmware *firmware;
289 ret = ath3k_get_state(udev, &fw_state);
291 BT_ERR(
"Can't get state to change to load ram patch err");
296 BT_DBG(
"Patch was already downloaded");
302 BT_ERR(
"Can't get version to change to load ram patch err");
311 BT_ERR(
"Patch file not found %s", filename);
315 pt_version.rom_version = *(
int *)(firmware->
data + firmware->
size - 8);
316 pt_version.build_version = *(
int *)
317 (firmware->
data + firmware->
size - 4);
319 if ((pt_version.rom_version !=
fw_version.rom_version) ||
320 (pt_version.build_version <=
fw_version.build_version)) {
321 BT_ERR(
"Patch file version did not match with firmware");
326 ret = ath3k_load_fwfile(udev, firmware);
332 static int ath3k_load_syscfg(
struct usb_device *udev)
336 const struct firmware *firmware;
340 ret = ath3k_get_state(udev, &fw_state);
342 BT_ERR(
"Can't get state to change to load configration err");
348 BT_ERR(
"Can't get version to change to load ram patch err");
373 BT_ERR(
"Configuration file not found %s", filename);
377 ret = ath3k_load_fwfile(udev, firmware);
386 const struct firmware *firmware;
387 struct usb_device *udev = interface_to_usbdev(intf);
390 BT_DBG(
"intf %p id %p", intf,
id);
392 if (intf->cur_altsetting->desc.bInterfaceNumber != 0)
396 if (!id->driver_info) {
407 if (
le16_to_cpu(udev->descriptor.bcdDevice) > 0x0001)
410 ret = ath3k_load_patch(udev);
412 BT_ERR(
"Loading patch file failed");
415 ret = ath3k_load_syscfg(udev);
417 BT_ERR(
"Loading sysconfig file failed");
420 ret = ath3k_set_normal_mode(udev);
422 BT_ERR(
"Set normal mode failed");
425 ath3k_switch_pid(udev);
432 BT_ERR(
"Firmware file \"%s\" not found",
435 BT_ERR(
"Firmware file \"%s\" request failed (err=%d)",
440 ret = ath3k_load_firmware(udev, firmware);
448 BT_DBG(
"ath3k_disconnect intf %p", intf);
451 static struct usb_driver ath3k_driver = {
453 .probe = ath3k_probe,
454 .disconnect = ath3k_disconnect,
455 .id_table = ath3k_table,
456 .disable_hub_initiated_lpm = 1,