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) },
        { 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 */
        {}
                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");
 
        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)
 {
        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);