131 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			131 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
Kernel driver for lp5523
 | 
						|
========================
 | 
						|
 | 
						|
* National Semiconductor LP5523 led driver chip
 | 
						|
* Datasheet: http://www.national.com/pf/LP/LP5523.html
 | 
						|
 | 
						|
Authors: Mathias Nyman, Yuri Zaporozhets, Samu Onkalo
 | 
						|
Contact: Samu Onkalo (samu.p.onkalo-at-nokia.com)
 | 
						|
 | 
						|
Description
 | 
						|
-----------
 | 
						|
LP5523 can drive up to 9 channels. Leds can be controlled directly via
 | 
						|
the led class control interface.
 | 
						|
The name of each channel is configurable in the platform data - name and label.
 | 
						|
There are three options to make the channel name.
 | 
						|
 | 
						|
a) Define the 'name' in the platform data
 | 
						|
To make specific channel name, then use 'name' platform data.
 | 
						|
/sys/class/leds/R1               (name: 'R1')
 | 
						|
/sys/class/leds/B1               (name: 'B1')
 | 
						|
 | 
						|
b) Use the 'label' with no 'name' field
 | 
						|
For one device name with channel number, then use 'label'.
 | 
						|
/sys/class/leds/RGB:channelN     (label: 'RGB', N: 0 ~ 8)
 | 
						|
 | 
						|
c) Default
 | 
						|
If both fields are NULL, 'lp5523' is used by default.
 | 
						|
/sys/class/leds/lp5523:channelN  (N: 0 ~ 8)
 | 
						|
 | 
						|
LP5523 has the internal program memory for running various LED patterns.
 | 
						|
There are two ways to run LED patterns.
 | 
						|
 | 
						|
1) Legacy interface - enginex_mode, enginex_load and enginex_leds
 | 
						|
  Control interface for the engines:
 | 
						|
  x is 1 .. 3
 | 
						|
  enginex_mode : disabled, load, run
 | 
						|
  enginex_load : microcode load
 | 
						|
  enginex_leds : led mux control
 | 
						|
 | 
						|
  cd /sys/class/leds/lp5523:channel2/device
 | 
						|
  echo "load" > engine3_mode
 | 
						|
  echo "9d80400004ff05ff437f0000" > engine3_load
 | 
						|
  echo "111111111" > engine3_leds
 | 
						|
  echo "run" > engine3_mode
 | 
						|
 | 
						|
  To stop the engine:
 | 
						|
  echo "disabled" > engine3_mode
 | 
						|
 | 
						|
2) Firmware interface - LP55xx common interface
 | 
						|
  For the details, please refer to 'firmware' section in leds-lp55xx.txt
 | 
						|
 | 
						|
LP5523 has three master faders. If a channel is mapped to one of
 | 
						|
the master faders, its output is dimmed based on the value of the master
 | 
						|
fader.
 | 
						|
 | 
						|
For example,
 | 
						|
 | 
						|
  echo "123000123" > master_fader_leds
 | 
						|
 | 
						|
creates the following channel-fader mappings:
 | 
						|
 | 
						|
  channel 0,6 to master_fader1
 | 
						|
  channel 1,7 to master_fader2
 | 
						|
  channel 2,8 to master_fader3
 | 
						|
 | 
						|
Then, to have 25% of the original output on channel 0,6:
 | 
						|
 | 
						|
  echo 64 > master_fader1
 | 
						|
 | 
						|
To have 0% of the original output (i.e. no output) channel 1,7:
 | 
						|
 | 
						|
  echo 0 > master_fader2
 | 
						|
 | 
						|
To have 100% of the original output (i.e. no dimming) on channel 2,8:
 | 
						|
 | 
						|
  echo 255 > master_fader3
 | 
						|
 | 
						|
To clear all master fader controls:
 | 
						|
 | 
						|
  echo "000000000" > master_fader_leds
 | 
						|
 | 
						|
Selftest uses always the current from the platform data.
 | 
						|
 | 
						|
Each channel contains led current settings.
 | 
						|
/sys/class/leds/lp5523:channel2/led_current - RW
 | 
						|
/sys/class/leds/lp5523:channel2/max_current - RO
 | 
						|
Format: 10x mA i.e 10 means 1.0 mA
 | 
						|
 | 
						|
Example platform data:
 | 
						|
 | 
						|
Note - chan_nr can have values between 0 and 8.
 | 
						|
 | 
						|
static struct lp55xx_led_config lp5523_led_config[] = {
 | 
						|
        {
 | 
						|
		.name		= "D1",
 | 
						|
                .chan_nr        = 0,
 | 
						|
                .led_current    = 50,
 | 
						|
		.max_current    = 130,
 | 
						|
        },
 | 
						|
...
 | 
						|
        {
 | 
						|
                .chan_nr        = 8,
 | 
						|
                .led_current    = 50,
 | 
						|
		.max_current    = 130,
 | 
						|
        }
 | 
						|
};
 | 
						|
 | 
						|
static int lp5523_setup(void)
 | 
						|
{
 | 
						|
	/* Setup HW resources */
 | 
						|
}
 | 
						|
 | 
						|
static void lp5523_release(void)
 | 
						|
{
 | 
						|
	/* Release HW resources */
 | 
						|
}
 | 
						|
 | 
						|
static void lp5523_enable(bool state)
 | 
						|
{
 | 
						|
	/* Control chip enable signal */
 | 
						|
}
 | 
						|
 | 
						|
static struct lp55xx_platform_data lp5523_platform_data = {
 | 
						|
        .led_config     = lp5523_led_config,
 | 
						|
        .num_channels   = ARRAY_SIZE(lp5523_led_config),
 | 
						|
        .clock_mode     = LP55XX_CLOCK_EXT,
 | 
						|
        .setup_resources   = lp5523_setup,
 | 
						|
        .release_resources = lp5523_release,
 | 
						|
        .enable            = lp5523_enable,
 | 
						|
};
 |