aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/zd1211rw/zd_usb.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/zd1211rw/zd_usb.c')
-rw-r--r--drivers/net/wireless/zd1211rw/zd_usb.c27
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
323MODULE_FIRMWARE(FW_ZD1211B_PREFIX "ur");
324MODULE_FIRMWARE(FW_ZD1211_PREFIX "ur");
325MODULE_FIRMWARE(FW_ZD1211B_PREFIX "ub");
326MODULE_FIRMWARE(FW_ZD1211_PREFIX "ub");
327MODULE_FIRMWARE(FW_ZD1211B_PREFIX "uphr");
328MODULE_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. */
323int zd_usb_read_fw(struct zd_usb *usb, zd_addr_t addr, u8 *data, u16 len) 332int 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;