diff options
author | Grant Likely <grant.likely@secretlab.ca> | 2010-05-22 02:36:56 -0400 |
---|---|---|
committer | Grant Likely <grant.likely@secretlab.ca> | 2010-05-22 02:36:56 -0400 |
commit | cf9b59e9d3e008591d1f54830f570982bb307a0d (patch) | |
tree | 113478ce8fd8c832ba726ffdf59b82cb46356476 /drivers/net/wireless/ath/ar9170/usb.c | |
parent | 44504b2bebf8b5823c59484e73096a7d6574471d (diff) | |
parent | f4b87dee923342505e1ddba8d34ce9de33e75050 (diff) |
Merge remote branch 'origin' into secretlab/next-devicetree
Merging in current state of Linus' tree to deal with merge conflicts and
build failures in vio.c after merge.
Conflicts:
drivers/i2c/busses/i2c-cpm.c
drivers/i2c/busses/i2c-mpc.c
drivers/net/gianfar.c
Also fixed up one line in arch/powerpc/kernel/vio.c to use the
correct node pointer.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Diffstat (limited to 'drivers/net/wireless/ath/ar9170/usb.c')
-rw-r--r-- | drivers/net/wireless/ath/ar9170/usb.c | 36 |
1 files changed, 30 insertions, 6 deletions
diff --git a/drivers/net/wireless/ath/ar9170/usb.c b/drivers/net/wireless/ath/ar9170/usb.c index 99a6da464bd3..82ab532a4923 100644 --- a/drivers/net/wireless/ath/ar9170/usb.c +++ b/drivers/net/wireless/ath/ar9170/usb.c | |||
@@ -42,6 +42,7 @@ | |||
42 | #include <linux/usb.h> | 42 | #include <linux/usb.h> |
43 | #include <linux/firmware.h> | 43 | #include <linux/firmware.h> |
44 | #include <linux/etherdevice.h> | 44 | #include <linux/etherdevice.h> |
45 | #include <linux/device.h> | ||
45 | #include <net/mac80211.h> | 46 | #include <net/mac80211.h> |
46 | #include "ar9170.h" | 47 | #include "ar9170.h" |
47 | #include "cmd.h" | 48 | #include "cmd.h" |
@@ -67,18 +68,28 @@ static struct usb_device_id ar9170_usb_ids[] = { | |||
67 | { USB_DEVICE(0x0cf3, 0x1001) }, | 68 | { USB_DEVICE(0x0cf3, 0x1001) }, |
68 | /* TP-Link TL-WN821N v2 */ | 69 | /* TP-Link TL-WN821N v2 */ |
69 | { USB_DEVICE(0x0cf3, 0x1002) }, | 70 | { USB_DEVICE(0x0cf3, 0x1002) }, |
71 | /* 3Com Dual Band 802.11n USB Adapter */ | ||
72 | { USB_DEVICE(0x0cf3, 0x1010) }, | ||
73 | /* H3C Dual Band 802.11n USB Adapter */ | ||
74 | { USB_DEVICE(0x0cf3, 0x1011) }, | ||
70 | /* Cace Airpcap NX */ | 75 | /* Cace Airpcap NX */ |
71 | { USB_DEVICE(0xcace, 0x0300) }, | 76 | { USB_DEVICE(0xcace, 0x0300) }, |
72 | /* D-Link DWA 160 A1 */ | 77 | /* D-Link DWA 160 A1 */ |
73 | { USB_DEVICE(0x07d1, 0x3c10) }, | 78 | { USB_DEVICE(0x07d1, 0x3c10) }, |
74 | /* D-Link DWA 160 A2 */ | 79 | /* D-Link DWA 160 A2 */ |
75 | { USB_DEVICE(0x07d1, 0x3a09) }, | 80 | { USB_DEVICE(0x07d1, 0x3a09) }, |
81 | /* Netgear WNA1000 */ | ||
82 | { USB_DEVICE(0x0846, 0x9040) }, | ||
76 | /* Netgear WNDA3100 */ | 83 | /* Netgear WNDA3100 */ |
77 | { USB_DEVICE(0x0846, 0x9010) }, | 84 | { USB_DEVICE(0x0846, 0x9010) }, |
78 | /* Netgear WN111 v2 */ | 85 | /* Netgear WN111 v2 */ |
79 | { USB_DEVICE(0x0846, 0x9001) }, | 86 | { USB_DEVICE(0x0846, 0x9001) }, |
80 | /* Zydas ZD1221 */ | 87 | /* Zydas ZD1221 */ |
81 | { USB_DEVICE(0x0ace, 0x1221) }, | 88 | { USB_DEVICE(0x0ace, 0x1221) }, |
89 | /* Proxim ORiNOCO 802.11n USB */ | ||
90 | { USB_DEVICE(0x1435, 0x0804) }, | ||
91 | /* WNC Generic 11n USB Dongle */ | ||
92 | { USB_DEVICE(0x1435, 0x0326) }, | ||
82 | /* ZyXEL NWD271N */ | 93 | /* ZyXEL NWD271N */ |
83 | { USB_DEVICE(0x0586, 0x3417) }, | 94 | { USB_DEVICE(0x0586, 0x3417) }, |
84 | /* Z-Com UB81 BG */ | 95 | /* Z-Com UB81 BG */ |
@@ -99,6 +110,8 @@ static struct usb_device_id ar9170_usb_ids[] = { | |||
99 | { USB_DEVICE(0x0409, 0x0249) }, | 110 | { USB_DEVICE(0x0409, 0x0249) }, |
100 | /* AVM FRITZ!WLAN USB Stick N 2.4 */ | 111 | /* AVM FRITZ!WLAN USB Stick N 2.4 */ |
101 | { USB_DEVICE(0x057C, 0x8402), .driver_info = AR9170_REQ_FW1_ONLY }, | 112 | { USB_DEVICE(0x057C, 0x8402), .driver_info = AR9170_REQ_FW1_ONLY }, |
113 | /* Qwest/Actiontec 802AIN Wireless N USB Network Adapter */ | ||
114 | { USB_DEVICE(0x1668, 0x1200) }, | ||
102 | 115 | ||
103 | /* terminate */ | 116 | /* terminate */ |
104 | {} | 117 | {} |
@@ -202,7 +215,7 @@ resubmit: | |||
202 | return; | 215 | return; |
203 | 216 | ||
204 | free: | 217 | free: |
205 | usb_buffer_free(aru->udev, 64, urb->transfer_buffer, urb->transfer_dma); | 218 | usb_free_coherent(aru->udev, 64, urb->transfer_buffer, urb->transfer_dma); |
206 | } | 219 | } |
207 | 220 | ||
208 | static void ar9170_usb_rx_completed(struct urb *urb) | 221 | static void ar9170_usb_rx_completed(struct urb *urb) |
@@ -283,7 +296,7 @@ static int ar9170_usb_alloc_rx_irq_urb(struct ar9170_usb *aru) | |||
283 | if (!urb) | 296 | if (!urb) |
284 | goto out; | 297 | goto out; |
285 | 298 | ||
286 | ibuf = usb_buffer_alloc(aru->udev, 64, GFP_KERNEL, &urb->transfer_dma); | 299 | ibuf = usb_alloc_coherent(aru->udev, 64, GFP_KERNEL, &urb->transfer_dma); |
287 | if (!ibuf) | 300 | if (!ibuf) |
288 | goto out; | 301 | goto out; |
289 | 302 | ||
@@ -296,8 +309,8 @@ static int ar9170_usb_alloc_rx_irq_urb(struct ar9170_usb *aru) | |||
296 | err = usb_submit_urb(urb, GFP_KERNEL); | 309 | err = usb_submit_urb(urb, GFP_KERNEL); |
297 | if (err) { | 310 | if (err) { |
298 | usb_unanchor_urb(urb); | 311 | usb_unanchor_urb(urb); |
299 | usb_buffer_free(aru->udev, 64, urb->transfer_buffer, | 312 | usb_free_coherent(aru->udev, 64, urb->transfer_buffer, |
300 | urb->transfer_dma); | 313 | urb->transfer_dma); |
301 | } | 314 | } |
302 | 315 | ||
303 | out: | 316 | out: |
@@ -727,12 +740,16 @@ static void ar9170_usb_firmware_failed(struct ar9170_usb *aru) | |||
727 | { | 740 | { |
728 | struct device *parent = aru->udev->dev.parent; | 741 | struct device *parent = aru->udev->dev.parent; |
729 | 742 | ||
743 | complete(&aru->firmware_loading_complete); | ||
744 | |||
730 | /* unbind anything failed */ | 745 | /* unbind anything failed */ |
731 | if (parent) | 746 | if (parent) |
732 | down(&parent->sem); | 747 | device_lock(parent); |
733 | device_release_driver(&aru->udev->dev); | 748 | device_release_driver(&aru->udev->dev); |
734 | if (parent) | 749 | if (parent) |
735 | up(&parent->sem); | 750 | device_unlock(parent); |
751 | |||
752 | usb_put_dev(aru->udev); | ||
736 | } | 753 | } |
737 | 754 | ||
738 | static void ar9170_usb_firmware_finish(const struct firmware *fw, void *context) | 755 | static void ar9170_usb_firmware_finish(const struct firmware *fw, void *context) |
@@ -761,6 +778,8 @@ static void ar9170_usb_firmware_finish(const struct firmware *fw, void *context) | |||
761 | if (err) | 778 | if (err) |
762 | goto err_unrx; | 779 | goto err_unrx; |
763 | 780 | ||
781 | complete(&aru->firmware_loading_complete); | ||
782 | usb_put_dev(aru->udev); | ||
764 | return; | 783 | return; |
765 | 784 | ||
766 | err_unrx: | 785 | err_unrx: |
@@ -858,6 +877,7 @@ static int ar9170_usb_probe(struct usb_interface *intf, | |||
858 | init_usb_anchor(&aru->tx_pending); | 877 | init_usb_anchor(&aru->tx_pending); |
859 | init_usb_anchor(&aru->tx_submitted); | 878 | init_usb_anchor(&aru->tx_submitted); |
860 | init_completion(&aru->cmd_wait); | 879 | init_completion(&aru->cmd_wait); |
880 | init_completion(&aru->firmware_loading_complete); | ||
861 | spin_lock_init(&aru->tx_urb_lock); | 881 | spin_lock_init(&aru->tx_urb_lock); |
862 | 882 | ||
863 | aru->tx_pending_urbs = 0; | 883 | aru->tx_pending_urbs = 0; |
@@ -877,6 +897,7 @@ static int ar9170_usb_probe(struct usb_interface *intf, | |||
877 | if (err) | 897 | if (err) |
878 | goto err_freehw; | 898 | goto err_freehw; |
879 | 899 | ||
900 | usb_get_dev(aru->udev); | ||
880 | return request_firmware_nowait(THIS_MODULE, 1, "ar9170.fw", | 901 | return request_firmware_nowait(THIS_MODULE, 1, "ar9170.fw", |
881 | &aru->udev->dev, GFP_KERNEL, aru, | 902 | &aru->udev->dev, GFP_KERNEL, aru, |
882 | ar9170_usb_firmware_step2); | 903 | ar9170_usb_firmware_step2); |
@@ -896,6 +917,9 @@ static void ar9170_usb_disconnect(struct usb_interface *intf) | |||
896 | return; | 917 | return; |
897 | 918 | ||
898 | aru->common.state = AR9170_IDLE; | 919 | aru->common.state = AR9170_IDLE; |
920 | |||
921 | wait_for_completion(&aru->firmware_loading_complete); | ||
922 | |||
899 | ar9170_unregister(&aru->common); | 923 | ar9170_unregister(&aru->common); |
900 | ar9170_usb_cancel_urbs(aru); | 924 | ar9170_usb_cancel_urbs(aru); |
901 | 925 | ||