Messages in this thread Patch in this message | | | Date | Sun, 5 Oct 2008 12:02:26 +0100 | From | Matthew Garrett <> | Subject | [PATCH v3] rfkill-input doesn't work until 5 minutes after boot |
| |
rfkill-input implements debounce as follows:
if (time_after(jiffies, task->last + msecs_to_jiffies(200))) {
However, task->last is initialised to 0 while jiffies starts at -300*HZ. Any input within 5 minutes of kernel start is therefore ignored. Fix by initialising task->last correctly.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
---
Document the requirement to initialise the struct.
diff --git a/net/rfkill/rfkill-input.c b/net/rfkill/rfkill-input.c index e5b6955..6c7baa0 100644 --- a/net/rfkill/rfkill-input.c +++ b/net/rfkill/rfkill-input.c @@ -103,6 +103,8 @@ static void rfkill_schedule_toggle(struct rfkill_task *task) .desired_state = RFKILL_STATE_UNBLOCKED, \ } +/* Remember to initialise these in rfkill_handler_init if you add any */ + static DEFINE_RFKILL_TASK(rfkill_wlan, RFKILL_TYPE_WLAN); static DEFINE_RFKILL_TASK(rfkill_bt, RFKILL_TYPE_BLUETOOTH); static DEFINE_RFKILL_TASK(rfkill_uwb, RFKILL_TYPE_UWB); @@ -255,6 +257,11 @@ static struct input_handler rfkill_handler = { static int __init rfkill_handler_init(void) { + rfkill_wlan.last = jiffies - HZ/5; + rfkill_bt.last = jiffies - HZ/5; + rfkill_uwb.last = jiffies - HZ/5; + rfkill_wimax.last = jiffies - HZ/5; + rfkill_wwan.last = jiffies - HZ/5; return input_register_handler(&rfkill_handler); } -- Matthew Garrett | mjg59@srcf.ucam.org
| |