diff options
Diffstat (limited to 'drivers/net/wireless/zd1211rw/zd_usb.c')
-rw-r--r-- | drivers/net/wireless/zd1211rw/zd_usb.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/drivers/net/wireless/zd1211rw/zd_usb.c b/drivers/net/wireless/zd1211rw/zd_usb.c index 23a6a6d4863b..d91ad1a612af 100644 --- a/drivers/net/wireless/zd1211rw/zd_usb.c +++ b/drivers/net/wireless/zd1211rw/zd_usb.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <linux/firmware.h> | 24 | #include <linux/firmware.h> |
25 | #include <linux/device.h> | 25 | #include <linux/device.h> |
26 | #include <linux/errno.h> | 26 | #include <linux/errno.h> |
27 | #include <linux/slab.h> | ||
27 | #include <linux/skbuff.h> | 28 | #include <linux/skbuff.h> |
28 | #include <linux/usb.h> | 29 | #include <linux/usb.h> |
29 | #include <linux/workqueue.h> | 30 | #include <linux/workqueue.h> |
@@ -62,6 +63,7 @@ static struct usb_device_id usb_ids[] = { | |||
62 | { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, | 63 | { USB_DEVICE(0x6891, 0xa727), .driver_info = DEVICE_ZD1211 }, |
63 | /* ZD1211B */ | 64 | /* ZD1211B */ |
64 | { USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B }, | 65 | { USB_DEVICE(0x0053, 0x5301), .driver_info = DEVICE_ZD1211B }, |
66 | { USB_DEVICE(0x0409, 0x0248), .driver_info = DEVICE_ZD1211B }, | ||
65 | { USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B }, | 67 | { USB_DEVICE(0x0411, 0x00da), .driver_info = DEVICE_ZD1211B }, |
66 | { USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B }, | 68 | { USB_DEVICE(0x0471, 0x1236), .driver_info = DEVICE_ZD1211B }, |
67 | { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B }, | 69 | { USB_DEVICE(0x0471, 0x1237), .driver_info = DEVICE_ZD1211B }, |
@@ -318,6 +320,13 @@ error: | |||
318 | return r; | 320 | return r; |
319 | } | 321 | } |
320 | 322 | ||
323 | MODULE_FIRMWARE(FW_ZD1211B_PREFIX "ur"); | ||
324 | MODULE_FIRMWARE(FW_ZD1211_PREFIX "ur"); | ||
325 | MODULE_FIRMWARE(FW_ZD1211B_PREFIX "ub"); | ||
326 | MODULE_FIRMWARE(FW_ZD1211_PREFIX "ub"); | ||
327 | MODULE_FIRMWARE(FW_ZD1211B_PREFIX "uphr"); | ||
328 | MODULE_FIRMWARE(FW_ZD1211_PREFIX "uphr"); | ||
329 | |||
321 | /* Read data from device address space using "firmware interface" which does | 330 | /* Read data from device address space using "firmware interface" which does |
322 | * not require firmware to be loaded. */ | 331 | * not require firmware to be loaded. */ |
323 | int zd_usb_read_fw(struct zd_usb *usb, zd_addr_t addr, u8 *data, u16 len) | 332 | int zd_usb_read_fw(struct zd_usb *usb, zd_addr_t addr, u8 *data, u16 len) |
@@ -419,7 +428,7 @@ static void int_urb_complete(struct urb *urb) | |||
419 | handle_regs_int(urb); | 428 | handle_regs_int(urb); |
420 | break; | 429 | break; |
421 | case USB_INT_ID_RETRY_FAILED: | 430 | case USB_INT_ID_RETRY_FAILED: |
422 | zd_mac_tx_failed(zd_usb_to_hw(urb->context)); | 431 | zd_mac_tx_failed(urb); |
423 | break; | 432 | break; |
424 | default: | 433 | default: |
425 | dev_dbg_f(urb_dev(urb), "error: urb %p unknown id %x\n", urb, | 434 | dev_dbg_f(urb_dev(urb), "error: urb %p unknown id %x\n", urb, |
@@ -553,6 +562,8 @@ static void handle_rx_packet(struct zd_usb *usb, const u8 *buffer, | |||
553 | 562 | ||
554 | if (length < sizeof(struct rx_length_info)) { | 563 | if (length < sizeof(struct rx_length_info)) { |
555 | /* It's not a complete packet anyhow. */ | 564 | /* It's not a complete packet anyhow. */ |
565 | printk("%s: invalid, small RX packet : %d\n", | ||
566 | __func__, length); | ||
556 | return; | 567 | return; |
557 | } | 568 | } |
558 | length_info = (struct rx_length_info *) | 569 | length_info = (struct rx_length_info *) |
@@ -1069,11 +1080,15 @@ static int eject_installer(struct usb_interface *intf) | |||
1069 | int r; | 1080 | int r; |
1070 | 1081 | ||
1071 | /* Find bulk out endpoint */ | 1082 | /* Find bulk out endpoint */ |
1072 | endpoint = &iface_desc->endpoint[1].desc; | 1083 | for (r = 1; r >= 0; r--) { |
1073 | if (usb_endpoint_dir_out(endpoint) && | 1084 | endpoint = &iface_desc->endpoint[r].desc; |
1074 | usb_endpoint_xfer_bulk(endpoint)) { | 1085 | if (usb_endpoint_dir_out(endpoint) && |
1075 | bulk_out_ep = endpoint->bEndpointAddress; | 1086 | usb_endpoint_xfer_bulk(endpoint)) { |
1076 | } else { | 1087 | bulk_out_ep = endpoint->bEndpointAddress; |
1088 | break; | ||
1089 | } | ||
1090 | } | ||
1091 | if (r == -1) { | ||
1077 | dev_err(&udev->dev, | 1092 | dev_err(&udev->dev, |
1078 | "zd1211rw: Could not find bulk out endpoint\n"); | 1093 | "zd1211rw: Could not find bulk out endpoint\n"); |
1079 | return -ENODEV; | 1094 | return -ENODEV; |