]>
Commit | Line | Data |
---|---|---|
dac24ab3 ID |
1 | rfkill - RF switch subsystem support |
2 | ==================================== | |
3 | ||
4 | 1 Implementation details | |
5 | 2 Driver support | |
6 | 3 Userspace support | |
7 | ||
8 | =============================================================================== | |
9 | 1: Implementation details | |
10 | ||
11 | The rfkill switch subsystem offers support for keys often found on laptops | |
12 | to enable wireless devices like WiFi and Bluetooth. | |
13 | ||
14 | This is done by providing the user 3 possibilities: | |
15 | 1 - The rfkill system handles all events; userspace is not aware of events. | |
16 | 2 - The rfkill system handles all events; userspace is informed about the events. | |
17 | 3 - The rfkill system does not handle events; userspace handles all events. | |
18 | ||
19 | The buttons to enable and disable the wireless radios are important in | |
20 | situations where the user is for example using his laptop on a location where | |
21 | wireless radios _must_ be disabled (e.g. airplanes). | |
22 | Because of this requirement, userspace support for the keys should not be | |
23 | made mandatory. Because userspace might want to perform some additional smarter | |
24 | tasks when the key is pressed, rfkill still provides userspace the possibility | |
25 | to take over the task to handle the key events. | |
26 | ||
27 | The system inside the kernel has been split into 2 separate sections: | |
28 | 1 - RFKILL | |
29 | 2 - RFKILL_INPUT | |
30 | ||
31 | The first option enables rfkill support and will make sure userspace will | |
32 | be notified of any events through the input device. It also creates several | |
33 | sysfs entries which can be used by userspace. See section "Userspace support". | |
34 | ||
35 | The second option provides an rfkill input handler. This handler will | |
36 | listen to all rfkill key events and will toggle the radio accordingly. | |
37 | With this option enabled userspace could either do nothing or simply | |
38 | perform monitoring tasks. | |
39 | ||
40 | ==================================== | |
41 | 2: Driver support | |
42 | ||
43 | To build a driver with rfkill subsystem support, the driver should | |
44 | depend on the Kconfig symbol RFKILL; it should _not_ depend on | |
45 | RKFILL_INPUT. | |
46 | ||
47 | Unless key events trigger an interrupt to which the driver listens, polling | |
48 | will be required to determine the key state changes. For this the input | |
49 | layer providers the input-polldev handler. | |
50 | ||
51 | A driver should implement a few steps to correctly make use of the | |
52 | rfkill subsystem. First for non-polling drivers: | |
53 | ||
54 | - rfkill_allocate() | |
55 | - input_allocate_device() | |
56 | - rfkill_register() | |
57 | - input_register_device() | |
58 | ||
59 | For polling drivers: | |
60 | ||
61 | - rfkill_allocate() | |
62 | - input_allocate_polled_device() | |
63 | - rfkill_register() | |
64 | - input_register_polled_device() | |
65 | ||
66 | When a key event has been detected, the correct event should be | |
67 | sent over the input device which has been registered by the driver. | |
68 | ||
69 | ==================================== | |
70 | 3: Userspace support | |
71 | ||
72 | For each key an input device will be created which will send out the correct | |
73 | key event when the rfkill key has been pressed. | |
74 | ||
75 | The following sysfs entries will be created: | |
76 | ||
77 | name: Name assigned by driver to this key (interface or driver name). | |
78 | type: Name of the key type ("wlan", "bluetooth", etc). | |
79 | state: Current state of the key. 1: On, 0: Off. | |
80 | claim: 1: Userspace handles events, 0: Kernel handles events | |
81 | ||
82 | Both the "state" and "claim" entries are also writable. For the "state" entry | |
83 | this means that when 1 or 0 is written all radios, not yet in the requested | |
84 | state, will be will be toggled accordingly. | |
85 | For the "claim" entry writing 1 to it means that the kernel no longer handles | |
86 | key events even though RFKILL_INPUT input was enabled. When "claim" has been | |
87 | set to 0, userspace should make sure that it listens for the input events or | |
88 | check the sysfs "state" entry regularly to correctly perform the required | |
89 | tasks when the rkfill key is pressed. |