|
@@ -270,6 +270,7 @@ static bool __rfkill_set_hw_state(struct rfkill *rfkill,
|
|
|
static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
|
|
|
{
|
|
|
unsigned long flags;
|
|
|
+ bool prev, curr;
|
|
|
int err;
|
|
|
|
|
|
if (unlikely(rfkill->dev.power.power_state.event & PM_EVENT_SLEEP))
|
|
@@ -284,6 +285,8 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
|
|
|
rfkill->ops->query(rfkill, rfkill->data);
|
|
|
|
|
|
spin_lock_irqsave(&rfkill->lock, flags);
|
|
|
+ prev = rfkill->state & RFKILL_BLOCK_SW;
|
|
|
+
|
|
|
if (rfkill->state & RFKILL_BLOCK_SW)
|
|
|
rfkill->state |= RFKILL_BLOCK_SW_PREV;
|
|
|
else
|
|
@@ -313,10 +316,13 @@ static void rfkill_set_block(struct rfkill *rfkill, bool blocked)
|
|
|
}
|
|
|
rfkill->state &= ~RFKILL_BLOCK_SW_SETCALL;
|
|
|
rfkill->state &= ~RFKILL_BLOCK_SW_PREV;
|
|
|
+ curr = rfkill->state & RFKILL_BLOCK_SW;
|
|
|
spin_unlock_irqrestore(&rfkill->lock, flags);
|
|
|
|
|
|
rfkill_led_trigger_event(rfkill);
|
|
|
- rfkill_event(rfkill);
|
|
|
+
|
|
|
+ if (prev != curr)
|
|
|
+ rfkill_event(rfkill);
|
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_RFKILL_INPUT
|