[PATCH 06/15] rfkill: handle SW_RFKILL_ALL events

!MAILaRCHIVE_VOTE_RePLACE
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
To: <linux-kernel@...>
Cc: Ivo van Doorn <IvDoorn@...>, Thomas Renninger <trenn@...>, Henrique de Moraes Holschuh <hmh@...>, Dmitry Torokhov <dtor@...>
Date: Sunday, May 18, 2008 - 2:47 pm

Teach rfkill-input how to handle SW_RFKILL_ALL events (new name for the
SW_RADIO event).

SW_RFKILL_ALL is an absolute enable-or-disable command that is tied to all
radios in a system.

Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Cc: Ivo van Doorn <IvDoorn@gmail.com>
Cc: Dmitry Torokhov <dtor@mail.ru>
---
 net/rfkill/rfkill-input.c |   45 +++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/net/rfkill/rfkill-input.c b/net/rfkill/rfkill-input.c
index e4b051d..9d6c925 100644
--- a/net/rfkill/rfkill-input.c
+++ b/net/rfkill/rfkill-input.c
@@ -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;
@@ -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);
@@ -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;
+		}
 	}
 }
 
@@ -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) },
+	},
 	{ }
 };
 
-- 
1.5.5.1

--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[RFC] rfkill class rework, Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)
[PATCH 08/15] rfkill: add read-write rfkill switch support, Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)
[PATCH 15/15] rfkill: document rw rfkill switches and clarif..., Henrique de Moraes Holschuh..., (Sun May 18, 2:48 pm)
Re: [PATCH 15/15] rfkill: document rw rfkill switches and cl..., Henrique de Moraes Holschuh..., (Tue May 20, 11:54 am)
Re: [PATCH 15/15] rfkill: document rw rfkill switches and cl..., Henrique de Moraes Holschuh..., (Tue May 20, 9:44 pm)
[PATCH 15/15] rfkill: document rw rfkill switches and clarif..., Henrique de Moraes Holschuh..., (Wed May 28, 8:45 pm)
Re: [PATCH 15/15] rfkill: document rw rfkill switches and cl..., Henrique de Moraes Holschuh..., (Thu May 29, 12:26 pm)
Re: [PATCH 15/15] rfkill: document rw rfkill switches and cl..., Henrique de Moraes Holschuh..., (Thu May 29, 1:22 pm)
Re: [PATCH 15/15] rfkill: document rw rfkill switches and cl..., Henrique de Moraes Holschuh..., (Tue Jun 3, 11:11 pm)
Re: [PATCH 15/15] rfkill: document rw rfkill switches and cl..., Henrique de Moraes Holschuh..., (Thu May 29, 1:46 pm)
Re: [PATCH 15/15] rfkill: document rw rfkill switches and cl..., Henrique de Moraes Holschuh..., (Thu May 29, 5:16 pm)
[PATCH] Input: rename SW_RADIO to SW_RFKILL_ALL (v2), Henrique de Moraes Holschuh..., (Thu May 29, 5:25 pm)
Re: [PATCH 15/15] rfkill: document rw rfkill switches and cl..., Henrique de Moraes Holschuh..., (Mon May 19, 6:04 pm)
[PATCH 14/15] rfkill: do not allow userspace to override ALL..., Henrique de Moraes Holschuh..., (Sun May 18, 2:48 pm)
Re: [PATCH 14/15] rfkill: do not allow userspace to override..., Henrique de Moraes Holschuh..., (Thu May 22, 4:51 pm)
Re: [PATCH 14/15] rfkill: do not allow userspace to override..., Henrique de Moraes Holschuh..., (Tue May 27, 10:08 am)
Re: [PATCH 14/15] rfkill: do not allow userspace to override..., Henrique de Moraes Holschuh..., (Tue May 27, 1:41 pm)
[PATCH 11/15] rfkill: add notifier chains support, Henrique de Moraes Holschuh..., (Sun May 18, 2:48 pm)
Re: [PATCH 11/15] rfkill: add notifier chains support, Ivo van Doorn, (Tue May 20, 6:09 am)
Re: [PATCH 11/15] rfkill: add notifier chains support, Thomas Renninger, (Mon May 19, 4:44 am)
Re: [PATCH 11/15] rfkill: add notifier chains support, Henrique de Moraes Holschuh..., (Mon May 19, 9:10 am)
[PATCH 10/15] rfkill: rework suspend and resume handlers, Henrique de Moraes Holschuh..., (Sun May 18, 2:48 pm)
[PATCH 09/15] rfkill: add the WWAN radio type, Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)
Re: [PATCH 09/15] rfkill: add the WWAN radio type, Ivo van Doorn, (Tue May 20, 6:08 am)
Re: [PATCH 09/15] rfkill: add the WWAN radio type, Henrique de Moraes Holschuh..., (Tue May 20, 9:12 pm)
Re: [PATCH 09/15] rfkill: add the WWAN radio type, Inaky Perez-Gonzalez, (Tue May 20, 11:35 pm)
Re: [PATCH 09/15] rfkill: add the WWAN radio type, Henrique de Moraes Holschuh..., (Tue May 20, 11:42 pm)
Re: [PATCH 09/15] rfkill: add the WWAN radio type, Inaky Perez-Gonzalez, (Wed May 21, 2:48 am)
Re: [PATCH 09/15] rfkill: add the WWAN radio type, Henrique de Moraes Holschuh..., (Wed May 21, 10:07 am)
[PATCH 13/15] rfkill: add uevent notifications, Henrique de Moraes Holschuh..., (Sun May 18, 2:48 pm)
Re: [PATCH 13/15] rfkill: add uevent notifications, Ivo van Doorn, (Tue May 20, 6:09 am)
[PATCH 12/15] rfkill: add type string helper, Henrique de Moraes Holschuh..., (Sun May 18, 2:48 pm)
Re: [PATCH 12/15] rfkill: add type string helper, Ivo van Doorn, (Tue May 20, 6:09 am)
[PATCH 07/15] rfkill: add parameter to disable radios by def..., Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)
[PATCH 06/15] rfkill: handle SW_RFKILL_ALL events, Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)
Re: [PATCH 06/15] rfkill: handle SW_RFKILL_ALL events, Ivo van Doorn, (Tue May 20, 6:08 am)
[PATCH 01/15] ACPI: thinkpad-acpi: fix initialization error ..., Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)
[PATCH 05/15] rfkill: fix minor typo in kernel doc, Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)
Re: [PATCH 05/15] rfkill: fix minor typo in kernel doc, Ivo van Doorn, (Tue May 20, 6:08 am)
[PATCH 04/15] rfkill: clarify meaning of rfkill states, Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)
[PATCH 03/15] Input: rename SW_RADIO to SW_RFKILL_ALL (v2), Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)
[PATCH 02/15] ACPI: thinkpad-acpi: fix LED handling on older..., Henrique de Moraes Holschuh..., (Sun May 18, 2:47 pm)