aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mac80211/patches/328-ath9k-parse-the-device-configuration-from-an-OF-node.patch
diff options
context:
space:
mode:
authorMartin Blumenstingl <martin.blumenstingl@googlemail.com>2016-11-26 01:01:12 +0100
committerMathias Kresin <dev@kresin.me>2016-11-29 21:40:16 +0100
commit1847248fc1560d10cb49c88b343598c9cb673f38 (patch)
treeb33dcd3f1425afb69cc565bd7625d51f27c86929 /package/kernel/mac80211/patches/328-ath9k-parse-the-device-configuration-from-an-OF-node.patch
parenta15ea362d7279420d3b620412bbb007f9b02b77f (diff)
downloadupstream-1847248fc1560d10cb49c88b343598c9cb673f38.tar.gz
upstream-1847248fc1560d10cb49c88b343598c9cb673f38.tar.bz2
upstream-1847248fc1560d10cb49c88b343598c9cb673f38.zip
kernel: mac80211: backport ath9k device tree support patches
These patches add support for configuring ath9k based devices via devicetree. This was tested on PCI(e) based devices. This should work for AHB based devices as well (adding more AHB specific properties may still be needed) as soon as the ath79 platform is ready to populate the ath9k wmac via devicetree. This patchset was accepted upstream, more information can be found on the linux-wireless list: https://www.spinics.net/lists/linux-wireless/msg155474.html Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Diffstat (limited to 'package/kernel/mac80211/patches/328-ath9k-parse-the-device-configuration-from-an-OF-node.patch')
-rw-r--r--package/kernel/mac80211/patches/328-ath9k-parse-the-device-configuration-from-an-OF-node.patch85
1 files changed, 85 insertions, 0 deletions
diff --git a/package/kernel/mac80211/patches/328-ath9k-parse-the-device-configuration-from-an-OF-node.patch b/package/kernel/mac80211/patches/328-ath9k-parse-the-device-configuration-from-an-OF-node.patch
new file mode 100644
index 0000000000..b260858d45
--- /dev/null
+++ b/package/kernel/mac80211/patches/328-ath9k-parse-the-device-configuration-from-an-OF-node.patch
@@ -0,0 +1,85 @@
+From cea03be5a848823cb8052e2e7b93cb2249d5f60c Mon Sep 17 00:00:00 2001
+From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+Date: Sun, 16 Oct 2016 22:59:07 +0200
+Subject: [PATCH 3/3] ath9k: parse the device configuration from an OF node
+
+This allows setting the MAC address and specifying that the firmware
+will be requested from userspace (because there might not be a hardware
+EEPROM connected to the chip) for ath9k based PCI devices using
+the device tree.
+
+There is some out-of-tree code to "convert devicetree to
+ath9k_platform_data" (for example in OpenWrt and LEDE) which becomes
+obsolete with this patch.
+
+Signed-off-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
+Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
+---
+ drivers/net/wireless/ath/ath9k/init.c | 42 +++++++++++++++++++++++++++++++++++
+ 1 file changed, 42 insertions(+)
+
+--- a/drivers/net/wireless/ath/ath9k/init.c
++++ b/drivers/net/wireless/ath/ath9k/init.c
+@@ -20,6 +20,8 @@
+ #include <linux/slab.h>
+ #include <linux/ath9k_platform.h>
+ #include <linux/module.h>
++#include <linux/of.h>
++#include <linux/of_net.h>
+ #include <linux/relay.h>
+ #include <net/ieee80211_radiotap.h>
+
+@@ -554,6 +556,42 @@ static int ath9k_init_platform(struct at
+ return 0;
+ }
+
++static int ath9k_of_init(struct ath_softc *sc)
++{
++ struct device_node *np = sc->dev->of_node;
++ struct ath_hw *ah = sc->sc_ah;
++ struct ath_common *common = ath9k_hw_common(ah);
++ enum ath_bus_type bus_type = common->bus_ops->ath_bus_type;
++ const char *mac;
++ char eeprom_name[100];
++ int ret;
++
++ if (!of_device_is_available(np))
++ return 0;
++
++ ath_dbg(common, CONFIG, "parsing configuration from OF node\n");
++
++ if (of_property_read_bool(np, "qca,no-eeprom")) {
++ /* ath9k-eeprom-<bus>-<id>.bin */
++ scnprintf(eeprom_name, sizeof(eeprom_name),
++ "ath9k-eeprom-%s-%s.bin",
++ ath_bus_type_to_string(bus_type), dev_name(ah->dev));
++
++ ret = ath9k_eeprom_request(sc, eeprom_name);
++ if (ret)
++ return ret;
++ }
++
++ mac = of_get_mac_address(np);
++ if (mac)
++ ether_addr_copy(common->macaddr, mac);
++
++ ah->ah_flags &= ~AH_USE_EEPROM;
++ ah->ah_flags |= AH_NO_EEP_SWAP;
++
++ return 0;
++}
++
+ static int ath9k_init_softc(u16 devid, struct ath_softc *sc,
+ const struct ath_bus_ops *bus_ops)
+ {
+@@ -610,6 +648,10 @@ static int ath9k_init_softc(u16 devid, s
+ if (ret)
+ return ret;
+
++ ret = ath9k_of_init(sc);
++ if (ret)
++ return ret;
++
+ if (ath9k_led_active_high != -1)
+ ah->config.led_active_high = ath9k_led_active_high == 1;
+