Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 103143
b: refs/heads/master
c: 526324b
h: refs/heads/master
i:
  103141: 5d2ad62
  103139: e897c47
  103135: b90ac65
v: v3
  • Loading branch information
Henrique de Moraes Holschuh authored and John W. Linville committed Jun 26, 2008
1 parent 5c035e9 commit 13dfa40
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 477576a073699783abb53ae14993d5d41c66301d
refs/heads/master: 526324b61a9667ed9a71f0a8a8899cf675346c76
35 changes: 18 additions & 17 deletions trunk/net/rfkill/rfkill.c
Original file line number Diff line number Diff line change
Expand Up @@ -75,24 +75,25 @@ static void update_rfkill_state(struct rfkill *rfkill)
}

static int rfkill_toggle_radio(struct rfkill *rfkill,
enum rfkill_state state)
enum rfkill_state state,
int force)
{
int retval = 0;
enum rfkill_state oldstate, newstate;

oldstate = rfkill->state;

if (rfkill->get_state &&
if (rfkill->get_state && !force &&
!rfkill->get_state(rfkill->data, &newstate))
rfkill->state = newstate;

if (state != rfkill->state) {
if (force || state != rfkill->state) {
retval = rfkill->toggle_radio(rfkill->data, state);
if (!retval)
rfkill->state = state;
}

if (rfkill->state != oldstate)
if (force || rfkill->state != oldstate)
rfkill_led_trigger(rfkill, rfkill->state);

return retval;
Expand All @@ -107,7 +108,6 @@ static int rfkill_toggle_radio(struct rfkill *rfkill,
* a specific switch is claimed by userspace in which case it is
* left alone.
*/

void rfkill_switch_all(enum rfkill_type type, enum rfkill_state state)
{
struct rfkill *rfkill;
Expand All @@ -118,7 +118,7 @@ void rfkill_switch_all(enum rfkill_type type, enum rfkill_state state)

list_for_each_entry(rfkill, &rfkill_list, node) {
if ((!rfkill->user_claim) && (rfkill->type == type))
rfkill_toggle_radio(rfkill, state);
rfkill_toggle_radio(rfkill, state, 0);
}

mutex_unlock(&rfkill_mutex);
Expand Down Expand Up @@ -214,7 +214,8 @@ static ssize_t rfkill_state_store(struct device *dev,
if (mutex_lock_interruptible(&rfkill->mutex))
return -ERESTARTSYS;
error = rfkill_toggle_radio(rfkill,
state ? RFKILL_STATE_ON : RFKILL_STATE_OFF);
state ? RFKILL_STATE_ON : RFKILL_STATE_OFF,
0);
mutex_unlock(&rfkill->mutex);

return error ? error : count;
Expand Down Expand Up @@ -255,7 +256,8 @@ static ssize_t rfkill_claim_store(struct device *dev,
if (rfkill->user_claim != claim) {
if (!claim)
rfkill_toggle_radio(rfkill,
rfkill_states[rfkill->type]);
rfkill_states[rfkill->type],
0);
rfkill->user_claim = claim;
}

Expand Down Expand Up @@ -288,12 +290,11 @@ static int rfkill_suspend(struct device *dev, pm_message_t state)

if (dev->power.power_state.event != state.event) {
if (state.event & PM_EVENT_SLEEP) {
mutex_lock(&rfkill->mutex);

if (rfkill->state == RFKILL_STATE_ON)
rfkill->toggle_radio(rfkill->data,
RFKILL_STATE_OFF);
/* Stop transmitter, keep state, no notifies */
update_rfkill_state(rfkill);

mutex_lock(&rfkill->mutex);
rfkill->toggle_radio(rfkill->data, RFKILL_STATE_OFF);
mutex_unlock(&rfkill->mutex);
}

Expand All @@ -310,8 +311,8 @@ static int rfkill_resume(struct device *dev)
if (dev->power.power_state.event != PM_EVENT_ON) {
mutex_lock(&rfkill->mutex);

if (rfkill->state == RFKILL_STATE_ON)
rfkill->toggle_radio(rfkill->data, RFKILL_STATE_ON);
/* restore radio state AND notify everybody */
rfkill_toggle_radio(rfkill, rfkill->state, 1);

mutex_unlock(&rfkill->mutex);
}
Expand All @@ -338,7 +339,7 @@ static int rfkill_add_switch(struct rfkill *rfkill)

mutex_lock(&rfkill_mutex);

error = rfkill_toggle_radio(rfkill, rfkill_states[rfkill->type]);
error = rfkill_toggle_radio(rfkill, rfkill_states[rfkill->type], 0);
if (!error)
list_add_tail(&rfkill->node, &rfkill_list);

Expand All @@ -351,7 +352,7 @@ static void rfkill_remove_switch(struct rfkill *rfkill)
{
mutex_lock(&rfkill_mutex);
list_del_init(&rfkill->node);
rfkill_toggle_radio(rfkill, RFKILL_STATE_OFF);
rfkill_toggle_radio(rfkill, RFKILL_STATE_OFF, 1);
mutex_unlock(&rfkill_mutex);
}

Expand Down

0 comments on commit 13dfa40

Please sign in to comment.