Skip to content

Commit

Permalink
mac80211: remove ath9k_platform_data
Browse files Browse the repository at this point in the history
This goes away in kernel 6.12 upstream.

Get ahead of the curve by fixing all the local patches as well.

Get rid of CONFIG_OF. It's needed now.

Refreshed all patches.

Signed-off-by: Rosen Penev <[email protected]>
Link: openwrt#16635
Signed-off-by: Robert Marko <[email protected]>
  • Loading branch information
neheb authored and robimarko committed Dec 27, 2024
1 parent c846f48 commit fdc2c6a
Show file tree
Hide file tree
Showing 8 changed files with 85 additions and 130 deletions.
2 changes: 1 addition & 1 deletion package/kernel/mac80211/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=mac80211

PKG_VERSION:=6.12.6
PKG_RELEASE:=1
PKG_RELEASE:=2
PKG_LICENSE:=GPL-2.0-only
PKG_LICENSE_FILES:=COPYING

Expand Down
16 changes: 16 additions & 0 deletions package/kernel/mac80211/patches/ath9k/100-gpio-of.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
--- a/drivers/net/wireless/ath/ath9k/hw.h
+++ b/drivers/net/wireless/ath/ath9k/hw.h
@@ -976,6 +976,13 @@ struct ath_hw {
bool disable_2ghz;
bool disable_5ghz;

+ int num_leds;
+ const struct gpio_led *leds;
+
+ unsigned num_btns;
+ const struct gpio_keys_button *btns;
+ unsigned btn_poll_interval;
+
const struct firmware *eeprom_blob;
u16 *nvmem_blob; /* devres managed */
size_t nvmem_blob_len;
Original file line number Diff line number Diff line change
@@ -1,14 +1,6 @@
--- a/drivers/net/wireless/ath/ath9k/gpio.c
+++ b/drivers/net/wireless/ath/ath9k/gpio.c
@@ -15,6 +15,7 @@
*/

#include "ath9k.h"
+#include <linux/ath9k_platform.h>

/********************************/
/* LED functions */
@@ -108,6 +109,24 @@ int ath_create_gpio_led(struct ath_softc
@@ -108,6 +108,24 @@ int ath_create_gpio_led(struct ath_softc
return ret;
}

Expand All @@ -33,30 +25,30 @@
void ath_deinit_leds(struct ath_softc *sc)
{
struct ath_led *led;
@@ -124,8 +143,10 @@ void ath_deinit_leds(struct ath_softc *s
@@ -124,8 +142,10 @@ void ath_deinit_leds(struct ath_softc *s

void ath_init_leds(struct ath_softc *sc)
{
+ struct ath9k_platform_data *pdata = sc->dev->platform_data;
+ struct ath_hw *ah = sc->sc_ah;
char led_name[32];
const char *trigger;
+ int i;

INIT_LIST_HEAD(&sc->leds);

@@ -134,6 +155,17 @@ void ath_init_leds(struct ath_softc *sc)
@@ -134,6 +154,17 @@ void ath_init_leds(struct ath_softc *sc)

ath_fill_led_pin(sc);

+ if (pdata && pdata->leds && pdata->num_leds)
+ for (i = 0; i < pdata->num_leds; i++) {
+ if (pdata->leds[i].gpio == sc->sc_ah->led_pin)
+ sc->sc_ah->led_pin = -1;
+ if (ah->leds && ah->num_leds)
+ for (i = 0; i < ah->num_leds; i++) {
+ if (ah->leds[i].gpio == ah->led_pin)
+ ah->led_pin = -1;
+
+ ath_create_platform_led(sc, &pdata->leds[i]);
+ ath_create_platform_led(sc, &ah->leds[i]);
+ }
+
+ if (sc->sc_ah->led_pin < 0)
+ if (ah->led_pin < 0)
+ return;
+
snprintf(led_name, sizeof(led_name), "ath9k-%s",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@
bool reset_power_on;
bool htc_reset_init;

@@ -1079,6 +1087,7 @@ void ath9k_hw_check_nav(struct ath_hw *a
@@ -1086,6 +1094,7 @@ void ath9k_hw_check_nav(struct ath_hw *a
bool ath9k_hw_check_alive(struct ath_hw *ah);

bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Signed-off-by: Michal Cieslakiewicz <[email protected]>

--- a/drivers/net/wireless/ath/ath9k/gpio.c
+++ b/drivers/net/wireless/ath/ath9k/gpio.c
@@ -74,8 +74,11 @@ static int ath_add_led(struct ath_softc
@@ -73,8 +73,11 @@ static int ath_add_led(struct ath_softc
ath9k_hw_gpio_request_out(sc->sc_ah, gpio->gpio, gpio->name,
AR_GPIO_OUTPUT_MUX_AS_OUTPUT);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ Signed-off-by: Felix Fietkau <[email protected]>
#ifdef CPTCFG_ATH9K_DEBUGFS
--- a/drivers/net/wireless/ath/ath9k/gpio.c
+++ b/drivers/net/wireless/ath/ath9k/gpio.c
@@ -16,13 +16,135 @@
@@ -15,13 +15,131 @@
*/

#include "ath9k.h"
#include <linux/ath9k_platform.h>
+#include <linux/gpio.h>
+
+#ifdef CPTCFG_MAC80211_LEDS
Expand Down Expand Up @@ -126,9 +126,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
+ gc->sc = sc;
+ snprintf(gc->label, sizeof(gc->label), "ath9k-%s",
+ wiphy_name(sc->hw->wiphy));
+#ifdef CONFIG_OF
+ gc->gchip.parent = sc->dev;
+#endif
+ gc->gchip.label = gc->label;
+ gc->gchip.base = -1; /* determine base automatically */
+ gc->gchip.ngpio = ah->caps.num_gpio_pins;
Expand All @@ -143,9 +141,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
+ return;
+ }
+
+#ifdef CONFIG_OF
+ gc->gchip.owner = NULL;
+#endif
+ sc->gpiochip = gc;
+}
+
Expand Down Expand Up @@ -183,7 +179,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
static void ath_fill_led_pin(struct ath_softc *sc)
{
struct ath_hw *ah = sc->sc_ah;
@@ -80,6 +202,12 @@ static int ath_add_led(struct ath_softc
@@ -79,6 +197,12 @@ static int ath_add_led(struct ath_softc
else
ath9k_hw_set_gpio(sc->sc_ah, gpio->gpio, gpio->active_low);

Expand All @@ -196,7 +192,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
return 0;
}

@@ -136,17 +264,24 @@ void ath_deinit_leds(struct ath_softc *s
@@ -135,17 +259,24 @@ void ath_deinit_leds(struct ath_softc *s

while (!list_empty(&sc->leds)) {
led = list_first_entry(&sc->leds, struct ath_led, list);
Expand All @@ -216,18 +212,15 @@ Signed-off-by: Felix Fietkau <[email protected]>

void ath_init_leds(struct ath_softc *sc)
{
struct ath9k_platform_data *pdata = sc->dev->platform_data;
struct ath_hw *ah = sc->sc_ah;
+ struct device_node *np = sc->dev->of_node;
char led_name[32];
const char *trigger;
int i;
@@ -156,6 +291,15 @@ void ath_init_leds(struct ath_softc *sc)
@@ -155,6 +286,12 @@ void ath_init_leds(struct ath_softc *sc)
if (AR_SREV_9100(sc->sc_ah))
return;

+ if (!np)
+ ath9k_register_gpio_chip(sc);
+
+ /* setup gpio controller only if requested and skip the led_pin setup */
+ if (of_property_read_bool(np, "gpio-controller")) {
+ ath9k_register_gpio_chip(sc);
Expand All @@ -236,8 +229,8 @@ Signed-off-by: Felix Fietkau <[email protected]>
+
ath_fill_led_pin(sc);

if (pdata && pdata->leds && pdata->num_leds)
@@ -180,6 +324,7 @@ void ath_init_leds(struct ath_softc *sc)
if (ah->leds && ah->num_leds)
@@ -179,6 +316,7 @@ void ath_init_leds(struct ath_softc *sc)
ath_create_gpio_led(sc, sc->sc_ah->led_pin, led_name, trigger,
!sc->sc_ah->config.led_active_high);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,16 @@ Signed-off-by: Felix Fietkau <[email protected]>

--- a/drivers/net/wireless/ath/ath9k/gpio.c
+++ b/drivers/net/wireless/ath/ath9k/gpio.c
@@ -17,6 +17,8 @@
@@ -16,6 +16,8 @@

#include "ath9k.h"
#include <linux/ath9k_platform.h>
#include <linux/gpio.h>
+#include <linux/platform_device.h>
+#include <linux/gpio_keys.h>

#ifdef CPTCFG_MAC80211_LEDS

@@ -129,6 +131,67 @@ static void ath9k_unregister_gpio_chip(s
@@ -124,6 +126,67 @@ static void ath9k_unregister_gpio_chip(s
sc->gpiochip = NULL;
}

Expand All @@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
+/* add GPIO buttons */
+static void ath9k_init_buttons(struct ath_softc *sc)
+{
+ struct ath9k_platform_data *pdata = sc->dev->platform_data;
+ struct ath_hw *ah = sc->sc_ah;
+ struct platform_device *pdev;
+ struct gpio_keys_platform_data gkpdata;
+ struct gpio_keys_button *bt;
Expand All @@ -49,28 +49,28 @@ Signed-off-by: Felix Fietkau <[email protected]>
+ if (!sc->gpiochip)
+ return;
+
+ if (!pdata || !pdata->btns || !pdata->num_btns)
+ if (!ah->btns || !ah->num_btns)
+ return;
+
+ bt = devm_kmemdup(sc->dev, pdata->btns,
+ pdata->num_btns * sizeof(struct gpio_keys_button),
+ bt = devm_kmemdup(sc->dev, ah->btns,
+ ah->num_btns * sizeof(struct gpio_keys_button),
+ GFP_KERNEL);
+ if (!bt)
+ return;
+
+ for (i = 0; i < pdata->num_btns; i++) {
+ if (pdata->btns[i].gpio == sc->sc_ah->led_pin)
+ for (i = 0; i < ah->num_btns; i++) {
+ if (ah->btns[i].gpio == sc->sc_ah->led_pin)
+ sc->sc_ah->led_pin = -1;
+
+ ath9k_hw_gpio_request_in(sc->sc_ah, pdata->btns[i].gpio,
+ ath9k_hw_gpio_request_in(sc->sc_ah, ah->btns[i].gpio,
+ "ath9k-gpio");
+ bt[i].gpio = sc->gpiochip->gchip.base + pdata->btns[i].gpio;
+ bt[i].gpio = sc->gpiochip->gchip.base + ah->btns[i].gpio;
+ }
+
+ memset(&gkpdata, 0, sizeof(struct gpio_keys_platform_data));
+ gkpdata.buttons = bt;
+ gkpdata.nbuttons = pdata->num_btns;
+ gkpdata.poll_interval = pdata->btn_poll_interval;
+ gkpdata.nbuttons = ah->num_btns;
+ gkpdata.poll_interval = ah->btn_poll_interval;
+
+ pdev = platform_device_register_data(sc->dev, "gpio-keys-polled",
+ PLATFORM_DEVID_AUTO, &gkpdata,
Expand All @@ -97,7 +97,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
#else /* CONFIG_GPIOLIB */

static inline void ath9k_register_gpio_chip(struct ath_softc *sc)
@@ -139,6 +202,14 @@ static inline void ath9k_unregister_gpio
@@ -134,6 +197,14 @@ static inline void ath9k_unregister_gpio
{
}

Expand All @@ -112,19 +112,19 @@ Signed-off-by: Felix Fietkau <[email protected]>
#endif /* CONFIG_GPIOLIB */

/********************************/
@@ -262,6 +333,7 @@ void ath_deinit_leds(struct ath_softc *s
@@ -257,6 +328,7 @@ void ath_deinit_leds(struct ath_softc *s
{
struct ath_led *led;

+ ath9k_deinit_buttons(sc);
while (!list_empty(&sc->leds)) {
led = list_first_entry(&sc->leds, struct ath_led, list);
#ifdef CONFIG_GPIOLIB
@@ -301,6 +373,7 @@ void ath_init_leds(struct ath_softc *sc)
@@ -293,6 +365,7 @@ void ath_init_leds(struct ath_softc *sc)
}

ath_fill_led_pin(sc);
+ ath9k_init_buttons(sc);

if (pdata && pdata->leds && pdata->num_leds)
for (i = 0; i < pdata->num_leds; i++) {
if (ah->leds && ah->num_leds)
for (i = 0; i < ah->num_leds; i++) {
Loading

0 comments on commit fdc2c6a

Please sign in to comment.