rfkill - RF switch subsystem support
====================================

1 Implementation details
2 Driver support
3 Userspace support

===============================================================================
1: Implementation details

The rfkill switch subsystem offers support for keys often found on laptops
to enable wireless devices like WiFi and Bluetooth.

This is done by providing the user 3 possibilities:
 1 - The rfkill system handles all events; userspace is not aware of events.
 2 - The rfkill system handles all events; userspace is informed about the events.
 3 - The rfkill system does not handle events; userspace handles all events.

The buttons to enable and disable the wireless radios are important in
situations where the user is for example using his laptop on a location where
wireless radios _must_ be disabled (e.g. airplanes).
Because of this requirement, userspace support for the keys should not be
made mandatory. Because userspace might want to perform some additional smarter
tasks when the key is pressed, rfkill still provides userspace the possibility
to take over the task to handle the key events.

The system inside the kernel has been split into 2 separate sections:
	1 - RFKILL
	2 - RFKILL_INPUT

The first option enables rfkill support and will make sure userspace will
be notified of any events through the input device. It also creates several
sysfs entries which can be used by userspace. See section "Userspace support".

The second option provides an rfkill input handler. This handler will
listen to all rfkill key events and will toggle the radio accordingly.
With this option enabled userspace could either do nothing or simply
perform monitoring tasks.

====================================
2: Driver support

To build a driver with rfkill subsystem support, the driver should
depend on the Kconfig symbol RFKILL; it should _not_ depend on
RKFILL_INPUT.

Unless key events trigger an interrupt to which the driver listens, polling
will be required to determine the key state changes. For this the input
layer providers the input-polldev handler.

A driver should implement a few steps to correctly make use of the
rfkill subsystem. First for non-polling drivers:

	- rfkill_allocate()
	- input_allocate_device()
	- rfkill_register()
	- input_register_device()

For polling drivers:

	- rfkill_allocate()
	- input_allocate_polled_device()
	- rfkill_register()
	- input_register_polled_device()

When a key event has been detected, the correct event should be
sent over the input device which has been registered by the driver.

====================================
3: Userspace support

For each key an input device will be created which will send out the correct
key event when the rfkill key has been pressed.

The following sysfs entries will be created:

	name: Name assigned by driver to this key (interface or driver name).
	type: Name of the key type ("wlan", "bluetooth", etc).
	state: Current state of the key. 1: On, 0: Off.
	claim: 1: Userspace handles events, 0: Kernel handles events

Both the "state" and "claim" entries are also writable. For the "state" entry
this means that when 1 or 0 is written all radios, not yet in the requested
state, will be will be toggled accordingly.
For the "claim" entry writing 1 to it means that the kernel no longer handles
key events even though RFKILL_INPUT input was enabled. When "claim" has been
set to 0, userspace should make sure that it listens for the input events or
check the sysfs "state" entry regularly to correctly perform the required
tasks when the rkfill key is pressed.
