On Wed, 2010-04-07 at 21:58 +0300, Dmytro Milinevskyy wrote:
> Here is the patch to disable ath5k leds support on build stage.
> However if the leds support was enabled do not force selection of 802.11 leds
> layer.
The idea is good, but the implementation could be improved.
There are too many preprocessor conditionals in your patch.
> +#ifdef CONFIG_ATH5K_LEDS
> /*
> * These match net80211 definitions (not used in
> * mac80211).
> @@ -939,11 +940,7 @@ enum ath5k_power_mode {
> #define AR5K_LED_AUTH 2 /*IEEE80211_S_AUTH*/
> #define AR5K_LED_ASSOC 3 /*IEEE80211_S_ASSOC*/
> #define AR5K_LED_RUN 4 /*IEEE80211_S_RUN*/
It should be OK to leave the constants defined even if they are not
used.
> +#ifdef CONFIG_ATH5K_LEDS
> /* LED functions */
> extern int ath5k_init_leds(struct ath5k_softc *sc);
> extern void ath5k_led_enable(struct ath5k_softc *sc);
> extern void ath5k_led_off(struct ath5k_softc *sc);
> extern void ath5k_unregister_leds(struct ath5k_softc *sc);
> +#endif
You could add inline functions for the case when CONFIG_ATH5K_LEDS is
not defined. That would avoid may conditionals in the code.
> /* GPIO Functions */
> +#ifdef CONFIG_ATH5K_LEDS
> extern void ath5k_hw_set_ledstate(struct ath5k_hw *ah, unsigned int state);
> +#endif
The same comment applies.
Also, there is nothing wrong with having an external declaration that is
not used in some particular configuration.
> +#ifdef CONFIG_ATH5K_LEDS
> /* turn on HW LEDs */
> ath5k_hw_set_ledstate(ah, AR5K_LED_INIT);
> +#endif
This is avoidable by having an inline ath5k_hw_set_ledstate() that does
nothing.
> +#ifdef CONFIG_ATH5K_LEDS
> struct ieee80211_hw *hw = pci_get_drvdata(to_pci_dev(dev));
> struct ath5k_softc *sc = hw->priv;
>
> ath5k_led_off(sc);
> +#endif
Even this is avoidable if ath5k_led_off() does nothing. gcc should be
smart enough to optimize out unneeded function calls.
> +#ifdef CONFIG_ATH5K_LEDS
> /*
> * State for LED triggers
> */
> struct ath5k_led
> {
> +#ifdef CONFIG_LEDS_CLASS
I'm not sure this complexity is needed. Are you going to support LEDs
if CONFIG_LEDS_CLASS is disabled?
> +#ifdef CONFIG_ATH5K_LEDS
> unsigned int led_pin, /* GPIO pin for driving LED */
> led_on; /* pin setting for LED on */
> +#endif
>
> struct tasklet_struct restq; /* reset tasklet */
>
> @@ -164,7 +172,9 @@ struct ath5k_softc {
> spinlock_t rxbuflock;
> u32 *rxlink; /* link ptr in last RX desc */
> struct tasklet_struct rxtq; /* rx intr tasklet */
> +#ifdef CONFIG_ATH5K_LEDS
> struct ath5k_led rx_led; /* rx led */
> +#endif
You may want to group those fields together to make the code more
readable.
> --- a/drivers/net/wireless/ath/ath5k/led.c
> +++ b/drivers/net/wireless/ath/ath5k/led.c
I wonder if you could omit led.c completely in the Makefile. If there
are some parts of led.c that are needed without CONFIG_ATH5K_LEDS, maybe
they belong elsewhere?
--
Regards,
Pavel Roskin
_______________________________________________
ath5k-devel mailing list
[email protected]
https://lists.ath5k.org/mailman/listinfo/ath5k-devel