Re: [PATCH RESEND] leds:lp55xx: fix firmware loading error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Milo,

Thanks for the update.

On 06/29/2015 02:39 AM, Milo Kim wrote:
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: Bryan Wu <cooloney@xxxxxxxxx>
Cc: Jacek Anaszewski <j.anaszewski@xxxxxxxxxxx>
Cc: linux-leds@xxxxxxxxxxxxxxx
Signed-off-by: Milo Kim <milo.kim@xxxxxx>
---
  drivers/leds/Kconfig              | 1 +
  drivers/leds/leds-lp55xx-common.c | 2 +-
  2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig
index 966b960..a39d608 100644
--- a/drivers/leds/Kconfig
+++ b/drivers/leds/Kconfig
@@ -206,6 +206,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.
diff --git a/drivers/leds/leds-lp55xx-common.c b/drivers/leds/leds-lp55xx-common.c
index 77c26bc..96d51e9 100644
--- a/drivers/leds/leds-lp55xx-common.c
+++ b/drivers/leds/leds-lp55xx-common.c
@@ -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);
  }



Acked-by: Jacek Anaszewski <j.anaszewski@xxxxxxxxxxx>

--
Best Regards,
Jacek Anaszewski
--
To unsubscribe from this list: send the line "unsubscribe linux-leds" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux