xref: /linux/Documentation/leds/leds-lp5521.rst (revision 0898782247ae533d1f4e47a06bc5d4870931b284)
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