lp5562 的核心驅動程式

  • TI LP5562 LED 驅動

作者:Milo(Woogyom) Kim <milo.kim@ti.com>

描述

LP5562 最多可以驅動 4 個通道。R/G/B 和白色。LED 可以透過 led 類控制介面直接控制。

所有四個通道也可以使用引擎微程式進行控制。LP5562 具有用於執行各種 LED 模式的內部程式儲存器。有關詳細資訊,請參閱 LP5521/LP5523/LP55231/LP5562/LP8501 通用驅動程式 中的“韌體”部分

裝置屬性

engine_mux

LP5562 中分配了 3 個引擎,但通道數為 4。因此,每個通道應對映到引擎編號。

值:RGB 或 W

此屬性用於使用韌體介面程式設計 LED 資料。與 LP5521/LP5523/55231 不同,LP5562 具有引擎複用的獨特功能,因此需要額外的 sysfs

LED 對映

紅色

...

引擎 1(固定)

綠色

...

引擎 2(固定)

藍色

...

引擎 3(固定)

白色

...

引擎 1 或 2 或 3(可選)

如何使用 engine_mux 載入程式資料

在載入 LP5562 程式資料之前,應在引擎選擇和載入韌體之間寫入 engine_mux。引擎複用器有兩種不同的模式,RGB 和 W。RGB 用於載入 RGB 程式資料,W 用於載入 W 程式資料。

例如,執行閃爍的綠色通道模式

echo 2 > /sys/bus/i2c/devices/xxxx/select_engine     # 2 is for green channel
echo "RGB" > /sys/bus/i2c/devices/xxxx/engine_mux    # engine mux for RGB
echo 1 > /sys/class/firmware/lp5562/loading
echo "4000600040FF6000" > /sys/class/firmware/lp5562/data
echo 0 > /sys/class/firmware/lp5562/loading
echo 1 > /sys/bus/i2c/devices/xxxx/run_engine

執行閃爍的白色模式

echo 1 or 2 or 3 > /sys/bus/i2c/devices/xxxx/select_engine
echo "W" > /sys/bus/i2c/devices/xxxx/engine_mux
echo 1 > /sys/class/firmware/lp5562/loading
echo "4000600040FF6000" > /sys/class/firmware/lp5562/data
echo 0 > /sys/class/firmware/lp5562/loading
echo 1 > /sys/bus/i2c/devices/xxxx/run_engine

如何載入預定義的模式

設定每個通道的電流

與 LP5521 和 LP5523/55231 一樣,LP5562 提供了 LED 電流設定。“led_current”和“max_current”被使用。

平臺數據示例

static struct lp55xx_led_config lp5562_led_config[] = {
        {
                .name           = "R",
                .chan_nr        = 0,
                .led_current    = 20,
                .max_current    = 40,
        },
        {
                .name           = "G",
                .chan_nr        = 1,
                .led_current    = 20,
                .max_current    = 40,
        },
        {
                .name           = "B",
                .chan_nr        = 2,
                .led_current    = 20,
                .max_current    = 40,
        },
        {
                .name           = "W",
                .chan_nr        = 3,
                .led_current    = 20,
                .max_current    = 40,
        },
};

static int lp5562_setup(void)
{
        /* setup HW resources */
}

static void lp5562_release(void)
{
        /* Release HW resources */
}

static void lp5562_enable(bool state)
{
        /* Control of chip enable signal */
}

static struct lp55xx_platform_data lp5562_platform_data = {
        .led_config     = lp5562_led_config,
        .num_channels   = ARRAY_SIZE(lp5562_led_config),
        .setup_resources   = lp5562_setup,
        .release_resources = lp5562_release,
        .enable            = lp5562_enable,
};

要配置平臺特定資料,請使用 lp55xx_platform_data 結構

如果在平臺數據中將電流設定為 0,則該通道將被停用,並且在 sysfs 中不可見。