Return-path: Received: from out1.smtp.messagingengine.com ([66.111.4.25]:52108 "EHLO out1.smtp.messagingengine.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751823AbYIQUIG (ORCPT ); Wed, 17 Sep 2008 16:08:06 -0400 From: Henrique de Moraes Holschuh To: John Linville Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org, Matthew Garrett , Larry Finger , Michael Buesch , Henrique de Moraes Holschuh , Ivo van Doorn Subject: [PATCH] rfkill: update LEDs for all state changes Date: Wed, 17 Sep 2008 17:07:56 -0300 Message-Id: <1221682077-21170-1-git-send-email-hmh@hmh.eng.br> (sfid-20080917_220811_882622_EA9D937A) In-Reply-To: <20080917023334.GA1187@khazad-dum.debian.net> References: <20080917023334.GA1187@khazad-dum.debian.net> Sender: linux-wireless-owner@vger.kernel.org List-ID: The LED state was not being updated by rfkill_force_state(), which will cause regressions in wireless drivers that had old-style rfkill support and are updated to use rfkill_force_state(). The LED state was not being updated when a change was detected through the rfkill->get_state() hook, either. Move the LED trigger update calls into notify_rfkill_state_change(), where it should have been in the first place. This takes care of both issues. Signed-off-by: Henrique de Moraes Holschuh Cc: Ivo van Doorn --- net/rfkill/rfkill.c | 5 ++--- 1 files changed, 2 insertions(+), 3 deletions(-) John, this one is quite likely something that should be sent for merge in mainline BEFORE 2.6.27 is released. I am NOT sure it fixes regressions, that depends on whether the drivers using rfkill that are in 2.6.27 had working LED support before rfkill support was added to them. Unfortunately, it cannot fix the b43 regression by itself. diff --git a/net/rfkill/rfkill.c b/net/rfkill/rfkill.c index ea0dc04..f949a48 100644 --- a/net/rfkill/rfkill.c +++ b/net/rfkill/rfkill.c @@ -125,6 +125,7 @@ static void rfkill_led_trigger_activate(struct led_classdev *led) static void notify_rfkill_state_change(struct rfkill *rfkill) { + rfkill_led_trigger(rfkill, rfkill->state); blocking_notifier_call_chain(&rfkill_notifier_list, RFKILL_STATE_CHANGED, rfkill); @@ -217,10 +218,8 @@ static int rfkill_toggle_radio(struct rfkill *rfkill, rfkill->state = state; } - if (force || rfkill->state != oldstate) { - rfkill_led_trigger(rfkill, rfkill->state); + if (force || rfkill->state != oldstate) notify_rfkill_state_change(rfkill); - } return retval; } -- 1.5.6.5