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