blob: 63072f310660a24a728bc26eb1ee4b47db8a65b8 [file] [log] [blame]
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -03001=====================
Shuah Khan44e1e9f2012-05-29 15:07:30 -07002LED Transient Trigger
3=====================
4
5The leds timer trigger does not currently have an interface to activate
6a one shot timer. The current support allows for setting two timers, one for
7specifying how long a state to be on, and the second for how long the state
8to be off. The delay_on value specifies the time period an LED should stay
9in on state, followed by a delay_off value that specifies how long the LED
10should stay in off state. The on and off cycle repeats until the trigger
11gets deactivated. There is no provision for one time activation to implement
12features that require an on or off state to be held just once and then stay in
13the original state forever.
14
15Without one shot timer interface, user space can still use timer trigger to
16set a timer to hold a state, however when user space application crashes or
17goes away without deactivating the timer, the hardware will be left in that
18state permanently.
19
Shuah Khan44e1e9f2012-05-29 15:07:30 -070020Transient trigger addresses the need for one shot timer activation. The
21transient trigger can be enabled and disabled just like the other leds
22triggers.
23
24When an led class device driver registers itself, it can specify all leds
25triggers it supports and a default trigger. During registration, activation
26routine for the default trigger gets called. During registration of an led
27class device, the LED state does not change.
28
29When the driver unregisters, deactivation routine for the currently active
30trigger will be called, and LED state is changed to LED_OFF.
31
32Driver suspend changes the LED state to LED_OFF and resume doesn't change
33the state. Please note that there is no explicit interaction between the
34suspend and resume actions and the currently enabled trigger. LED state
35changes are suspended while the driver is in suspend state. Any timers
36that are active at the time driver gets suspended, continue to run, without
37being able to actually change the LED state. Once driver is resumed, triggers
38start functioning again.
39
40LED state changes are controlled using brightness which is a common led
41class device property. When brightness is set to 0 from user space via
42echo 0 > brightness, it will result in deactivating the current trigger.
43
44Transient trigger uses standard register and unregister interfaces. During
45trigger registration, for each led class device that specifies this trigger
46as its default trigger, trigger activation routine will get called. During
47registration, the LED state does not change, unless there is another trigger
48active, in which case LED state changes to LED_OFF.
49
50During trigger unregistration, LED state gets changed to LED_OFF.
51
52Transient trigger activation routine doesn't change the LED state. It
53creates its properties and does its initialization. Transient trigger
54deactivation routine, will cancel any timer that is active before it cleans
55up and removes the properties it created. It will restore the LED state to
56non-transient state. When driver gets suspended, irrespective of the transient
57state, the LED state changes to LED_OFF.
58
59Transient trigger can be enabled and disabled from user space on led class
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -030060devices, that support this trigger as shown below::
Shuah Khan44e1e9f2012-05-29 15:07:30 -070061
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -030062 echo transient > trigger
63 echo none > trigger
Shuah Khan44e1e9f2012-05-29 15:07:30 -070064
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -030065NOTE:
66 Add a new property trigger state to control the state.
Shuah Khan44e1e9f2012-05-29 15:07:30 -070067
68This trigger exports three properties, activate, state, and duration. When
69transient trigger is activated these properties are set to default values.
70
71- duration allows setting timer value in msecs. The initial value is 0.
72- activate allows activating and deactivating the timer specified by
73 duration as needed. The initial and default value is 0. This will allow
74 duration to be set after trigger activation.
75- state allows user to specify a transient state to be held for the specified
76 duration.
77
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -030078 activate
79 - one shot timer activate mechanism.
Shuah Khan44e1e9f2012-05-29 15:07:30 -070080 1 when activated, 0 when deactivated.
81 default value is zero when transient trigger is enabled,
82 to allow duration to be set.
83
84 activate state indicates a timer with a value of specified
85 duration running.
86 deactivated state indicates that there is no active timer
87 running.
88
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -030089 duration
90 - one shot timer value. When activate is set, duration value
Shuah Khan44e1e9f2012-05-29 15:07:30 -070091 is used to start a timer that runs once. This value doesn't
92 get changed by the trigger unless user does a set via
93 echo new_value > duration
94
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -030095 state
96 - transient state to be held. It has two values 0 or 1. 0 maps
Shuah Khan44e1e9f2012-05-29 15:07:30 -070097 to LED_OFF and 1 maps to LED_FULL. The specified state is
98 held for the duration of the one shot timer and then the
99 state gets changed to the non-transient state which is the
100 inverse of transient state.
101 If state = LED_FULL, when the timer runs out the state will
102 go back to LED_OFF.
103 If state = LED_OFF, when the timer runs out the state will
104 go back to LED_FULL.
105 Please note that current LED state is not checked prior to
106 changing the state to the specified state.
107 Driver could map these values to inverted depending on the
108 default states it defines for the LED in its brightness_set()
109 interface which is called from the led brightness_set()
110 interfaces to control the LED state.
111
112When timer expires activate goes back to deactivated state, duration is left
113at the set value to be used when activate is set at a future time. This will
114allow user app to set the time once and activate it to run it once for the
115specified value as needed. When timer expires, state is restored to the
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -0300116non-transient state which is the inverse of the transient state:
Shuah Khan44e1e9f2012-05-29 15:07:30 -0700117
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -0300118 ================= ===============================================
119 echo 1 > activate starts timer = duration when duration is not 0.
120 echo 0 > activate cancels currently running timer.
121 echo n > duration stores timer value to be used upon next
122 activate. Currently active timer if
123 any, continues to run for the specified time.
124 echo 0 > duration stores timer value to be used upon next
125 activate. Currently active timer if any,
126 continues to run for the specified time.
127 echo 1 > state stores desired transient state LED_FULL to be
Shuah Khan44e1e9f2012-05-29 15:07:30 -0700128 held for the specified duration.
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -0300129 echo 0 > state stores desired transient state LED_OFF to be
Shuah Khan44e1e9f2012-05-29 15:07:30 -0700130 held for the specified duration.
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -0300131 ================= ===============================================
Shuah Khan44e1e9f2012-05-29 15:07:30 -0700132
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -0300133What is not supported
134=====================
135
Shuah Khan44e1e9f2012-05-29 15:07:30 -0700136- Timer activation is one shot and extending and/or shortening the timer
137 is not supported.
138
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -0300139Examples
140========
141
142use-case 1::
143
Shuah Khan44e1e9f2012-05-29 15:07:30 -0700144 echo transient > trigger
145 echo n > duration
146 echo 1 > state
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -0300147
148repeat the following step as needed::
149
Shuah Khan44e1e9f2012-05-29 15:07:30 -0700150 echo 1 > activate - start timer = duration to run once
151 echo 1 > activate - start timer = duration to run once
152 echo none > trigger
153
Randy Dunlapb7ecdb02020-07-07 11:04:05 -0700154This trigger is intended to be used for the following example use cases:
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -0300155
Shuah Khan44e1e9f2012-05-29 15:07:30 -0700156 - Use of LED by user space app as activity indicator.
157 - Use of LED by user space app as a kind of watchdog indicator -- as
Mauro Carvalho Chehab8dab9192019-06-28 09:20:20 -0300158 long as the app is alive, it can keep the LED illuminated, if it dies
159 the LED will be extinguished automatically.
Shuah Khan44e1e9f2012-05-29 15:07:30 -0700160 - Use by any user space app that needs a transient GPIO output.