Commit ce43cee5 authored by Sujith's avatar Sujith Committed by John W. Linville

ath9k: Determine Firmware on probe

Do not assign the FW name to driver_info but determine
it dynamically on device probe. This facilitates adding new
firmware.
Signed-off-by: default avatarSujith <Sujith.Manoharan@atheros.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 5f1e83db
...@@ -16,12 +16,9 @@ ...@@ -16,12 +16,9 @@
#include "htc.h" #include "htc.h"
#define ATH9K_FW_USB_DEV(devid, fw) \
{ USB_DEVICE(0x0cf3, devid), .driver_info = (unsigned long) fw }
static struct usb_device_id ath9k_hif_usb_ids[] = { static struct usb_device_id ath9k_hif_usb_ids[] = {
ATH9K_FW_USB_DEV(0x9271, "ar9271.fw"), { USB_DEVICE(0x0cf3, 0x9271) },
ATH9K_FW_USB_DEV(0x1006, "ar9271.fw"), { USB_DEVICE(0x0cf3, 0x1006) },
{ }, { },
}; };
...@@ -790,21 +787,21 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev) ...@@ -790,21 +787,21 @@ static int ath9k_hif_usb_download_fw(struct hif_device_usb *hif_dev)
return -EIO; return -EIO;
dev_info(&hif_dev->udev->dev, "ath9k_htc: Transferred FW: %s, size: %ld\n", dev_info(&hif_dev->udev->dev, "ath9k_htc: Transferred FW: %s, size: %ld\n",
"ar9271.fw", (unsigned long) hif_dev->firmware->size); hif_dev->fw_name, (unsigned long) hif_dev->firmware->size);
return 0; return 0;
} }
static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev, static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev)
const char *fw_name)
{ {
int ret; int ret;
/* Request firmware */ /* Request firmware */
ret = request_firmware(&hif_dev->firmware, fw_name, &hif_dev->udev->dev); ret = request_firmware(&hif_dev->firmware, hif_dev->fw_name,
&hif_dev->udev->dev);
if (ret) { if (ret) {
dev_err(&hif_dev->udev->dev, dev_err(&hif_dev->udev->dev,
"ath9k_htc: Firmware - %s not found\n", fw_name); "ath9k_htc: Firmware - %s not found\n", hif_dev->fw_name);
goto err_fw_req; goto err_fw_req;
} }
...@@ -820,7 +817,8 @@ static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev, ...@@ -820,7 +817,8 @@ static int ath9k_hif_usb_dev_init(struct hif_device_usb *hif_dev,
ret = ath9k_hif_usb_download_fw(hif_dev); ret = ath9k_hif_usb_download_fw(hif_dev);
if (ret) { if (ret) {
dev_err(&hif_dev->udev->dev, dev_err(&hif_dev->udev->dev,
"ath9k_htc: Firmware - %s download failed\n", fw_name); "ath9k_htc: Firmware - %s download failed\n",
hif_dev->fw_name);
goto err_fw_download; goto err_fw_download;
} }
...@@ -847,7 +845,6 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface, ...@@ -847,7 +845,6 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
{ {
struct usb_device *udev = interface_to_usbdev(interface); struct usb_device *udev = interface_to_usbdev(interface);
struct hif_device_usb *hif_dev; struct hif_device_usb *hif_dev;
const char *fw_name = (const char *) id->driver_info;
int ret = 0; int ret = 0;
hif_dev = kzalloc(sizeof(struct hif_device_usb), GFP_KERNEL); hif_dev = kzalloc(sizeof(struct hif_device_usb), GFP_KERNEL);
...@@ -872,7 +869,23 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface, ...@@ -872,7 +869,23 @@ static int ath9k_hif_usb_probe(struct usb_interface *interface,
goto err_htc_hw_alloc; goto err_htc_hw_alloc;
} }
ret = ath9k_hif_usb_dev_init(hif_dev, fw_name); /* Find out which firmware to load */
switch(hif_dev->device_id) {
case 0x9271:
case 0x1006:
hif_dev->fw_name = "ar9271.fw";
break;
default:
break;
}
if (!hif_dev->fw_name) {
dev_err(&udev->dev, "Can't determine firmware !\n");
goto err_htc_hw_alloc;
}
ret = ath9k_hif_usb_dev_init(hif_dev);
if (ret) { if (ret) {
ret = -EINVAL; ret = -EINVAL;
goto err_hif_init_usb; goto err_hif_init_usb;
......
...@@ -90,6 +90,7 @@ struct hif_device_usb { ...@@ -90,6 +90,7 @@ struct hif_device_usb {
struct usb_anchor regout_submitted; struct usb_anchor regout_submitted;
struct usb_anchor rx_submitted; struct usb_anchor rx_submitted;
struct sk_buff *remain_skb; struct sk_buff *remain_skb;
const char *fw_name;
int rx_remain_len; int rx_remain_len;
int rx_pkt_len; int rx_pkt_len;
int rx_transfer_len; int rx_transfer_len;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment