ath9k: OF: qca,disable-(2|5)ghz => ieee80211-freq-limit

OpenWrt maintains two special out-of-tree DT properties:
"qca,disable-5ghz" and "qca,disable-2ghz". These are implemented
in a mac80211 ath9k patch "550-ath9k-disable-bands-via-dt.patch".

With the things being what they are, now might be a good
point to switch the devices to the generic and upstream
"ieee80211-freq-limit" property. This property is much
broader and works differently. Instead of disabling the
drivers logic which would add the affected band and
channels. It now disables all channels which are not
within the specified frequency range.

Reviewed-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com> # HH5A
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
This commit is contained in:
Christian Lamparter 2021-10-09 20:51:21 +02:00
parent 5287defa1f
commit 4c8dd973ef
9 changed files with 38 additions and 30 deletions

View File

@ -0,0 +1,29 @@
From 03469e79fee9e8e908dae3bd1a80bcd9a66f2a88 Mon Sep 17 00:00:00 2001
From: Christian Lamparter <chunkeey@gmail.com>
Date: Mon, 11 Oct 2021 18:18:00 +0300
Subject: ath9k: support DT ieee80211-freq-limit property to limit channels
The common DT property can be used to limit the available channels
but ath9k has to manually call wiphy_read_of_freq_limits().
I would have put this into ath9k_of_init(). But it didn't work there.
The reason is that in ath9k_of_init() the channels and bands are not yet
registered in the wiphy struct. So there isn't any channel to flag as
disabled.
Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20211009212847.1781986-1-chunkeey@gmail.com
---
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -1094,6 +1094,8 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc,
ARRAY_SIZE(ath9k_tpt_blink));
#endif
+ wiphy_read_of_freq_limits(hw->wiphy);
+
/* Register with mac80211 */
error = ieee80211_register_hw(hw);
if (error)

View File

@ -1,15 +0,0 @@
--- a/drivers/net/wireless/ath/ath9k/init.c
+++ b/drivers/net/wireless/ath/ath9k/init.c
@@ -625,6 +625,12 @@ static int ath9k_of_init(struct ath_soft
ath_dbg(common, CONFIG, "parsing configuration from OF node\n");
+ if (of_property_read_bool(np, "qca,disable-2ghz"))
+ ah->disable_2ghz = true;
+
+ if (of_property_read_bool(np, "qca,disable-5ghz"))
+ ah->disable_5ghz = true;
+
if (of_property_read_bool(np, "qca,no-eeprom")) {
/* ath9k-eeprom-<bus>-<id>.bin */
scnprintf(eeprom_name, sizeof(eeprom_name),

View File

@ -16,7 +16,7 @@
static const struct platform_device_id ath9k_platform_id_table[] = { static const struct platform_device_id ath9k_platform_id_table[] = {
{ {
@@ -69,6 +77,242 @@ static const struct ath_bus_ops ath_ahb_ @@ -69,6 +77,236 @@ static const struct ath_bus_ops ath_ahb_
.eeprom_read = ath_ahb_eeprom_read, .eeprom_read = ath_ahb_eeprom_read,
}; };
@ -218,12 +218,6 @@
+ else + else
+ pdata->led_pin = -1; + pdata->led_pin = -1;
+ +
+ if (of_property_read_bool(pdev->dev.of_node, "qca,disable-2ghz"))
+ pdata->disable_2ghz = true;
+
+ if (of_property_read_bool(pdev->dev.of_node, "qca,disable-5ghz"))
+ pdata->disable_5ghz = true;
+
+ if (of_property_read_bool(pdev->dev.of_node, "qca,tx-gain-buffalo")) + if (of_property_read_bool(pdev->dev.of_node, "qca,tx-gain-buffalo"))
+ pdata->tx_gain_buffalo = true; + pdata->tx_gain_buffalo = true;
+ +

View File

@ -78,7 +78,7 @@
&wmac { &wmac {
status = "okay"; status = "okay";
qca,disable-5ghz; ieee80211-freq-limit = <2402000 2482000>;
mtd-cal-data = <&art 0x1000>; mtd-cal-data = <&art 0x1000>;
}; };

View File

@ -207,7 +207,7 @@
compatible = "pci168c,0030"; compatible = "pci168c,0030";
reg = <0x0000 0 0 0 0>; reg = <0x0000 0 0 0 0>;
qca,no-eeprom; qca,no-eeprom;
qca,disable-2ghz; ieee80211-freq-limit = <4900000 5990000>;
#gpio-cells = <2>; #gpio-cells = <2>;
gpio-controller; gpio-controller;
}; };

View File

@ -69,7 +69,7 @@
ath9k: wifi@0,0,0 { ath9k: wifi@0,0,0 {
compatible = "pci168c,0030"; compatible = "pci168c,0030";
reg = <0x0 0 0 0 0>; reg = <0x0 0 0 0 0>;
qca,disable-5ghz; ieee80211-freq-limit = <2402000 2482000>;
qca,no-eeprom; qca,no-eeprom;
#gpio-cells = <2>; #gpio-cells = <2>;
gpio-controller; gpio-controller;
@ -79,7 +79,7 @@
&wmac { &wmac {
status = "okay"; status = "okay";
qca,disable-2ghz; ieee80211-freq-limit = <4900000 5990000>;
mtd-cal-data = <&art 0x1000>; mtd-cal-data = <&art 0x1000>;
}; };

View File

@ -123,7 +123,7 @@
mac-address-increment = <(-2)>; mac-address-increment = <(-2)>;
mtd-cal-data = <&art 0x5000>; mtd-cal-data = <&art 0x5000>;
qca,no-eeprom; qca,no-eeprom;
qca,disable-5ghz; ieee80211-freq-limit = <2402000 2482000>;
#gpio-cells = <2>; #gpio-cells = <2>;
gpio-controller; gpio-controller;
}; };
@ -132,7 +132,7 @@
&wmac { &wmac {
status = "okay"; status = "okay";
qca,disable-2ghz; ieee80211-freq-limit = <4900000 5990000>;
mtd-cal-data = <&art 0x1000>; mtd-cal-data = <&art 0x1000>;
nvmem-cells = <&macaddr_art_0>; nvmem-cells = <&macaddr_art_0>;
nvmem-cell-names = "mac-address"; nvmem-cell-names = "mac-address";

View File

@ -256,7 +256,7 @@
compatible = "pci168c,002d"; compatible = "pci168c,002d";
reg = <0x7000 0 0 0 0>; reg = <0x7000 0 0 0 0>;
qca,no-eeprom; /* load from ath9k-eeprom-pci-0000:00:0e.0.bin */ qca,no-eeprom; /* load from ath9k-eeprom-pci-0000:00:0e.0.bin */
qca,disable-5ghz; ieee80211-freq-limit = <2402000 2482000>;
}; };
}; };

View File

@ -203,7 +203,7 @@
#gpio-cells = <2>; #gpio-cells = <2>;
gpio-controller; gpio-controller;
qca,no-eeprom; qca,no-eeprom;
qca,disable-5ghz; ieee80211-freq-limit = <2402000 2482000>;
nvmem-cells = <&macaddr_ath9k_cal_f100>; nvmem-cells = <&macaddr_ath9k_cal_f100>;
nvmem-cell-names = "mac-address"; nvmem-cell-names = "mac-address";
mac-address-increment = <2>; mac-address-increment = <2>;