Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 103139
b: refs/heads/master
c: 28f089c
h: refs/heads/master
i:
  103137: 7f61a04
  103135: b90ac65
v: v3
  • Loading branch information
Henrique de Moraes Holschuh authored and John W. Linville committed Jun 26, 2008
1 parent e040847 commit e897c47
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 3 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: c8fcd905a59a535bff93a120ac44b09ce24e13e6
refs/heads/master: 28f089c18464810ec9e91ee10a89adbb02ad7765
45 changes: 43 additions & 2 deletions trunk/net/rfkill/rfkill-input.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,22 @@ static void rfkill_task_handler(struct work_struct *work)
mutex_unlock(&task->mutex);
}

static void rfkill_schedule_set(struct rfkill_task *task,
enum rfkill_state desired_state)
{
unsigned long flags;

spin_lock_irqsave(&task->lock, flags);

if (time_after(jiffies, task->last + msecs_to_jiffies(200))) {
task->desired_state = desired_state;
task->last = jiffies;
schedule_work(&task->work);
}

spin_unlock_irqrestore(&task->lock, flags);
}

static void rfkill_schedule_toggle(struct rfkill_task *task)
{
unsigned long flags;
Expand Down Expand Up @@ -87,9 +103,9 @@ static DEFINE_RFKILL_TASK(rfkill_uwb, RFKILL_TYPE_UWB);
static DEFINE_RFKILL_TASK(rfkill_wimax, RFKILL_TYPE_WIMAX);

static void rfkill_event(struct input_handle *handle, unsigned int type,
unsigned int code, int down)
unsigned int code, int data)
{
if (type == EV_KEY && down == 1) {
if (type == EV_KEY && data == 1) {
switch (code) {
case KEY_WLAN:
rfkill_schedule_toggle(&rfkill_wlan);
Expand All @@ -106,6 +122,26 @@ static void rfkill_event(struct input_handle *handle, unsigned int type,
default:
break;
}
} else if (type == EV_SW) {
switch (code) {
case SW_RFKILL_ALL:
/* EVERY radio type. data != 0 means radios ON */
rfkill_schedule_set(&rfkill_wimax,
(data)? RFKILL_STATE_ON:
RFKILL_STATE_OFF);
rfkill_schedule_set(&rfkill_uwb,
(data)? RFKILL_STATE_ON:
RFKILL_STATE_OFF);
rfkill_schedule_set(&rfkill_bt,
(data)? RFKILL_STATE_ON:
RFKILL_STATE_OFF);
rfkill_schedule_set(&rfkill_wlan,
(data)? RFKILL_STATE_ON:
RFKILL_STATE_OFF);
break;
default:
break;
}
}
}

Expand Down Expand Up @@ -168,6 +204,11 @@ static const struct input_device_id rfkill_ids[] = {
.evbit = { BIT_MASK(EV_KEY) },
.keybit = { [BIT_WORD(KEY_WIMAX)] = BIT_MASK(KEY_WIMAX) },
},
{
.flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_SWBIT,
.evbit = { BIT(EV_SW) },
.swbit = { [BIT_WORD(SW_RFKILL_ALL)] = BIT_MASK(SW_RFKILL_ALL) },
},
{ }
};

Expand Down

0 comments on commit e897c47

Please sign in to comment.