| From: Christian Lamparter <chunkeey@gmail.com> |
| Date: Sat, 16 Nov 2019 19:25:24 +0100 |
| Subject: [PATCH] owl_loader: compatibility patch |
| |
| This patch includes OpenWrt specific changes that are |
| not included in the upstream owl-loader. |
| |
| This includes a platform data handling changes for ar71xx. |
| |
| Signed-off-by: Christian Lamparter <chunkeey@gmail.com> |
| |
| --- a/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c |
| +++ b/drivers/net/wireless/ath/ath9k/ath9k_pci_owl_loader.c |
| @@ -103,6 +103,7 @@ static void owl_fw_cb(const struct firmw |
| { |
| struct pci_dev *pdev = (struct pci_dev *)context; |
| struct owl_ctx *ctx = (struct owl_ctx *)pci_get_drvdata(pdev); |
| + struct ath9k_platform_data *pdata = dev_get_platdata(&pdev->dev); |
| struct pci_bus *bus; |
| |
| complete(&ctx->eeprom_load); |
| @@ -118,6 +119,16 @@ static void owl_fw_cb(const struct firmw |
| goto release; |
| } |
| |
| + if (pdata) { |
| + memcpy(pdata->eeprom_data, fw->data, fw->size); |
| + |
| + /* |
| + * eeprom has been successfully loaded - pass the data to ath9k |
| + * but remove the eeprom_name, so it doesn't try to load it too. |
| + */ |
| + pdata->eeprom_name = NULL; |
| + } |
| + |
| if (ath9k_pci_fixup(pdev, (const u16 *)fw->data, fw->size)) |
| goto release; |
| |
| @@ -137,8 +148,14 @@ release: |
| static const char *owl_get_eeprom_name(struct pci_dev *pdev) |
| { |
| struct device *dev = &pdev->dev; |
| + struct ath9k_platform_data *pdata; |
| char *eeprom_name; |
| |
| + /* try the existing platform data first */ |
| + pdata = dev_get_platdata(dev); |
| + if (pdata && pdata->eeprom_name) |
| + return pdata->eeprom_name; |
| + |
| dev_dbg(dev, "using auto-generated eeprom filename\n"); |
| |
| eeprom_name = devm_kzalloc(dev, EEPROM_FILENAME_LEN, GFP_KERNEL); |