18dab9197SMauro Carvalho Chehab======================== 28dab9197SMauro Carvalho ChehabKernel driver for lp5562 38dab9197SMauro Carvalho Chehab======================== 48dab9197SMauro Carvalho Chehab 58dab9197SMauro Carvalho Chehab* TI LP5562 LED Driver 68dab9197SMauro Carvalho Chehab 78dab9197SMauro Carvalho ChehabAuthor: Milo(Woogyom) Kim <milo.kim@ti.com> 88dab9197SMauro Carvalho Chehab 98dab9197SMauro Carvalho ChehabDescription 108dab9197SMauro Carvalho Chehab=========== 118dab9197SMauro Carvalho Chehab 128dab9197SMauro Carvalho Chehab LP5562 can drive up to 4 channels. R/G/B and White. 138dab9197SMauro Carvalho Chehab LEDs can be controlled directly via the led class control interface. 148dab9197SMauro Carvalho Chehab 158dab9197SMauro Carvalho Chehab All four channels can be also controlled using the engine micro programs. 168dab9197SMauro Carvalho Chehab LP5562 has the internal program memory for running various LED patterns. 178dab9197SMauro Carvalho Chehab For the details, please refer to 'firmware' section in leds-lp55xx.txt 188dab9197SMauro Carvalho Chehab 198dab9197SMauro Carvalho ChehabDevice attribute 208dab9197SMauro Carvalho Chehab================ 218dab9197SMauro Carvalho Chehab 228dab9197SMauro Carvalho Chehabengine_mux 238dab9197SMauro Carvalho Chehab 3 Engines are allocated in LP5562, but the number of channel is 4. 248dab9197SMauro Carvalho Chehab Therefore each channel should be mapped to the engine number. 258dab9197SMauro Carvalho Chehab 268dab9197SMauro Carvalho Chehab Value: RGB or W 278dab9197SMauro Carvalho Chehab 288dab9197SMauro Carvalho Chehab This attribute is used for programming LED data with the firmware interface. 298dab9197SMauro Carvalho Chehab Unlike the LP5521/LP5523/55231, LP5562 has unique feature for the engine mux, 308dab9197SMauro Carvalho Chehab so additional sysfs is required 318dab9197SMauro Carvalho Chehab 328dab9197SMauro Carvalho Chehab LED Map 338dab9197SMauro Carvalho Chehab 348dab9197SMauro Carvalho Chehab ===== === =============================== 358dab9197SMauro Carvalho Chehab Red ... Engine 1 (fixed) 368dab9197SMauro Carvalho Chehab Green ... Engine 2 (fixed) 378dab9197SMauro Carvalho Chehab Blue ... Engine 3 (fixed) 388dab9197SMauro Carvalho Chehab White ... Engine 1 or 2 or 3 (selective) 398dab9197SMauro Carvalho Chehab ===== === =============================== 408dab9197SMauro Carvalho Chehab 418dab9197SMauro Carvalho ChehabHow to load the program data using engine_mux 428dab9197SMauro Carvalho Chehab============================================= 438dab9197SMauro Carvalho Chehab 448dab9197SMauro Carvalho Chehab Before loading the LP5562 program data, engine_mux should be written between 458dab9197SMauro Carvalho Chehab the engine selection and loading the firmware. 468dab9197SMauro Carvalho Chehab Engine mux has two different mode, RGB and W. 478dab9197SMauro Carvalho Chehab RGB is used for loading RGB program data, W is used for W program data. 488dab9197SMauro Carvalho Chehab 498dab9197SMauro Carvalho Chehab For example, run blinking green channel pattern:: 508dab9197SMauro Carvalho Chehab 518dab9197SMauro Carvalho Chehab echo 2 > /sys/bus/i2c/devices/xxxx/select_engine # 2 is for green channel 528dab9197SMauro Carvalho Chehab echo "RGB" > /sys/bus/i2c/devices/xxxx/engine_mux # engine mux for RGB 538dab9197SMauro Carvalho Chehab echo 1 > /sys/class/firmware/lp5562/loading 548dab9197SMauro Carvalho Chehab echo "4000600040FF6000" > /sys/class/firmware/lp5562/data 558dab9197SMauro Carvalho Chehab echo 0 > /sys/class/firmware/lp5562/loading 568dab9197SMauro Carvalho Chehab echo 1 > /sys/bus/i2c/devices/xxxx/run_engine 578dab9197SMauro Carvalho Chehab 588dab9197SMauro Carvalho Chehab To run a blinking white pattern:: 598dab9197SMauro Carvalho Chehab 608dab9197SMauro Carvalho Chehab echo 1 or 2 or 3 > /sys/bus/i2c/devices/xxxx/select_engine 618dab9197SMauro Carvalho Chehab echo "W" > /sys/bus/i2c/devices/xxxx/engine_mux 628dab9197SMauro Carvalho Chehab echo 1 > /sys/class/firmware/lp5562/loading 638dab9197SMauro Carvalho Chehab echo "4000600040FF6000" > /sys/class/firmware/lp5562/data 648dab9197SMauro Carvalho Chehab echo 0 > /sys/class/firmware/lp5562/loading 658dab9197SMauro Carvalho Chehab echo 1 > /sys/bus/i2c/devices/xxxx/run_engine 668dab9197SMauro Carvalho Chehab 678dab9197SMauro Carvalho ChehabHow to load the predefined patterns 688dab9197SMauro Carvalho Chehab=================================== 698dab9197SMauro Carvalho Chehab 708dab9197SMauro Carvalho Chehab Please refer to 'leds-lp55xx.txt" 718dab9197SMauro Carvalho Chehab 728dab9197SMauro Carvalho ChehabSetting Current of Each Channel 738dab9197SMauro Carvalho Chehab=============================== 748dab9197SMauro Carvalho Chehab 758dab9197SMauro Carvalho Chehab Like LP5521 and LP5523/55231, LP5562 provides LED current settings. 768dab9197SMauro Carvalho Chehab The 'led_current' and 'max_current' are used. 778dab9197SMauro Carvalho Chehab 788dab9197SMauro Carvalho ChehabExample of Platform data 798dab9197SMauro Carvalho Chehab======================== 808dab9197SMauro Carvalho Chehab 818dab9197SMauro Carvalho Chehab:: 828dab9197SMauro Carvalho Chehab 838dab9197SMauro Carvalho Chehab static struct lp55xx_led_config lp5562_led_config[] = { 848dab9197SMauro Carvalho Chehab { 858dab9197SMauro Carvalho Chehab .name = "R", 868dab9197SMauro Carvalho Chehab .chan_nr = 0, 878dab9197SMauro Carvalho Chehab .led_current = 20, 888dab9197SMauro Carvalho Chehab .max_current = 40, 898dab9197SMauro Carvalho Chehab }, 908dab9197SMauro Carvalho Chehab { 918dab9197SMauro Carvalho Chehab .name = "G", 928dab9197SMauro Carvalho Chehab .chan_nr = 1, 938dab9197SMauro Carvalho Chehab .led_current = 20, 948dab9197SMauro Carvalho Chehab .max_current = 40, 958dab9197SMauro Carvalho Chehab }, 968dab9197SMauro Carvalho Chehab { 978dab9197SMauro Carvalho Chehab .name = "B", 988dab9197SMauro Carvalho Chehab .chan_nr = 2, 998dab9197SMauro Carvalho Chehab .led_current = 20, 1008dab9197SMauro Carvalho Chehab .max_current = 40, 1018dab9197SMauro Carvalho Chehab }, 1028dab9197SMauro Carvalho Chehab { 1038dab9197SMauro Carvalho Chehab .name = "W", 1048dab9197SMauro Carvalho Chehab .chan_nr = 3, 1058dab9197SMauro Carvalho Chehab .led_current = 20, 1068dab9197SMauro Carvalho Chehab .max_current = 40, 1078dab9197SMauro Carvalho Chehab }, 1088dab9197SMauro Carvalho Chehab }; 1098dab9197SMauro Carvalho Chehab 1108dab9197SMauro Carvalho Chehab static int lp5562_setup(void) 1118dab9197SMauro Carvalho Chehab { 1128dab9197SMauro Carvalho Chehab /* setup HW resources */ 1138dab9197SMauro Carvalho Chehab } 1148dab9197SMauro Carvalho Chehab 1158dab9197SMauro Carvalho Chehab static void lp5562_release(void) 1168dab9197SMauro Carvalho Chehab { 1178dab9197SMauro Carvalho Chehab /* Release HW resources */ 1188dab9197SMauro Carvalho Chehab } 1198dab9197SMauro Carvalho Chehab 1208dab9197SMauro Carvalho Chehab static void lp5562_enable(bool state) 1218dab9197SMauro Carvalho Chehab { 1228dab9197SMauro Carvalho Chehab /* Control of chip enable signal */ 1238dab9197SMauro Carvalho Chehab } 1248dab9197SMauro Carvalho Chehab 1258dab9197SMauro Carvalho Chehab static struct lp55xx_platform_data lp5562_platform_data = { 1268dab9197SMauro Carvalho Chehab .led_config = lp5562_led_config, 1278dab9197SMauro Carvalho Chehab .num_channels = ARRAY_SIZE(lp5562_led_config), 1288dab9197SMauro Carvalho Chehab .setup_resources = lp5562_setup, 1298dab9197SMauro Carvalho Chehab .release_resources = lp5562_release, 1308dab9197SMauro Carvalho Chehab .enable = lp5562_enable, 1318dab9197SMauro Carvalho Chehab }; 1328dab9197SMauro Carvalho Chehab 1338dab9197SMauro Carvalho ChehabTo configure the platform specific data, lp55xx_platform_data structure is used 1348dab9197SMauro Carvalho Chehab 1358dab9197SMauro Carvalho Chehab 1368dab9197SMauro Carvalho ChehabIf the current is set to 0 in the platform data, that channel is 1378dab9197SMauro Carvalho Chehabdisabled and it is not visible in the sysfs. 138