Commit | Line | Data |
---|---|---|
24e2d05d BA |
1 | .. SPDX-License-Identifier: GPL-2.0 |
2 | ||
3 | ============================== | |
4 | Kernel driver for Qualcomm LPG | |
5 | ============================== | |
6 | ||
7 | Description | |
8 | ----------- | |
9 | ||
10 | The Qualcomm LPG can be found in a variety of Qualcomm PMICs and consists of a | |
11 | number of PWM channels, a programmable pattern lookup table and a RGB LED | |
12 | current sink. | |
13 | ||
14 | To facilitate the various use cases, the LPG channels can be exposed as | |
15 | individual LEDs, grouped together as RGB LEDs or otherwise be accessed as PWM | |
16 | channels. The output of each PWM channel is routed to other hardware | |
17 | blocks, such as the RGB current sink, GPIO pins etc. | |
18 | ||
19 | The each PWM channel can operate with a period between 27us and 384 seconds and | |
20 | has a 9 bit resolution of the duty cycle. | |
21 | ||
22 | In order to provide support for status notifications with the CPU subsystem in | |
23 | deeper idle states the LPG provides pattern support. This consists of a shared | |
24 | lookup table of brightness values and per channel properties to select the | |
25 | range within the table to use, the rate and if the pattern should repeat. | |
26 | ||
27 | The pattern for a channel can be programmed using the "pattern" trigger, using | |
28 | the hw_pattern attribute. | |
29 | ||
30 | /sys/class/leds/<led>/hw_pattern | |
31 | -------------------------------- | |
32 | ||
33 | Specify a hardware pattern for a Qualcomm LPG LED. | |
34 | ||
35 | The pattern is a series of brightness and hold-time pairs, with the hold-time | |
36 | expressed in milliseconds. The hold time is a property of the pattern and must | |
4aea8f30 | 37 | therefore be identical for each element in the pattern (except for the pauses |
e98a860f BA |
38 | described below). As the LPG hardware is not able to perform the linear |
39 | transitions expected by the leds-trigger-pattern format, each entry in the | |
40 | pattern must be followed a zero-length entry of the same brightness. | |
24e2d05d BA |
41 | |
42 | Simple pattern:: | |
43 | ||
e98a860f | 44 | "255 500 255 0 0 500 0 0" |
24e2d05d BA |
45 | |
46 | ^ | |
47 | | | |
48 | 255 +----+ +----+ | |
49 | | | | | ... | |
50 | 0 | +----+ +---- | |
51 | +----------------------> | |
52 | 0 5 10 15 time (100ms) | |
53 | ||
54 | The LPG supports specifying a longer hold-time for the first and last element | |
55 | in the pattern, the so called "low pause" and "high pause". | |
56 | ||
57 | Low-pause pattern:: | |
58 | ||
e98a860f | 59 | "255 1000 255 0 0 500 0 0 255 500 255 0 0 500 0 0" |
24e2d05d BA |
60 | |
61 | ^ | |
62 | | | |
63 | 255 +--------+ +----+ +----+ +--------+ | |
64 | | | | | | | | | ... | |
65 | 0 | +----+ +----+ +----+ +---- | |
66 | +-----------------------------> | |
67 | 0 5 10 15 20 25 time (100ms) | |
68 | ||
4aea8f30 | 69 | Similarly, the last entry can be stretched by using a higher hold-time on the |
24e2d05d BA |
70 | last entry. |
71 | ||
72 | In order to save space in the shared lookup table the LPG supports "ping-pong" | |
73 | mode, in which case each run through the pattern is performed by first running | |
74 | the pattern forward, then backwards. This mode is automatically used by the | |
75 | driver when the given pattern is a palindrome. In this case the "high pause" | |
76 | denotes the wait time before the pattern is run in reverse and as such the | |
77 | specified hold-time of the middle item in the pattern is allowed to have a | |
78 | different hold-time. |