|
@@ -580,12 +580,22 @@ static int rfkill_suspend(struct device *dev, pm_message_t state)
|
|
|
static int rfkill_resume(struct device *dev)
|
|
|
{
|
|
|
struct rfkill *rfkill = to_rfkill(dev);
|
|
|
+ enum rfkill_state newstate;
|
|
|
|
|
|
if (dev->power.power_state.event != PM_EVENT_ON) {
|
|
|
mutex_lock(&rfkill->mutex);
|
|
|
|
|
|
dev->power.power_state.event = PM_EVENT_ON;
|
|
|
|
|
|
+ /*
|
|
|
+ * rfkill->state could have been modified before we got
|
|
|
+ * called, and won't be updated by rfkill_toggle_radio()
|
|
|
+ * in force mode. Sync it FIRST.
|
|
|
+ */
|
|
|
+ if (rfkill->get_state &&
|
|
|
+ !rfkill->get_state(rfkill->data, &newstate))
|
|
|
+ rfkill->state = newstate;
|
|
|
+
|
|
|
/*
|
|
|
* If we are under EPO, kick transmitter offline,
|
|
|
* otherwise restore to pre-suspend state.
|