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 中不可见。