Qualcomm LPG 的内核驱动程序¶
描述¶
Qualcomm LPG 可在各种 Qualcomm PMIC 中找到,它由多个 PWM 通道、一个可编程的模式查找表和一个 RGB LED 电流吸收器组成。
为了方便各种用例,LPG 通道可以作为单独的 LED 公开,也可以组合在一起作为 RGB LED,或者作为 PWM 通道访问。每个 PWM 通道的输出被路由到其他硬件模块,例如 RGB 电流吸收器、GPIO 引脚等。
每个 PWM 通道的运行周期可以在 27us 到 384 秒之间,并且占空比具有 9 位分辨率。
为了在 CPU 子系统处于更深的空闲状态时提供状态通知支持,LPG 提供了模式支持。它由一个共享的亮度值查找表和每个通道的属性组成,以选择要使用的表中的范围、速率以及模式是否应重复。
可以使用 “pattern” 触发器,使用 hw_pattern 属性来编程通道的模式。
/sys/class/leds/<led>/hw_pattern¶
为 Qualcomm LPG LED 指定硬件模式。
该模式是一系列亮度值和保持时间对,其中保持时间以毫秒为单位表示。保持时间是模式的属性,因此必须对于模式中的每个元素都相同(除了下面描述的暂停)。由于 LPG 硬件无法执行 leds-trigger-pattern 格式所期望的线性转换,因此模式中的每个条目之后都必须跟随一个相同亮度的零长度条目。
简单模式
"255 500 255 0 0 500 0 0"
^
|
255 +----+ +----+
| | | | ...
0 | +----+ +----
+---------------------->
0 5 10 15 time (100ms)
LPG 支持为模式中的第一个和最后一个元素指定较长的保持时间,即所谓的“低暂停”和“高暂停”。
低暂停模式
"255 1000 255 0 0 500 0 0 255 500 255 0 0 500 0 0"
^
|
255 +--------+ +----+ +----+ +--------+
| | | | | | | | ...
0 | +----+ +----+ +----+ +----
+----------------------------->
0 5 10 15 20 25 time (100ms)
类似地,可以使用最后一个条目上的更高保持时间来延长最后一个条目。
为了节省共享查找表中的空间,LPG 支持“乒乓”模式,在这种模式下,每次运行模式都是先向前运行模式,然后向后运行。当给定模式是回文时,驱动程序会自动使用此模式。在这种情况下,“高暂停”表示模式反向运行前的等待时间,因此允许模式中间项的指定保持时间具有不同的保持时间。