1*4882a593Smuzhiyun======================== 2*4882a593SmuzhiyunKernel driver for lp5523 3*4882a593Smuzhiyun======================== 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun* National Semiconductor LP5523 led driver chip 6*4882a593Smuzhiyun* Datasheet: http://www.national.com/pf/LP/LP5523.html 7*4882a593Smuzhiyun 8*4882a593SmuzhiyunAuthors: Mathias Nyman, Yuri Zaporozhets, Samu Onkalo 9*4882a593SmuzhiyunContact: Samu Onkalo (samu.p.onkalo-at-nokia.com) 10*4882a593Smuzhiyun 11*4882a593SmuzhiyunDescription 12*4882a593Smuzhiyun----------- 13*4882a593SmuzhiyunLP5523 can drive up to 9 channels. Leds can be controlled directly via 14*4882a593Smuzhiyunthe led class control interface. 15*4882a593SmuzhiyunThe name of each channel is configurable in the platform data - name and label. 16*4882a593SmuzhiyunThere are three options to make the channel name. 17*4882a593Smuzhiyun 18*4882a593Smuzhiyuna) Define the 'name' in the platform data 19*4882a593Smuzhiyun 20*4882a593SmuzhiyunTo make specific channel name, then use 'name' platform data. 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun- /sys/class/leds/R1 (name: 'R1') 23*4882a593Smuzhiyun- /sys/class/leds/B1 (name: 'B1') 24*4882a593Smuzhiyun 25*4882a593Smuzhiyunb) Use the 'label' with no 'name' field 26*4882a593Smuzhiyun 27*4882a593SmuzhiyunFor one device name with channel number, then use 'label'. 28*4882a593Smuzhiyun- /sys/class/leds/RGB:channelN (label: 'RGB', N: 0 ~ 8) 29*4882a593Smuzhiyun 30*4882a593Smuzhiyunc) Default 31*4882a593Smuzhiyun 32*4882a593SmuzhiyunIf both fields are NULL, 'lp5523' is used by default. 33*4882a593Smuzhiyun- /sys/class/leds/lp5523:channelN (N: 0 ~ 8) 34*4882a593Smuzhiyun 35*4882a593SmuzhiyunLP5523 has the internal program memory for running various LED patterns. 36*4882a593SmuzhiyunThere are two ways to run LED patterns. 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun1) Legacy interface - enginex_mode, enginex_load and enginex_leds 39*4882a593Smuzhiyun 40*4882a593Smuzhiyun Control interface for the engines: 41*4882a593Smuzhiyun 42*4882a593Smuzhiyun x is 1 .. 3 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun enginex_mode: 45*4882a593Smuzhiyun disabled, load, run 46*4882a593Smuzhiyun enginex_load: 47*4882a593Smuzhiyun microcode load 48*4882a593Smuzhiyun enginex_leds: 49*4882a593Smuzhiyun led mux control 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun :: 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun cd /sys/class/leds/lp5523:channel2/device 54*4882a593Smuzhiyun echo "load" > engine3_mode 55*4882a593Smuzhiyun echo "9d80400004ff05ff437f0000" > engine3_load 56*4882a593Smuzhiyun echo "111111111" > engine3_leds 57*4882a593Smuzhiyun echo "run" > engine3_mode 58*4882a593Smuzhiyun 59*4882a593Smuzhiyun To stop the engine:: 60*4882a593Smuzhiyun 61*4882a593Smuzhiyun echo "disabled" > engine3_mode 62*4882a593Smuzhiyun 63*4882a593Smuzhiyun2) Firmware interface - LP55xx common interface 64*4882a593Smuzhiyun 65*4882a593SmuzhiyunFor the details, please refer to 'firmware' section in leds-lp55xx.txt 66*4882a593Smuzhiyun 67*4882a593SmuzhiyunLP5523 has three master faders. If a channel is mapped to one of 68*4882a593Smuzhiyunthe master faders, its output is dimmed based on the value of the master 69*4882a593Smuzhiyunfader. 70*4882a593Smuzhiyun 71*4882a593SmuzhiyunFor example:: 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun echo "123000123" > master_fader_leds 74*4882a593Smuzhiyun 75*4882a593Smuzhiyuncreates the following channel-fader mappings:: 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun channel 0,6 to master_fader1 78*4882a593Smuzhiyun channel 1,7 to master_fader2 79*4882a593Smuzhiyun channel 2,8 to master_fader3 80*4882a593Smuzhiyun 81*4882a593SmuzhiyunThen, to have 25% of the original output on channel 0,6:: 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun echo 64 > master_fader1 84*4882a593Smuzhiyun 85*4882a593SmuzhiyunTo have 0% of the original output (i.e. no output) channel 1,7:: 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun echo 0 > master_fader2 88*4882a593Smuzhiyun 89*4882a593SmuzhiyunTo have 100% of the original output (i.e. no dimming) on channel 2,8:: 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun echo 255 > master_fader3 92*4882a593Smuzhiyun 93*4882a593SmuzhiyunTo clear all master fader controls:: 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun echo "000000000" > master_fader_leds 96*4882a593Smuzhiyun 97*4882a593SmuzhiyunSelftest uses always the current from the platform data. 98*4882a593Smuzhiyun 99*4882a593SmuzhiyunEach channel contains led current settings. 100*4882a593Smuzhiyun- /sys/class/leds/lp5523:channel2/led_current - RW 101*4882a593Smuzhiyun- /sys/class/leds/lp5523:channel2/max_current - RO 102*4882a593Smuzhiyun 103*4882a593SmuzhiyunFormat: 10x mA i.e 10 means 1.0 mA 104*4882a593Smuzhiyun 105*4882a593SmuzhiyunExample platform data:: 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun static struct lp55xx_led_config lp5523_led_config[] = { 108*4882a593Smuzhiyun { 109*4882a593Smuzhiyun .name = "D1", 110*4882a593Smuzhiyun .chan_nr = 0, 111*4882a593Smuzhiyun .led_current = 50, 112*4882a593Smuzhiyun .max_current = 130, 113*4882a593Smuzhiyun }, 114*4882a593Smuzhiyun ... 115*4882a593Smuzhiyun { 116*4882a593Smuzhiyun .chan_nr = 8, 117*4882a593Smuzhiyun .led_current = 50, 118*4882a593Smuzhiyun .max_current = 130, 119*4882a593Smuzhiyun } 120*4882a593Smuzhiyun }; 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun static int lp5523_setup(void) 123*4882a593Smuzhiyun { 124*4882a593Smuzhiyun /* Setup HW resources */ 125*4882a593Smuzhiyun } 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun static void lp5523_release(void) 128*4882a593Smuzhiyun { 129*4882a593Smuzhiyun /* Release HW resources */ 130*4882a593Smuzhiyun } 131*4882a593Smuzhiyun 132*4882a593Smuzhiyun static void lp5523_enable(bool state) 133*4882a593Smuzhiyun { 134*4882a593Smuzhiyun /* Control chip enable signal */ 135*4882a593Smuzhiyun } 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun static struct lp55xx_platform_data lp5523_platform_data = { 138*4882a593Smuzhiyun .led_config = lp5523_led_config, 139*4882a593Smuzhiyun .num_channels = ARRAY_SIZE(lp5523_led_config), 140*4882a593Smuzhiyun .clock_mode = LP55XX_CLOCK_EXT, 141*4882a593Smuzhiyun .setup_resources = lp5523_setup, 142*4882a593Smuzhiyun .release_resources = lp5523_release, 143*4882a593Smuzhiyun .enable = lp5523_enable, 144*4882a593Smuzhiyun }; 145*4882a593Smuzhiyun 146*4882a593SmuzhiyunNote 147*4882a593Smuzhiyun chan_nr can have values between 0 and 8. 148