diff options
-rw-r--r-- | net/rfkill/rfkill.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/net/rfkill/rfkill.c b/net/rfkill/rfkill.c index 5ad411d3e8f8..051d2c9ea66b 100644 --- a/net/rfkill/rfkill.c +++ b/net/rfkill/rfkill.c | |||
@@ -580,6 +580,7 @@ static int rfkill_suspend(struct device *dev, pm_message_t state) | |||
580 | static int rfkill_resume(struct device *dev) | 580 | static int rfkill_resume(struct device *dev) |
581 | { | 581 | { |
582 | struct rfkill *rfkill = to_rfkill(dev); | 582 | struct rfkill *rfkill = to_rfkill(dev); |
583 | enum rfkill_state newstate; | ||
583 | 584 | ||
584 | if (dev->power.power_state.event != PM_EVENT_ON) { | 585 | if (dev->power.power_state.event != PM_EVENT_ON) { |
585 | mutex_lock(&rfkill->mutex); | 586 | mutex_lock(&rfkill->mutex); |
@@ -587,6 +588,15 @@ static int rfkill_resume(struct device *dev) | |||
587 | dev->power.power_state.event = PM_EVENT_ON; | 588 | dev->power.power_state.event = PM_EVENT_ON; |
588 | 589 | ||
589 | /* | 590 | /* |
591 | * rfkill->state could have been modified before we got | ||
592 | * called, and won't be updated by rfkill_toggle_radio() | ||
593 | * in force mode. Sync it FIRST. | ||
594 | */ | ||
595 | if (rfkill->get_state && | ||
596 | !rfkill->get_state(rfkill->data, &newstate)) | ||
597 | rfkill->state = newstate; | ||
598 | |||
599 | /* | ||
590 | * If we are under EPO, kick transmitter offline, | 600 | * If we are under EPO, kick transmitter offline, |
591 | * otherwise restore to pre-suspend state. | 601 | * otherwise restore to pre-suspend state. |
592 | * | 602 | * |