aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/ath/120-owl-loader-compat.patch
blob: 155f4fc365670b398d99ad0a725e4ed071275cab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
@@ -104,6 +104,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);
@@ -119,6 +120,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;
 
@@ -138,8 +149,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);