forked from openwrt/openwrt
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
mac80211: remove ath9k_platform_data
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
Showing
8 changed files
with
85 additions
and
130 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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); | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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 | ||
|
@@ -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; | ||
|
@@ -143,9 +141,7 @@ Signed-off-by: Felix Fietkau <[email protected]> | |
+ return; | ||
+ } | ||
+ | ||
+#ifdef CONFIG_OF | ||
+ gc->gchip.owner = NULL; | ||
+#endif | ||
+ sc->gpiochip = gc; | ||
+} | ||
+ | ||
|
@@ -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); | ||
|
||
|
@@ -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); | ||
|
@@ -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); | ||
|
@@ -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); | ||
} | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -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; | ||
} | ||
|
||
|
@@ -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; | ||
|
@@ -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, | ||
|
@@ -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 | ||
{ | ||
} | ||
|
||
|
@@ -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++) { |
Oops, something went wrong.