Re: [PATCH RFC]rfkill - Hardware button support for Wireless cards

2006-07-19 Thread Ivo Van Doorn

Hi,


 I have been quite busy lately, hence the reason for this late continuance
 of the Hardware button support for Wireless cards discussion.
 I have CC'ed the people who discussed this in earlier threads.

no problem. Look good, just one thing I'm missing:

 + For each registered hardware button an input device will be created.
 + If this input device has been opened by the user, rfkill will send a
 + signal to userspace instead of the hardware about the new button
 + status. This will allow userpace to perform the correct steps
 + in order to bring down all interfaces.

 + if (rfkill-input_dev-users) {
 + input_report_key(rfkill-input_dev,
 + KEY_RFKILL, new_status);
 + input_sync(rfkill-input_dev);

Shouldn't there be a continue to avoid calling enable/disable_radio()?


True, totally overlooked that part. Will fix this immediately.


 + }

Stefan

PS: This rfkill stuff is really caught between two stools. Sending a netlink
event for the device with an additional TLV for radio button status seems as
valid as sending an input event...


Hmm not sure about this one. Personally I would think that support for
a button would belong more to the input layer. Even when the button
would only be usefull for networking.

ivo
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH RFC]rfkill - Hardware button support for Wireless cards

2006-07-10 Thread Stefan Rompf
Am Sonntag, 9. Juli 2006 17:49 schrieb Ivo Van Doorn:

 I have been quite busy lately, hence the reason for this late continuance
 of the Hardware button support for Wireless cards discussion.
 I have CC'ed the people who discussed this in earlier threads.

no problem. Look good, just one thing I'm missing:

 + For each registered hardware button an input device will be created.
 + If this input device has been opened by the user, rfkill will send a
 + signal to userspace instead of the hardware about the new button
 + status. This will allow userpace to perform the correct steps
 + in order to bring down all interfaces.

 + if (rfkill-input_dev-users) {
 + input_report_key(rfkill-input_dev,
 + KEY_RFKILL, new_status);
 + input_sync(rfkill-input_dev);

Shouldn't there be a continue to avoid calling enable/disable_radio()?

 + }

Stefan

PS: This rfkill stuff is really caught between two stools. Sending a netlink 
event for the device with an additional TLV for radio button status seems as 
valid as sending an input event...
-
To unsubscribe from this list: send the line unsubscribe netdev in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH RFC]rfkill - Hardware button support for Wireless cards

2006-07-09 Thread Ivo Van Doorn

Hi,

I have been quite busy lately, hence the reason for this late continuance
of the Hardware button support for Wireless cards discussion.
I have CC'ed the people who discussed this in earlier threads.

With the suggestions made by Vojtech Pavlik I have created the rfkill driver,
for which I would like to know if this is the acceptable approach.

This rfkill driver looks a bit like the previous version I had send,
but this version does pay attention if the input device has been opened
and if an event should be send to userspace in that case.

I was however unsure about where the KEY_RFKILL should be added
in linux/input.h. I again placed this driver in drivers/input/misc but perhaps
this should go into drivers/net instead?

I hope I am on the right track. :)

Signed-off-by Ivo van Doorn [EMAIL PROTECTED]

---
diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig
index 4bad588..837021a 100644
--- a/drivers/input/misc/Kconfig
+++ b/drivers/input/misc/Kconfig
@@ -79,4 +79,19 @@ config HP_SDC_RTC
  Say Y here if you want to support the built-in real time clock
  of the HP SDC controller.

+config RFKILL
+   tristate RF button support
+   help
+ If you say yes here, the rfkill driver will be build
+ which allowed network devices to register their hardware
+ RF button which controls the radio state. This driver
+ will then create an input device for it.
+
+ When the input device is not used, the rfkill driver
+ will make sure that when the RF button is pressed the radio
+ is enabled or disabled accordingly. When the input device
+ has been opened by the user this radio control will be left
+ to the user, and rfkill will only send the RF button status
+ change to userspace.
+
endif
diff --git a/drivers/input/misc/Makefile b/drivers/input/misc/Makefile
index 415c491..e788a1b 100644
--- a/drivers/input/misc/Makefile
+++ b/drivers/input/misc/Makefile
@@ -11,3 +11,4 @@ obj-$(CONFIG_INPUT_UINPUT)+= uinput.o
obj-$(CONFIG_INPUT_WISTRON_BTNS)+= wistron_btns.o
obj-$(CONFIG_HP_SDC_RTC)+= hp_sdc_rtc.o
obj-$(CONFIG_INPUT_IXP4XX_BEEPER)   += ixp4xx-beeper.o
+obj-$(CONFIG_RFKILL)   += rfkill.o
diff --git a/drivers/input/misc/rfkill.c b/drivers/input/misc/rfkill.c
new file mode 100644
index 000..da576e5
--- /dev/null
+++ b/drivers/input/misc/rfkill.c
@@ -0,0 +1,209 @@
+/*
+   Copyright (C) 2006 Ivo van Doorn
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program; if not, write to the
+   Free Software Foundation, Inc.,
+   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include linux/kernel.h
+#include linux/module.h
+#include linux/init.h
+#include linux/timer.h
+#include linux/rfkill.h
+
+#include asm/atomic.h
+
+MODULE_AUTHOR(Ivo van Doorn [EMAIL PROTECTED]);
+MODULE_VERSION(1.0);
+MODULE_DESCRIPTION(RF button support);
+MODULE_LICENSE(GPL);
+
+/*
+ * List of all registered buttons.
+ */
+static struct list_head rfkill_list;
+static spinlock_t rfkill_list_lock;
+
+/*
+ * Polling timer, poll_delay and use count.
+ */
+static struct timer_list poll_timer;
+static atomic_t poll_required;
+
+static void rfkill_toggle_radio(int new_status)
+{
+   struct list_head *entry;
+   struct rfkill *rfkill;
+
+   /*
+* Go through the list of all radio's to toggle the radio state.
+*/
+   list_for_each(entry, rfkill_list) {
+   rfkill =  list_entry(entry, struct rfkill, entry);
+
+   rfkill-current_status = new_status;
+
+   /*
+   * If the input_device has been opened
+   * all radio events should be send to user space.
+   */
+   if (rfkill-input_dev-users) {
+   input_report_key(rfkill-input_dev,
+   KEY_RFKILL, new_status);
+   input_sync(rfkill-input_dev);
+   }
+   
+   /*
+   * If the hardware does not toggle the radio status automaticly,
+   * we should take care of it.
+   */
+   if (new_status  rfkill-enable_radio)
+   rfkill-enable_radio(rfkill-data);
+   else if (!new_status  rfkill-disable_radio)
+