ar9170: add AVM FRITZ devices
This adds: USB 0x057C:0x8401 AVM FRITZ!WLAN USB Stick N USB 0x057C:0x8402 AVM FRITZ!WLAN USB Stick N 2.4 These devices require the 1-stage firmware, if not present we don't continue. Cc: Peter Grabienski <Peter.Grabienski@Atheros.com> Cc: Stephen Chen <Stephen.Chen@Atheros.com> Cc: Michael Fortin <Michael.Fortin@Atheros.com> Cc: Johnny Cheng <Johnny.Cheng@Atheros.com> Cc: Yuan-Gu Wei <Yuan-Gu.Wei@atheros.com> Cc: Joerg Albert <jal2@gmx.de> Signed-off-by: Luis R. Rodriguez <lrodriguez@atheros.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
c768b58d62
commit
bdf6d32f93
2 changed files with 27 additions and 0 deletions
|
@ -55,6 +55,10 @@ MODULE_FIRMWARE("ar9170.fw");
|
|||
MODULE_FIRMWARE("ar9170-1.fw");
|
||||
MODULE_FIRMWARE("ar9170-2.fw");
|
||||
|
||||
enum ar9170_requirements {
|
||||
AR9170_REQ_FW1_ONLY = 1,
|
||||
};
|
||||
|
||||
static struct usb_device_id ar9170_usb_ids[] = {
|
||||
/* Atheros 9170 */
|
||||
{ USB_DEVICE(0x0cf3, 0x9170) },
|
||||
|
@ -82,6 +86,10 @@ static struct usb_device_id ar9170_usb_ids[] = {
|
|||
{ USB_DEVICE(0x2019, 0x5304) },
|
||||
/* IO-Data WNGDNUS2 */
|
||||
{ USB_DEVICE(0x04bb, 0x093f) },
|
||||
/* AVM FRITZ!WLAN USB Stick N */
|
||||
{ USB_DEVICE(0x057C, 0x8401) },
|
||||
/* AVM FRITZ!WLAN USB Stick N 2.4 */
|
||||
{ USB_DEVICE(0x057C, 0x8402), .driver_info = AR9170_REQ_FW1_ONLY },
|
||||
|
||||
/* terminate */
|
||||
{}
|
||||
|
@ -512,6 +520,12 @@ static int ar9170_usb_request_firmware(struct ar9170_usb *aru)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (aru->req_one_stage_fw) {
|
||||
dev_err(&aru->udev->dev, "ar9170.fw firmware file "
|
||||
"not found and is required for this device\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
dev_err(&aru->udev->dev, "ar9170.fw firmware file "
|
||||
"not found, trying old firmware...\n");
|
||||
|
||||
|
@ -668,6 +682,15 @@ static int ar9170_usb_init_device(struct ar9170_usb *aru)
|
|||
return err;
|
||||
}
|
||||
|
||||
static bool ar9170_requires_one_stage(const struct usb_device_id *id)
|
||||
{
|
||||
if (!id->driver_info)
|
||||
return false;
|
||||
if (id->driver_info == AR9170_REQ_FW1_ONLY)
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
static int ar9170_usb_probe(struct usb_interface *intf,
|
||||
const struct usb_device_id *id)
|
||||
{
|
||||
|
@ -688,6 +711,8 @@ static int ar9170_usb_probe(struct usb_interface *intf,
|
|||
aru->intf = intf;
|
||||
ar = &aru->common;
|
||||
|
||||
aru->req_one_stage_fw = ar9170_requires_one_stage(id);
|
||||
|
||||
usb_set_intfdata(intf, aru);
|
||||
SET_IEEE80211_DEV(ar->hw, &udev->dev);
|
||||
|
||||
|
|
|
@ -62,6 +62,8 @@ struct ar9170_usb {
|
|||
struct usb_anchor rx_submitted;
|
||||
struct usb_anchor tx_submitted;
|
||||
|
||||
bool req_one_stage_fw;
|
||||
|
||||
spinlock_t cmdlock;
|
||||
struct completion cmd_wait;
|
||||
int readlen;
|
||||
|
|
Loading…
Reference in a new issue