Search Linux Wireless

Re: How does rfkill work?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Johannes Berg wrote:

> Ah, yes. Using a shorter name is probably a good idea then. I don't
> think changing that define makes too much sense.
> 
> On my test with iwlwifi the rfkill LED trigger is definitely called -- I
> cannot pinpoint why it shouldn't be on your setup. :(
> 
> Actually. Are you positive it works without my patch? The confusing this
> is that this code never seems to call led_trigger_event() outside of
> rfkill_led_trigger_activate() which is only called once... Can you try
> this patch please?

No, it hasn't worked for some time, but until you rationalized the rfkill code,
I didn't want to mess with it. :)

>  net/rfkill/core.c |   22 +++++++++++++++++++---
>  1 file changed, 19 insertions(+), 3 deletions(-)
> 
> --- wireless-testing.orig/net/rfkill/core.c	2009-04-02 22:47:05.000000000 +0200
> +++ wireless-testing/net/rfkill/core.c	2009-04-02 22:49:53.000000000 +0200
> @@ -83,12 +83,10 @@ static bool rfkill_epo_lock_active;
>  
>  
>  #ifdef CONFIG_RFKILL_LEDS
> -static void rfkill_led_trigger_activate(struct led_classdev *led)
> +static void rfkill_led_trigger_event(struct rfkill *rfkill)
>  {
> -	struct rfkill *rfkill;
>  	struct led_trigger *trigger;
>  
> -	rfkill = container_of(led->trigger, struct rfkill, led_trigger);
>  	trigger = &rfkill->led_trigger;
>  
>  	if (rfkill->blocked)
> @@ -97,6 +95,15 @@ static void rfkill_led_trigger_activate(
>  		led_trigger_event(trigger, LED_FULL);
>  }
>  
> +static void rfkill_led_trigger_activate(struct led_classdev *led)
> +{
> +	struct rfkill *rfkill;
> +
> +	rfkill = container_of(led->trigger, struct rfkill, led_trigger);
> +
> +	rfkill_led_trigger_event(rfkill);
> +}
> +
>  const char *rfkill_get_led_trigger_name(struct rfkill *rfkill)
>  {
>  	return rfkill->led_trigger.name;
> @@ -124,6 +131,10 @@ static void rfkill_led_trigger_unregiste
>  	led_trigger_unregister(&rfkill->led_trigger);
>  }
>  #else
> +static void rfkill_led_trigger_event(struct rfkill *rfkill)
> +{
> +}
> +
>  static inline int rfkill_led_trigger_register(struct rfkill *rfkill)
>  {
>  	return 0;
> @@ -158,6 +169,8 @@ static bool __rfkill_set_hw_state(struct
>  
>  	*change = prev != blocked;
>  
> +	rfkill_led_trigger_event(rfkill);
> +
>  	return blocked || !!test_bit(RFKILL_BLOCK_SW_BIT, &rfkill->blocked);
>  }
>  
> @@ -214,6 +227,7 @@ static void rfkill_set_block(struct rfki
>  			clear_bit(RFKILL_BLOCK_SW_BIT, &rfkill->blocked);
>  	}
>  
> +	rfkill_led_trigger_event(rfkill);
>  	rfkill_uevent(rfkill);
>  }
>  
> @@ -400,6 +414,8 @@ bool rfkill_set_sw_state(struct rfkill *
>  	if (prev != blocked && !hwblock)
>  		schedule_work(&rfkill->uevent_work);
>  
> +	rfkill_led_trigger_event(rfkill);
> +
>  	return blocked || hwblock;
>  }
>  EXPORT_SYMBOL(rfkill_set_sw_state);

This patch does the trick. Not only is the set brightness callback routine being
called, but the LED is going on/off as expected. It even ends up in the off
state when the module is loaded with the switch off. It toggles on/off in that
case, but I'm not going to complain as long as it ends up off. That part broke
first, then everything broke later..

Thanks for the help.


Larry
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux