forked from Minki/linux
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: Sujith <Sujith.Manoharan@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
5f1e83dbc3
commit
ce43cee531
@ -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)
|
|||||||
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,
|
|||||||
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,
|
|||||||
{
|
{
|
||||||
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,
|
|||||||
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 {
|
|||||||
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;
|
||||||
|
Loading…
Reference in New Issue
Block a user