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 支援為模式中的第一個和最後一個元素指定更長的保持時間,即所謂的 “low pause” 和 “high pause”。
低暫停模式
"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 支援 “乒乓” 模式,在這種模式下,每次執行模式時,首先正向執行模式,然後反向執行。當給定模式是迴文時,驅動程式會自動使用此模式。在這種情況下,“high pause” 表示模式反向執行之前的等待時間,因此允許模式中間項的指定保持時間具有不同的保持時間。