Re: [PATCH 3/3] leds: lp5523: Support LED MUX configuration onrunning a pattern

From: Bryan Wu
Date: Mon Dec 02 2013 - 14:44:05 EST


On Wed, Nov 20, 2013 at 10:14 PM, Milo Kim <milo.kim@xxxxxx> wrote:
> There are two ways to run a pattern in LP5523.
> One is using legacy sysfs files such as 'enginex_mode','enginex_load' and
> 'enginex_leds'. ('x' is from 1 to 3).
> Among them, 'enginex_leds' are used for selecting specific LED channel MUX.
> (MUX means which LEDs are used for running a pattern from LED 1 to 9.)
>
> The other way is using the firmware interface.
> In this mode, the default LED MUX strings are used.
> In other words, LED MUX is not configurable on the fly.
>
> This patch enables dynamic LED MUX configuration when the firmware is loaded.
> By accessing the sysfs file 'enginex_leds', the LED channels can be configured.
> To synchronize the operation mode, each engine mode should be set to 'LOAD'.
>
> The documentation is updated as well.
>

Thanks, I will merge this one.

-Bryan

> Cc: Pali Rohár <pali.rohar@xxxxxxxxx>
> Signed-off-by: Milo Kim <milo.kim@xxxxxx>
> ---
> Documentation/leds/leds-lp55xx.txt | 10 +++++++++-
> drivers/leds/leds-lp55xx-common.c | 2 ++
> 2 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/Documentation/leds/leds-lp55xx.txt b/Documentation/leds/leds-lp55xx.txt
> index 82713ff..bcea12a 100644
> --- a/Documentation/leds/leds-lp55xx.txt
> +++ b/Documentation/leds/leds-lp55xx.txt
> @@ -73,6 +73,10 @@ select_engine : Select which engine is used for running program
> run_engine : Start program which is loaded via the firmware interface
> firmware : Load program data
>
> +In case of LP5523, one more command is required, 'enginex_leds'.
> +It is used for selecting LED output(s) at each engine number.
> +In more details, please refer to 'leds-lp5523.txt'.
> +
> For example, run blinking pattern in engine #1 of LP5521
> echo 1 > /sys/bus/i2c/devices/xxxx/select_engine
> echo 1 > /sys/class/firmware/lp5521/loading
> @@ -81,10 +85,12 @@ echo 0 > /sys/class/firmware/lp5521/loading
> echo 1 > /sys/bus/i2c/devices/xxxx/run_engine
>
> For example, run blinking pattern in engine #3 of LP55231
> +Two LEDs are configured as pattern output channels.
> echo 3 > /sys/bus/i2c/devices/xxxx/select_engine
> echo 1 > /sys/class/firmware/lp55231/loading
> echo "9d0740ff7e0040007e00a0010000" > /sys/class/firmware/lp55231/data
> echo 0 > /sys/class/firmware/lp55231/loading
> +echo "000001100" > /sys/bus/i2c/devices/xxxx/engine3_leds
> echo 1 > /sys/bus/i2c/devices/xxxx/run_engine
>
> To start blinking patterns in engine #2 and #3 simultaneously,
> @@ -99,17 +105,19 @@ done
> echo 1 > /sys/class/leds/red/device/run_engine
>
> Here is another example for LP5523.
> +Full LED strings are selected by 'engine2_leds'.
> echo 2 > /sys/bus/i2c/devices/xxxx/select_engine
> echo 1 > /sys/class/firmware/lp5523/loading
> echo "9d80400004ff05ff437f0000" > /sys/class/firmware/lp5523/data
> echo 0 > /sys/class/firmware/lp5523/loading
> +echo "111111111" > /sys/bus/i2c/devices/xxxx/engine2_leds
> echo 1 > /sys/bus/i2c/devices/xxxx/run_engine
>
> As soon as 'loading' is set to 0, registered callback is called.
> Inside the callback, the selected engine is loaded and memory is updated.
> To run programmed pattern, 'run_engine' attribute should be enabled.
>
> -The pattern sqeuence of LP8501 is same as LP5523.
> +The pattern sqeuence of LP8501 is similar to LP5523.
> However pattern data is specific.
> Ex 1) Engine 1 is used
> echo 1 > /sys/bus/i2c/devices/xxxx/select_engine
> diff --git a/drivers/leds/leds-lp55xx-common.c b/drivers/leds/leds-lp55xx-common.c
> index 9acc6bb..88317b4 100644
> --- a/drivers/leds/leds-lp55xx-common.c
> +++ b/drivers/leds/leds-lp55xx-common.c
> @@ -210,6 +210,7 @@ static void lp55xx_firmware_loaded(const struct firmware *fw, void *context)
> {
> struct lp55xx_chip *chip = context;
> struct device *dev = &chip->cl->dev;
> + enum lp55xx_engine_index idx = chip->engine_idx;
>
> if (!fw) {
> dev_err(dev, "firmware request failed\n");
> @@ -219,6 +220,7 @@ static void lp55xx_firmware_loaded(const struct firmware *fw, void *context)
> /* handling firmware data is chip dependent */
> mutex_lock(&chip->lock);
>
> + chip->engines[idx - 1].mode = LP55XX_ENGINE_LOAD;
> chip->fw = fw;
> if (chip->cfg->firmware_cb)
> chip->cfg->firmware_cb(chip);
> --
> 1.7.9.5
>
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/