1*8dab9197SMauro Carvalho Chehab======================== 2*8dab9197SMauro Carvalho ChehabKernel driver for lp5521 3*8dab9197SMauro Carvalho Chehab======================== 4*8dab9197SMauro Carvalho Chehab 5*8dab9197SMauro Carvalho Chehab* National Semiconductor LP5521 led driver chip 6*8dab9197SMauro Carvalho Chehab* Datasheet: http://www.national.com/pf/LP/LP5521.html 7*8dab9197SMauro Carvalho Chehab 8*8dab9197SMauro Carvalho ChehabAuthors: Mathias Nyman, Yuri Zaporozhets, Samu Onkalo 9*8dab9197SMauro Carvalho Chehab 10*8dab9197SMauro Carvalho ChehabContact: Samu Onkalo (samu.p.onkalo-at-nokia.com) 11*8dab9197SMauro Carvalho Chehab 12*8dab9197SMauro Carvalho ChehabDescription 13*8dab9197SMauro Carvalho Chehab----------- 14*8dab9197SMauro Carvalho Chehab 15*8dab9197SMauro Carvalho ChehabLP5521 can drive up to 3 channels. Leds can be controlled directly via 16*8dab9197SMauro Carvalho Chehabthe led class control interface. Channels have generic names: 17*8dab9197SMauro Carvalho Chehablp5521:channelx, where x is 0 .. 2 18*8dab9197SMauro Carvalho Chehab 19*8dab9197SMauro Carvalho ChehabAll three channels can be also controlled using the engine micro programs. 20*8dab9197SMauro Carvalho ChehabMore details of the instructions can be found from the public data sheet. 21*8dab9197SMauro Carvalho Chehab 22*8dab9197SMauro Carvalho ChehabLP5521 has the internal program memory for running various LED patterns. 23*8dab9197SMauro Carvalho ChehabThere are two ways to run LED patterns. 24*8dab9197SMauro Carvalho Chehab 25*8dab9197SMauro Carvalho Chehab1) Legacy interface - enginex_mode and enginex_load 26*8dab9197SMauro Carvalho Chehab Control interface for the engines: 27*8dab9197SMauro Carvalho Chehab 28*8dab9197SMauro Carvalho Chehab x is 1 .. 3 29*8dab9197SMauro Carvalho Chehab 30*8dab9197SMauro Carvalho Chehab enginex_mode: 31*8dab9197SMauro Carvalho Chehab disabled, load, run 32*8dab9197SMauro Carvalho Chehab enginex_load: 33*8dab9197SMauro Carvalho Chehab store program (visible only in engine load mode) 34*8dab9197SMauro Carvalho Chehab 35*8dab9197SMauro Carvalho Chehab Example (start to blink the channel 2 led):: 36*8dab9197SMauro Carvalho Chehab 37*8dab9197SMauro Carvalho Chehab cd /sys/class/leds/lp5521:channel2/device 38*8dab9197SMauro Carvalho Chehab echo "load" > engine3_mode 39*8dab9197SMauro Carvalho Chehab echo "037f4d0003ff6000" > engine3_load 40*8dab9197SMauro Carvalho Chehab echo "run" > engine3_mode 41*8dab9197SMauro Carvalho Chehab 42*8dab9197SMauro Carvalho Chehab To stop the engine:: 43*8dab9197SMauro Carvalho Chehab 44*8dab9197SMauro Carvalho Chehab echo "disabled" > engine3_mode 45*8dab9197SMauro Carvalho Chehab 46*8dab9197SMauro Carvalho Chehab2) Firmware interface - LP55xx common interface 47*8dab9197SMauro Carvalho Chehab 48*8dab9197SMauro Carvalho ChehabFor the details, please refer to 'firmware' section in leds-lp55xx.txt 49*8dab9197SMauro Carvalho Chehab 50*8dab9197SMauro Carvalho Chehabsysfs contains a selftest entry. 51*8dab9197SMauro Carvalho Chehab 52*8dab9197SMauro Carvalho ChehabThe test communicates with the chip and checks that 53*8dab9197SMauro Carvalho Chehabthe clock mode is automatically set to the requested one. 54*8dab9197SMauro Carvalho Chehab 55*8dab9197SMauro Carvalho ChehabEach channel has its own led current settings. 56*8dab9197SMauro Carvalho Chehab 57*8dab9197SMauro Carvalho Chehab- /sys/class/leds/lp5521:channel0/led_current - RW 58*8dab9197SMauro Carvalho Chehab- /sys/class/leds/lp5521:channel0/max_current - RO 59*8dab9197SMauro Carvalho Chehab 60*8dab9197SMauro Carvalho ChehabFormat: 10x mA i.e 10 means 1.0 mA 61*8dab9197SMauro Carvalho Chehab 62*8dab9197SMauro Carvalho Chehabexample platform data:: 63*8dab9197SMauro Carvalho Chehab 64*8dab9197SMauro Carvalho Chehab static struct lp55xx_led_config lp5521_led_config[] = { 65*8dab9197SMauro Carvalho Chehab { 66*8dab9197SMauro Carvalho Chehab .name = "red", 67*8dab9197SMauro Carvalho Chehab .chan_nr = 0, 68*8dab9197SMauro Carvalho Chehab .led_current = 50, 69*8dab9197SMauro Carvalho Chehab .max_current = 130, 70*8dab9197SMauro Carvalho Chehab }, { 71*8dab9197SMauro Carvalho Chehab .name = "green", 72*8dab9197SMauro Carvalho Chehab .chan_nr = 1, 73*8dab9197SMauro Carvalho Chehab .led_current = 0, 74*8dab9197SMauro Carvalho Chehab .max_current = 130, 75*8dab9197SMauro Carvalho Chehab }, { 76*8dab9197SMauro Carvalho Chehab .name = "blue", 77*8dab9197SMauro Carvalho Chehab .chan_nr = 2, 78*8dab9197SMauro Carvalho Chehab .led_current = 0, 79*8dab9197SMauro Carvalho Chehab .max_current = 130, 80*8dab9197SMauro Carvalho Chehab } 81*8dab9197SMauro Carvalho Chehab }; 82*8dab9197SMauro Carvalho Chehab 83*8dab9197SMauro Carvalho Chehab static int lp5521_setup(void) 84*8dab9197SMauro Carvalho Chehab { 85*8dab9197SMauro Carvalho Chehab /* setup HW resources */ 86*8dab9197SMauro Carvalho Chehab } 87*8dab9197SMauro Carvalho Chehab 88*8dab9197SMauro Carvalho Chehab static void lp5521_release(void) 89*8dab9197SMauro Carvalho Chehab { 90*8dab9197SMauro Carvalho Chehab /* Release HW resources */ 91*8dab9197SMauro Carvalho Chehab } 92*8dab9197SMauro Carvalho Chehab 93*8dab9197SMauro Carvalho Chehab static void lp5521_enable(bool state) 94*8dab9197SMauro Carvalho Chehab { 95*8dab9197SMauro Carvalho Chehab /* Control of chip enable signal */ 96*8dab9197SMauro Carvalho Chehab } 97*8dab9197SMauro Carvalho Chehab 98*8dab9197SMauro Carvalho Chehab static struct lp55xx_platform_data lp5521_platform_data = { 99*8dab9197SMauro Carvalho Chehab .led_config = lp5521_led_config, 100*8dab9197SMauro Carvalho Chehab .num_channels = ARRAY_SIZE(lp5521_led_config), 101*8dab9197SMauro Carvalho Chehab .clock_mode = LP55XX_CLOCK_EXT, 102*8dab9197SMauro Carvalho Chehab .setup_resources = lp5521_setup, 103*8dab9197SMauro Carvalho Chehab .release_resources = lp5521_release, 104*8dab9197SMauro Carvalho Chehab .enable = lp5521_enable, 105*8dab9197SMauro Carvalho Chehab }; 106*8dab9197SMauro Carvalho Chehab 107*8dab9197SMauro Carvalho ChehabNote: 108*8dab9197SMauro Carvalho Chehab chan_nr can have values between 0 and 2. 109*8dab9197SMauro Carvalho Chehab The name of each channel can be configurable. 110*8dab9197SMauro Carvalho Chehab If the name field is not defined, the default name will be set to 'xxxx:channelN' 111*8dab9197SMauro Carvalho Chehab (XXXX : pdata->label or i2c client name, N : channel number) 112*8dab9197SMauro Carvalho Chehab 113*8dab9197SMauro Carvalho Chehab 114*8dab9197SMauro Carvalho ChehabIf the current is set to 0 in the platform data, that channel is 115*8dab9197SMauro Carvalho Chehabdisabled and it is not visible in the sysfs. 116