diff options
author | Jiri Kosina <jkosina@suse.cz> | 2012-10-28 14:28:52 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2012-10-28 14:29:19 -0400 |
commit | 3bd7bf1f0fe14f591c089ae61bbfa9bd356f178a (patch) | |
tree | 0058693cc9e70b7461dae551f8a19aff2efd13ca /net/rfkill | |
parent | f16f84937d769c893492160b1a8c3672e3992beb (diff) | |
parent | e657e078d3dfa9f96976db7a2b5fd7d7c9f1f1a6 (diff) |
Merge branch 'master' into for-next
Sync up with Linus' tree to be able to apply Cesar's patch
against newer version of the code.
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'net/rfkill')
-rw-r--r-- | net/rfkill/core.c | 22 | ||||
-rw-r--r-- | net/rfkill/input.c | 3 |
2 files changed, 22 insertions, 3 deletions
diff --git a/net/rfkill/core.c b/net/rfkill/core.c index 61c112c890a9..9b9be5279f5d 100644 --- a/net/rfkill/core.c +++ b/net/rfkill/core.c | |||
@@ -150,6 +150,20 @@ static void rfkill_led_trigger_activate(struct led_classdev *led) | |||
150 | rfkill_led_trigger_event(rfkill); | 150 | rfkill_led_trigger_event(rfkill); |
151 | } | 151 | } |
152 | 152 | ||
153 | const char *rfkill_get_led_trigger_name(struct rfkill *rfkill) | ||
154 | { | ||
155 | return rfkill->led_trigger.name; | ||
156 | } | ||
157 | EXPORT_SYMBOL(rfkill_get_led_trigger_name); | ||
158 | |||
159 | void rfkill_set_led_trigger_name(struct rfkill *rfkill, const char *name) | ||
160 | { | ||
161 | BUG_ON(!rfkill); | ||
162 | |||
163 | rfkill->ledtrigname = name; | ||
164 | } | ||
165 | EXPORT_SYMBOL(rfkill_set_led_trigger_name); | ||
166 | |||
153 | static int rfkill_led_trigger_register(struct rfkill *rfkill) | 167 | static int rfkill_led_trigger_register(struct rfkill *rfkill) |
154 | { | 168 | { |
155 | rfkill->led_trigger.name = rfkill->ledtrigname | 169 | rfkill->led_trigger.name = rfkill->ledtrigname |
@@ -256,6 +270,7 @@ static bool __rfkill_set_hw_state(struct rfkill *rfkill, | |||
256 | static void rfkill_set_block(struct rfkill *rfkill, bool blocked) | 270 | static void rfkill_set_block(struct rfkill *rfkill, bool blocked) |
257 | { | 271 | { |
258 | unsigned long flags; | 272 | unsigned long flags; |
273 | bool prev, curr; | ||
259 | int err; | 274 | int err; |
260 | 275 | ||
261 | if (unlikely(rfkill->dev.power.power_state.event & PM_EVENT_SLEEP)) | 276 | if (unlikely(rfkill->dev.power.power_state.event & PM_EVENT_SLEEP)) |
@@ -270,6 +285,8 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked) | |||
270 | rfkill->ops->query(rfkill, rfkill->data); | 285 | rfkill->ops->query(rfkill, rfkill->data); |
271 | 286 | ||
272 | spin_lock_irqsave(&rfkill->lock, flags); | 287 | spin_lock_irqsave(&rfkill->lock, flags); |
288 | prev = rfkill->state & RFKILL_BLOCK_SW; | ||
289 | |||
273 | if (rfkill->state & RFKILL_BLOCK_SW) | 290 | if (rfkill->state & RFKILL_BLOCK_SW) |
274 | rfkill->state |= RFKILL_BLOCK_SW_PREV; | 291 | rfkill->state |= RFKILL_BLOCK_SW_PREV; |
275 | else | 292 | else |
@@ -299,10 +316,13 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked) | |||
299 | } | 316 | } |
300 | rfkill->state &= ~RFKILL_BLOCK_SW_SETCALL; | 317 | rfkill->state &= ~RFKILL_BLOCK_SW_SETCALL; |
301 | rfkill->state &= ~RFKILL_BLOCK_SW_PREV; | 318 | rfkill->state &= ~RFKILL_BLOCK_SW_PREV; |
319 | curr = rfkill->state & RFKILL_BLOCK_SW; | ||
302 | spin_unlock_irqrestore(&rfkill->lock, flags); | 320 | spin_unlock_irqrestore(&rfkill->lock, flags); |
303 | 321 | ||
304 | rfkill_led_trigger_event(rfkill); | 322 | rfkill_led_trigger_event(rfkill); |
305 | rfkill_event(rfkill); | 323 | |
324 | if (prev != curr) | ||
325 | rfkill_event(rfkill); | ||
306 | } | 326 | } |
307 | 327 | ||
308 | #ifdef CONFIG_RFKILL_INPUT | 328 | #ifdef CONFIG_RFKILL_INPUT |
diff --git a/net/rfkill/input.c b/net/rfkill/input.c index 24c55c53e6a2..c9d931e7ffec 100644 --- a/net/rfkill/input.c +++ b/net/rfkill/input.c | |||
@@ -164,8 +164,7 @@ static void rfkill_schedule_global_op(enum rfkill_sched_op op) | |||
164 | rfkill_op_pending = true; | 164 | rfkill_op_pending = true; |
165 | if (op == RFKILL_GLOBAL_OP_EPO && !rfkill_is_epo_lock_active()) { | 165 | if (op == RFKILL_GLOBAL_OP_EPO && !rfkill_is_epo_lock_active()) { |
166 | /* bypass the limiter for EPO */ | 166 | /* bypass the limiter for EPO */ |
167 | cancel_delayed_work(&rfkill_op_work); | 167 | mod_delayed_work(system_wq, &rfkill_op_work, 0); |
168 | schedule_delayed_work(&rfkill_op_work, 0); | ||
169 | rfkill_last_scheduled = jiffies; | 168 | rfkill_last_scheduled = jiffies; |
170 | } else | 169 | } else |
171 | rfkill_schedule_ratelimited(); | 170 | rfkill_schedule_ratelimited(); |