diff options
Diffstat (limited to 'net/rfkill/core.c')
| -rw-r--r-- | net/rfkill/core.c | 22 |
1 files changed, 21 insertions, 1 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 |
