From: Ivo van Doorn <ivdoorn@gmail.com>
To: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
Cc: John Linville <linville@tuxdriver.com>,
linux-wireless@vger.kernel.org, Dmitry Torokhov <dtor@mail.ru>
Subject: Re: [PATCH 5/6] rfkill: query EV_SW states when rfkill-input (re)?connects to a input device
Date: Tue, 22 Jul 2008 19:11:30 +0200 [thread overview]
Message-ID: <200807221911.30853.IvDoorn@gmail.com> (raw)
In-Reply-To: <1216685902-9373-6-git-send-email-hmh@hmh.eng.br>
On Tuesday 22 July 2008, Henrique de Moraes Holschuh wrote:
> Every time a new input device that is capable of one of the rfkill EV_SW events
> (currently only SW_RFKILL_ALL) is connected to rfkill-input, we must check the
> states of the input EV_SW switches and take action. Otherwise, we will ignore
> the initial switch state.
>
> We also need to re-check the states of the EV_SW switches after a device that
> was under an exclusive grab is released back to us, since we got no input
> events from that device while it was grabbed.
>
> Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
> Cc: Ivo van Doorn <IvDoorn@gmail.com>
> Cc: Dmitry Torokhov <dtor@mail.ru>
Acked-by: Ivo van Doorn <IvDoorn@gmail.com>
> ---
> net/rfkill/rfkill-input.c | 54 ++++++++++++++++++++++++++++++++------------
> 1 files changed, 39 insertions(+), 15 deletions(-)
>
> diff --git a/net/rfkill/rfkill-input.c b/net/rfkill/rfkill-input.c
> index 8aa8227..827f178 100644
> --- a/net/rfkill/rfkill-input.c
> +++ b/net/rfkill/rfkill-input.c
> @@ -109,6 +109,25 @@ static DEFINE_RFKILL_TASK(rfkill_uwb, RFKILL_TYPE_UWB);
> static DEFINE_RFKILL_TASK(rfkill_wimax, RFKILL_TYPE_WIMAX);
> static DEFINE_RFKILL_TASK(rfkill_wwan, RFKILL_TYPE_WWAN);
>
> +static void rfkill_schedule_evsw_rfkillall(int state)
> +{
> + /* EVERY radio type. state != 0 means radios ON */
> + /* handle EPO (emergency power off) through shortcut */
> + if (state) {
> + rfkill_schedule_set(&rfkill_wwan,
> + RFKILL_STATE_UNBLOCKED);
> + rfkill_schedule_set(&rfkill_wimax,
> + RFKILL_STATE_UNBLOCKED);
> + rfkill_schedule_set(&rfkill_uwb,
> + RFKILL_STATE_UNBLOCKED);
> + rfkill_schedule_set(&rfkill_bt,
> + RFKILL_STATE_UNBLOCKED);
> + rfkill_schedule_set(&rfkill_wlan,
> + RFKILL_STATE_UNBLOCKED);
> + } else
> + rfkill_schedule_epo();
> +}
> +
> static void rfkill_event(struct input_handle *handle, unsigned int type,
> unsigned int code, int data)
> {
> @@ -132,21 +151,7 @@ static void rfkill_event(struct input_handle *handle, unsigned int type,
> } else if (type == EV_SW) {
> switch (code) {
> case SW_RFKILL_ALL:
> - /* EVERY radio type. data != 0 means radios ON */
> - /* handle EPO (emergency power off) through shortcut */
> - if (data) {
> - rfkill_schedule_set(&rfkill_wwan,
> - RFKILL_STATE_UNBLOCKED);
> - rfkill_schedule_set(&rfkill_wimax,
> - RFKILL_STATE_UNBLOCKED);
> - rfkill_schedule_set(&rfkill_uwb,
> - RFKILL_STATE_UNBLOCKED);
> - rfkill_schedule_set(&rfkill_bt,
> - RFKILL_STATE_UNBLOCKED);
> - rfkill_schedule_set(&rfkill_wlan,
> - RFKILL_STATE_UNBLOCKED);
> - } else
> - rfkill_schedule_epo();
> + rfkill_schedule_evsw_rfkillall(data);
> break;
> default:
> break;
> @@ -168,6 +173,7 @@ static int rfkill_connect(struct input_handler *handler, struct input_dev *dev,
> handle->handler = handler;
> handle->name = "rfkill";
>
> + /* causes rfkill_start() to be called */
> error = input_register_handle(handle);
> if (error)
> goto err_free_handle;
> @@ -185,6 +191,23 @@ static int rfkill_connect(struct input_handler *handler, struct input_dev *dev,
> return error;
> }
>
> +static void rfkill_start(struct input_handle *handle)
> +{
> + /* Take event_lock to guard against configuration changes, we
> + * should be able to deal with concurrency with rfkill_event()
> + * just fine (which event_lock will also avoid). */
> + spin_lock_irq(&handle->dev->event_lock);
> +
> + if (test_bit(EV_SW, &handle->dev->evbit)) {
> + if (test_bit(SW_RFKILL_ALL, &handle->dev->swbit))
> + rfkill_schedule_evsw_rfkillall(test_bit(SW_RFKILL_ALL,
> + &handle->dev->sw));
> + /* add resync for further EV_SW events here */
> + }
> +
> + spin_unlock_irq(&handle->dev->event_lock);
> +}
> +
> static void rfkill_disconnect(struct input_handle *handle)
> {
> input_close_device(handle);
> @@ -225,6 +248,7 @@ static struct input_handler rfkill_handler = {
> .event = rfkill_event,
> .connect = rfkill_connect,
> .disconnect = rfkill_disconnect,
> + .start = rfkill_start,
> .name = "rfkill",
> .id_table = rfkill_ids,
> };
next prev parent reply other threads:[~2008-07-22 16:54 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-07-22 0:18 [GIT PATCH] rfkill fixes, set 2, v2 Henrique de Moraes Holschuh
2008-07-22 0:18 ` [PATCH 1/6] rfkill: document rfkill_force_state as required (v2) Henrique de Moraes Holschuh
2008-07-22 0:18 ` [PATCH 2/6] rfkill: fix led-trigger unregister order in error unwind Henrique de Moraes Holschuh
2008-07-22 0:18 ` [PATCH 3/6] rfkill: document the rfkill struct locking (v2) Henrique de Moraes Holschuh
2008-07-22 17:11 ` Ivo van Doorn
2008-07-22 0:18 ` [PATCH 4/6] rfkill: mutex fixes Henrique de Moraes Holschuh
2008-07-22 0:18 ` [PATCH 5/6] rfkill: query EV_SW states when rfkill-input (re)?connects to a input device Henrique de Moraes Holschuh
2008-07-22 13:57 ` Dmitry Torokhov
2008-07-22 17:11 ` Ivo van Doorn [this message]
2008-07-29 20:53 ` John W. Linville
2008-07-30 1:30 ` Dmitry Torokhov
2008-07-30 3:39 ` Henrique de Moraes Holschuh
2008-07-30 4:07 ` Henrique de Moraes Holschuh
2008-07-31 13:53 ` [PATCH] " Henrique de Moraes Holschuh
2008-07-31 14:38 ` Ivo van Doorn
2008-07-31 14:22 ` Henrique de Moraes Holschuh
2008-07-22 0:18 ` [PATCH 6/6] rfkill: yet more minor kernel-doc fixes Henrique de Moraes Holschuh
2008-07-22 17:11 ` Ivo van Doorn
2008-07-22 17:11 ` [GIT PATCH] rfkill fixes, set 2, v2 Ivo van Doorn
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=200807221911.30853.IvDoorn@gmail.com \
--to=ivdoorn@gmail.com \
--cc=dtor@mail.ru \
--cc=hmh@hmh.eng.br \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.