diff options
author | Sujith <Sujith.Manoharan@atheros.com> | 2010-06-02 06:23:34 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2010-06-04 16:00:39 -0400 |
commit | b176286276f85e10e8ab3342730c5e39e1ce460b (patch) | |
tree | 0105bb2417902dc2d7a109bf7b66697725f65ab0 | |
parent | cbba8cd101c1230284ee46629c841481f7c34b68 (diff) |
ath9k_htc: Add support for AR7010
Add the USB device IDs for AR7010 and handle
firmware loading properly.
Signed-off-by: Sujith <Sujith.Manoharan@atheros.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hif_usb.c | 15 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath9k/hif_usb.h | 1 |
2 files changed, 15 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.c b/drivers/net/wireless/ath/ath9k/hif_usb.c index 142405ccd6c1..5f3ea7091ae0 100644 --- a/drivers/net/wireless/ath/ath9k/hif_usb.c +++ b/drivers/net/wireless/ath/ath9k/hif_usb.c | |||
@@ -19,6 +19,7 @@ | |||
19 | static struct usb_device_id ath9k_hif_usb_ids[] = { | 19 | static struct usb_device_id ath9k_hif_usb_ids[] = { |
20 | { USB_DEVICE(0x0cf3, 0x9271) }, | 20 | { USB_DEVICE(0x0cf3, 0x9271) }, |
21 | { USB_DEVICE(0x0cf3, 0x1006) }, | 21 | { USB_DEVICE(0x0cf3, 0x1006) }, |
22 | { USB_DEVICE(0x0cf3, 0x7010) }, | ||
22 | { }, | 23 | { }, |
23 | }; | 24 | }; |
24 | 25 | ||
@@ -753,6 +754,7 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev) | |||
753 | size_t len = hif_dev->firmware->size; | 754 | size_t len = hif_dev->firmware->size; |
754 | u32 addr = AR9271_FIRMWARE; | 755 | u32 addr = AR9271_FIRMWARE; |
755 | u8 *buf = kzalloc(4096, GFP_KERNEL); | 756 | u8 *buf = kzalloc(4096, GFP_KERNEL); |
757 | u32 firm_offset; | ||
756 | 758 | ||
757 | if (!buf) | 759 | if (!buf) |
758 | return -ENOMEM; | 760 | return -ENOMEM; |
@@ -776,13 +778,18 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev) | |||
776 | } | 778 | } |
777 | kfree(buf); | 779 | kfree(buf); |
778 | 780 | ||
781 | if (hif_dev->device_id == 0x7010) | ||
782 | firm_offset = AR7010_FIRMWARE_TEXT; | ||
783 | else | ||
784 | firm_offset = AR9271_FIRMWARE_TEXT; | ||
785 | |||
779 | /* | 786 | /* |
780 | * Issue FW download complete command to firmware. | 787 | * Issue FW download complete command to firmware. |
781 | */ | 788 | */ |
782 | err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0), | 789 | err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0), |
783 | FIRMWARE_DOWNLOAD_COMP, | 790 | FIRMWARE_DOWNLOAD_COMP, |
784 | 0x40 | USB_DIR_OUT, | 791 | 0x40 | USB_DIR_OUT, |
785 | AR9271_FIRMWARE_TEXT >> 8, 0, NULL, 0, HZ); | 792 | firm_offset >> 8, 0, NULL, 0, HZ); |
786 | if (err) | 793 | if (err) |
787 | return -EIO; | 794 | return -EIO; |
788 | 795 | ||
@@ -876,6 +883,12 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface, | |||
876 | case 0x1006: | 883 | case 0x1006: |
877 | hif_dev->fw_name = "ar9271.fw"; | 884 | hif_dev->fw_name = "ar9271.fw"; |
878 | break; | 885 | break; |
886 | case 0x7010: | ||
887 | if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202) | ||
888 | hif_dev->fw_name = "ar7010_1_1.fw"; | ||
889 | else | ||
890 | hif_dev->fw_name = "ar7010.fw"; | ||
891 | break; | ||
879 | default: | 892 | default: |
880 | break; | 893 | break; |
881 | } | 894 | } |
diff --git a/drivers/net/wireless/ath/ath9k/hif_usb.h b/drivers/net/wireless/ath/ath9k/hif_usb.h index b2647e89ad18..2daf97b11c08 100644 --- a/drivers/net/wireless/ath/ath9k/hif_usb.h +++ b/drivers/net/wireless/ath/ath9k/hif_usb.h | |||
@@ -19,6 +19,7 @@ | |||
19 | 19 | ||
20 | #define AR9271_FIRMWARE 0x501000 | 20 | #define AR9271_FIRMWARE 0x501000 |
21 | #define AR9271_FIRMWARE_TEXT 0x903000 | 21 | #define AR9271_FIRMWARE_TEXT 0x903000 |
22 | #define AR7010_FIRMWARE_TEXT 0x906000 | ||
22 | 23 | ||
23 | #define FIRMWARE_DOWNLOAD 0x30 | 24 | #define FIRMWARE_DOWNLOAD 0x30 |
24 | #define FIRMWARE_DOWNLOAD_COMP 0x31 | 25 | #define FIRMWARE_DOWNLOAD_COMP 0x31 |