ath9k_htc: Add support for AR7010
authorSujith <Sujith.Manoharan@atheros.com>
Wed, 2 Jun 2010 10:23:34 +0000 (15:53 +0530)
committerJohn W. Linville <linville@tuxdriver.com>
Fri, 4 Jun 2010 20:00:39 +0000 (16:00 -0400)
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>
drivers/net/wireless/ath/ath9k/hif_usb.c
drivers/net/wireless/ath/ath9k/hif_usb.h

index 142405ccd6c1160d9240778e3ad03ea30cbead79..5f3ea7091ae085240b64ae519d2c2534c9bda15e 100644 (file)
@@ -19,6 +19,7 @@
 static struct usb_device_id ath9k_hif_usb_ids[] = {
        { USB_DEVICE(0x0cf3, 0x9271) },
        { USB_DEVICE(0x0cf3, 0x1006) },
+       { USB_DEVICE(0x0cf3, 0x7010) },
        { },
 };
 
@@ -753,6 +754,7 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
        size_t len = hif_dev->firmware->size;
        u32 addr = AR9271_FIRMWARE;
        u8 *buf = kzalloc(4096, GFP_KERNEL);
+       u32 firm_offset;
 
        if (!buf)
                return -ENOMEM;
@@ -776,13 +778,18 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
        }
        kfree(buf);
 
+       if (hif_dev->device_id == 0x7010)
+               firm_offset = AR7010_FIRMWARE_TEXT;
+       else
+               firm_offset = AR9271_FIRMWARE_TEXT;
+
        /*
         * Issue FW download complete command to firmware.
         */
        err = usb_control_msg(hif_dev->udev, usb_sndctrlpipe(hif_dev->udev, 0),
                              FIRMWARE_DOWNLOAD_COMP,
                              0x40 | USB_DIR_OUT,
-                             AR9271_FIRMWARE_TEXT >> 8, 0, NULL, 0, HZ);
+                             firm_offset >> 8, 0, NULL, 0, HZ);
        if (err)
                return -EIO;
 
@@ -876,6 +883,12 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
        case 0x1006:
                hif_dev->fw_name = "ar9271.fw";
                break;
+       case 0x7010:
+               if (le16_to_cpu(udev->descriptor.bcdDevice) == 0x0202)
+                       hif_dev->fw_name = "ar7010_1_1.fw";
+               else
+                       hif_dev->fw_name = "ar7010.fw";
+               break;
        default:
                break;
        }
index b2647e89ad18f3d7198b5730da38176bfe975ab9..2daf97b11c08bf02b78d1d85e4d4c85745d1f41b 100644 (file)
@@ -19,6 +19,7 @@
 
 #define AR9271_FIRMWARE       0x501000
 #define AR9271_FIRMWARE_TEXT  0x903000
+#define AR7010_FIRMWARE_TEXT  0x906000
 
 #define FIRMWARE_DOWNLOAD       0x30
 #define FIRMWARE_DOWNLOAD_COMP  0x31