summaryrefslogtreecommitdiffhomepage
path: root/drivers/net/wireless/mediatek/mt7601u/mcu.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/mediatek/mt7601u/mcu.c')
-rw-r--r--drivers/net/wireless/mediatek/mt7601u/mcu.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/drivers/net/wireless/mediatek/mt7601u/mcu.c b/drivers/net/wireless/mediatek/mt7601u/mcu.c
index 1b5cc271a9e1..bad6ca821400 100644
--- a/drivers/net/wireless/mediatek/mt7601u/mcu.c
+++ b/drivers/net/wireless/mediatek/mt7601u/mcu.c
@@ -403,12 +403,18 @@ error:
return ret;
}
+static const char * const mt7601u_fw_paths[] = {
+ "mediatek/" MT7601U_FIRMWARE,
+ MT7601U_FIRMWARE,
+};
+
static int mt7601u_load_firmware(struct mt7601u_dev *dev)
{
const struct firmware *fw;
const struct mt76_fw_header *hdr;
int len, ret;
u32 val;
+ int i;
mt7601u_wr(dev, MT_USB_DMA_CFG, (MT_USB_DMA_CFG_RX_BULK_EN |
MT_USB_DMA_CFG_TX_BULK_EN));
@@ -416,7 +422,14 @@ static int mt7601u_load_firmware(struct mt7601u_dev *dev)
if (firmware_running(dev))
return firmware_request_cache(dev->dev, MT7601U_FIRMWARE);
- ret = request_firmware(&fw, MT7601U_FIRMWARE, dev->dev);
+ /* Try loading firmware from multiple locations */
+ fw = NULL;
+ for (i = 0; i < MT7601U_FIRMWARE_PATHS; i++) {
+ ret = request_firmware(&fw, mt7601u_fw_paths[i], dev->dev);
+ if (ret == 0)
+ break;
+ }
+
if (ret)
return ret;