diff options
author | Martin Blumenstingl <martin.blumenstingl@googlemail.com> | 2016-11-26 01:01:12 +0100 |
---|---|---|
committer | Mathias Kresin <dev@kresin.me> | 2016-11-29 21:40:16 +0100 |
commit | 1847248fc1560d10cb49c88b343598c9cb673f38 (patch) | |
tree | b33dcd3f1425afb69cc565bd7625d51f27c86929 /package/kernel/mac80211/patches/328-ath9k-parse-the-device-configuration-from-an-OF-node.patch | |
parent | a15ea362d7279420d3b620412bbb007f9b02b77f (diff) | |
download | upstream-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.patch | 85 |
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; + |