mirror of
https://github.com/AetherDroid/android_kernel_samsung_on5xelte.git
synced 2025-09-06 08:18:05 -04:00
Fixed MTP to work with TWRP
This commit is contained in:
commit
f6dfaef42e
50820 changed files with 20846062 additions and 0 deletions
152
Documentation/leds/ledtrig-transient.txt
Normal file
152
Documentation/leds/ledtrig-transient.txt
Normal file
|
@ -0,0 +1,152 @@
|
|||
LED Transient Trigger
|
||||
=====================
|
||||
|
||||
The leds timer trigger does not currently have an interface to activate
|
||||
a one shot timer. The current support allows for setting two timers, one for
|
||||
specifying how long a state to be on, and the second for how long the state
|
||||
to be off. The delay_on value specifies the time period an LED should stay
|
||||
in on state, followed by a delay_off value that specifies how long the LED
|
||||
should stay in off state. The on and off cycle repeats until the trigger
|
||||
gets deactivated. There is no provision for one time activation to implement
|
||||
features that require an on or off state to be held just once and then stay in
|
||||
the original state forever.
|
||||
|
||||
Without one shot timer interface, user space can still use timer trigger to
|
||||
set a timer to hold a state, however when user space application crashes or
|
||||
goes away without deactivating the timer, the hardware will be left in that
|
||||
state permanently.
|
||||
|
||||
As a specific example of this use-case, let's look at vibrate feature on
|
||||
phones. Vibrate function on phones is implemented using PWM pins on SoC or
|
||||
PMIC. There is a need to activate one shot timer to control the vibrate
|
||||
feature, to prevent user space crashes leaving the phone in vibrate mode
|
||||
permanently causing the battery to drain.
|
||||
|
||||
Transient trigger addresses the need for one shot timer activation. The
|
||||
transient trigger can be enabled and disabled just like the other leds
|
||||
triggers.
|
||||
|
||||
When an led class device driver registers itself, it can specify all leds
|
||||
triggers it supports and a default trigger. During registration, activation
|
||||
routine for the default trigger gets called. During registration of an led
|
||||
class device, the LED state does not change.
|
||||
|
||||
When the driver unregisters, deactivation routine for the currently active
|
||||
trigger will be called, and LED state is changed to LED_OFF.
|
||||
|
||||
Driver suspend changes the LED state to LED_OFF and resume doesn't change
|
||||
the state. Please note that there is no explicit interaction between the
|
||||
suspend and resume actions and the currently enabled trigger. LED state
|
||||
changes are suspended while the driver is in suspend state. Any timers
|
||||
that are active at the time driver gets suspended, continue to run, without
|
||||
being able to actually change the LED state. Once driver is resumed, triggers
|
||||
start functioning again.
|
||||
|
||||
LED state changes are controlled using brightness which is a common led
|
||||
class device property. When brightness is set to 0 from user space via
|
||||
echo 0 > brightness, it will result in deactivating the current trigger.
|
||||
|
||||
Transient trigger uses standard register and unregister interfaces. During
|
||||
trigger registration, for each led class device that specifies this trigger
|
||||
as its default trigger, trigger activation routine will get called. During
|
||||
registration, the LED state does not change, unless there is another trigger
|
||||
active, in which case LED state changes to LED_OFF.
|
||||
|
||||
During trigger unregistration, LED state gets changed to LED_OFF.
|
||||
|
||||
Transient trigger activation routine doesn't change the LED state. It
|
||||
creates its properties and does its initialization. Transient trigger
|
||||
deactivation routine, will cancel any timer that is active before it cleans
|
||||
up and removes the properties it created. It will restore the LED state to
|
||||
non-transient state. When driver gets suspended, irrespective of the transient
|
||||
state, the LED state changes to LED_OFF.
|
||||
|
||||
Transient trigger can be enabled and disabled from user space on led class
|
||||
devices, that support this trigger as shown below:
|
||||
|
||||
echo transient > trigger
|
||||
echo none > trigger
|
||||
|
||||
NOTE: Add a new property trigger state to control the state.
|
||||
|
||||
This trigger exports three properties, activate, state, and duration. When
|
||||
transient trigger is activated these properties are set to default values.
|
||||
|
||||
- duration allows setting timer value in msecs. The initial value is 0.
|
||||
- activate allows activating and deactivating the timer specified by
|
||||
duration as needed. The initial and default value is 0. This will allow
|
||||
duration to be set after trigger activation.
|
||||
- state allows user to specify a transient state to be held for the specified
|
||||
duration.
|
||||
|
||||
activate - one shot timer activate mechanism.
|
||||
1 when activated, 0 when deactivated.
|
||||
default value is zero when transient trigger is enabled,
|
||||
to allow duration to be set.
|
||||
|
||||
activate state indicates a timer with a value of specified
|
||||
duration running.
|
||||
deactivated state indicates that there is no active timer
|
||||
running.
|
||||
|
||||
duration - one shot timer value. When activate is set, duration value
|
||||
is used to start a timer that runs once. This value doesn't
|
||||
get changed by the trigger unless user does a set via
|
||||
echo new_value > duration
|
||||
|
||||
state - transient state to be held. It has two values 0 or 1. 0 maps
|
||||
to LED_OFF and 1 maps to LED_FULL. The specified state is
|
||||
held for the duration of the one shot timer and then the
|
||||
state gets changed to the non-transient state which is the
|
||||
inverse of transient state.
|
||||
If state = LED_FULL, when the timer runs out the state will
|
||||
go back to LED_OFF.
|
||||
If state = LED_OFF, when the timer runs out the state will
|
||||
go back to LED_FULL.
|
||||
Please note that current LED state is not checked prior to
|
||||
changing the state to the specified state.
|
||||
Driver could map these values to inverted depending on the
|
||||
default states it defines for the LED in its brightness_set()
|
||||
interface which is called from the led brightness_set()
|
||||
interfaces to control the LED state.
|
||||
|
||||
When timer expires activate goes back to deactivated state, duration is left
|
||||
at the set value to be used when activate is set at a future time. This will
|
||||
allow user app to set the time once and activate it to run it once for the
|
||||
specified value as needed. When timer expires, state is restored to the
|
||||
non-transient state which is the inverse of the transient state.
|
||||
|
||||
echo 1 > activate - starts timer = duration when duration is not 0.
|
||||
echo 0 > activate - cancels currently running timer.
|
||||
echo n > duration - stores timer value to be used upon next
|
||||
activate. Currently active timer if
|
||||
any, continues to run for the specified time.
|
||||
echo 0 > duration - stores timer value to be used upon next
|
||||
activate. Currently active timer if any,
|
||||
continues to run for the specified time.
|
||||
echo 1 > state - stores desired transient state LED_FULL to be
|
||||
held for the specified duration.
|
||||
echo 0 > state - stores desired transient state LED_OFF to be
|
||||
held for the specified duration.
|
||||
|
||||
What is not supported:
|
||||
======================
|
||||
- Timer activation is one shot and extending and/or shortening the timer
|
||||
is not supported.
|
||||
|
||||
Example use-case 1:
|
||||
echo transient > trigger
|
||||
echo n > duration
|
||||
echo 1 > state
|
||||
repeat the following step as needed:
|
||||
echo 1 > activate - start timer = duration to run once
|
||||
echo 1 > activate - start timer = duration to run once
|
||||
echo none > trigger
|
||||
|
||||
This trigger is intended to be used for for the following example use cases:
|
||||
- Control of vibrate (phones, tablets etc.) hardware by user space app.
|
||||
- Use of LED by user space app as activity indicator.
|
||||
- Use of LED by user space app as a kind of watchdog indicator -- as
|
||||
long as the app is alive, it can keep the LED illuminated, if it dies
|
||||
the LED will be extinguished automatically.
|
||||
- Use by any user space app that needs a transient GPIO output.
|
Loading…
Add table
Add a link
Reference in a new issue