Browse Source

ath9k: fix unloading the module

Registering a GPIO chip with the ath9k device as parent prevents unload,
because the gpiochip core increases the module use count.
Unfortunately, the only way to avoid this at the moment seems to be to
register the GPIO chip without a parent device

Signed-off-by: Felix Fietkau <[email protected]>
Felix Fietkau 7 years ago
parent
commit
ccab68f2d3

+ 6 - 11
package/kernel/mac80211/patches/548-ath9k_enable_gpio_chip.patch

@@ -45,7 +45,7 @@ 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 @@
+@@ -16,13 +16,130 @@
  
  #include "ath9k.h"
  #include <linux/ath9k_platform.h>
@@ -126,11 +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));
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,5,0)
-+	gc->gchip.parent = sc->dev;
-+#else
-+	gc->gchip.dev = sc->dev;
-+#endif
++
 +	gc->gchip.label = gc->label;
 +	gc->gchip.base = -1;	/* determine base automatically */
 +	gc->gchip.ngpio = ah->caps.num_gpio_pins;
@@ -145,7 +141,6 @@ Signed-off-by: Felix Fietkau <[email protected]>
 +		return;
 +	}
 +
-+	gc->gchip.owner = NULL;
 +	sc->gpiochip = gc;
 +}
 +
@@ -183,7 +178,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
+@@ -80,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 +191,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	return 0;
  }
  
-@@ -136,17 +264,24 @@ void ath_deinit_leds(struct ath_softc *s
+@@ -136,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);
@@ -221,7 +216,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	char led_name[32];
  	const char *trigger;
  	int i;
-@@ -156,6 +291,15 @@ void ath_init_leds(struct ath_softc *sc)
+@@ -156,6 +286,15 @@ void ath_init_leds(struct ath_softc *sc)
  	if (AR_SREV_9100(sc->sc_ah))
  		return;
  
@@ -237,7 +232,7 @@ 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)
+@@ -180,6 +319,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);
  }

+ 4 - 4
package/kernel/mac80211/patches/549-ath9k_enable_gpio_buttons.patch

@@ -29,7 +29,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  
  #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;
  }
  
@@ -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,7 +112,7 @@ 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;
  
@@ -120,7 +120,7 @@ Signed-off-by: Felix Fietkau <[email protected]>
  	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)
+@@ -296,6 +368,7 @@ void ath_init_leds(struct ath_softc *sc)
  	}
  
  	ath_fill_led_pin(sc);