leds:lp55xx: fix firmware loading error
authorMilo Kim <milo.kim@ti.com>
Mon, 29 Jun 2015 00:39:14 +0000 (17:39 -0700)
committerBryan Wu <cooloney@gmail.com>
Mon, 29 Jun 2015 17:10:57 +0000 (10:10 -0700)
LP55xx driver uses not firmware file but raw data to load program through
the firmware interface.(Documents/leds/leds-lp55xx.txt)

  For example, here is how to run blinking green channel pattern.
  (The second engine is seleted and MUX is mapped to 'RGB' mode)
  echo 2 > /sys/bus/i2c/devices/xxxx/select_engine
  echo "RGB" > /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

However, '/sys/class/firmware/<device name>' is not created after the
firmware loader user helper was introduced.
This feature is used in the case below.

  As soon as the firmware download is requested by the driver, firmware
  class subsystem tries to find the binary file.
  If it gets failed, then it just falls back to user helper to load
  raw data manually. Here, you can see the device file under
  /sys/class/firmware/.

To make it happen, LP55xx driver requires two configurations.

  1. Enable CONFIG_FW_LOADER_USER_HELPER_FALLBACK in Kconfig
  2. Set option, 'FW_OPT_USERHELPER' on requesting the firmware data.
     It means the second option should be 'false' in
     request_firmware_nowait().
     This option enables to load firmware data manually by calling
     fw_load_from_user_helper().

Cc: linux-leds@vger.kernel.org
Signed-off-by: Milo Kim <milo.kim@ti.com>
Acked-by: Jacek Anaszewski <j.anaszewski@samsung.com>
Signed-off-by: Bryan Wu <cooloney@gmail.com>
drivers/leds/Kconfig
drivers/leds/leds-lp55xx-common.c

index d97ee24a774f59ced23f2c739bb9ca5e689940f4..06b6070141fa1f39d3e69db3b499496b80779112 100644 (file)
@@ -232,6 +232,7 @@ config LEDS_LP55XX_COMMON
        tristate "Common Driver for TI/National LP5521/5523/55231/5562/8501"
        depends on LEDS_LP5521 || LEDS_LP5523 || LEDS_LP5562 || LEDS_LP8501
        select FW_LOADER
+       select FW_LOADER_USER_HELPER_FALLBACK
        help
          This option supports common operations for LP5521/5523/55231/5562/8501
          devices.
index 77c26bc32eed561a26c4ccb45b3238e60184d017..96d51e9879c905d2c4eb6bac2325af174665a9f1 100644 (file)
@@ -223,7 +223,7 @@ static int lp55xx_request_firmware(struct lp55xx_chip *chip)
        const char *name = chip->cl->name;
        struct device *dev = &chip->cl->dev;
 
-       return request_firmware_nowait(THIS_MODULE, true, name, dev,
+       return request_firmware_nowait(THIS_MODULE, false, name, dev,
                                GFP_KERNEL, chip, lp55xx_firmware_loaded);
 }