1 ======================== 1 ======================== 2 Kernel driver for lm3556 2 Kernel driver for lm3556 3 ======================== 3 ======================== 4 4 5 * Texas Instrument: 5 * Texas Instrument: 6 1.5 A Synchronous Boost LED Flash Driver w/ 6 1.5 A Synchronous Boost LED Flash Driver w/ High-Side Current Source 7 * Datasheet: http://www.national.com/ds/LM/LM3 7 * Datasheet: http://www.national.com/ds/LM/LM3556.pdf 8 8 9 Authors: 9 Authors: 10 - Daniel Jeong 10 - Daniel Jeong 11 11 12 Contact:Daniel Jeong(daniel.jeong-at-t 12 Contact:Daniel Jeong(daniel.jeong-at-ti.com, gshark.jeong-at-gmail.com) 13 13 14 Description 14 Description 15 ----------- 15 ----------- 16 There are 3 functions in LM3556, Flash, Torch 16 There are 3 functions in LM3556, Flash, Torch and Indicator. 17 17 18 Flash Mode 18 Flash Mode 19 ^^^^^^^^^^ 19 ^^^^^^^^^^ 20 20 21 In Flash Mode, the LED current source(LED) pro 21 In Flash Mode, the LED current source(LED) provides 16 target current levels 22 from 93.75 mA to 1500 mA.The Flash currents ar 22 from 93.75 mA to 1500 mA.The Flash currents are adjusted via the CURRENT 23 CONTROL REGISTER(0x09).Flash mode is activated 23 CONTROL REGISTER(0x09).Flash mode is activated by the ENABLE REGISTER(0x0A), 24 or by pulling the STROBE pin HIGH. 24 or by pulling the STROBE pin HIGH. 25 25 26 LM3556 Flash can be controlled through /sys/cl !! 26 LM3556 Flash can be controlled through sys/class/leds/flash/brightness file 27 27 28 * if STROBE pin is enabled, below example cont 28 * if STROBE pin is enabled, below example control brightness only, and 29 ON / OFF will be controlled by STROBE pin. 29 ON / OFF will be controlled by STROBE pin. 30 30 31 Flash Example: 31 Flash Example: 32 32 33 OFF:: 33 OFF:: 34 34 35 #echo 0 > /sys/class/leds/flash/bright !! 35 #echo 0 > sys/class/leds/flash/brightness 36 36 37 93.75 mA:: 37 93.75 mA:: 38 38 39 #echo 1 > /sys/class/leds/flash/bright !! 39 #echo 1 > sys/class/leds/flash/brightness 40 40 41 ... 41 ... 42 42 43 1500 mA:: 43 1500 mA:: 44 44 45 #echo 16 > /sys/class/leds/flash/brigh !! 45 #echo 16 > sys/class/leds/flash/brightness 46 46 47 Torch Mode 47 Torch Mode 48 ^^^^^^^^^^ 48 ^^^^^^^^^^ 49 49 50 In Torch Mode, the current source(LED) is prog 50 In Torch Mode, the current source(LED) is programmed via the CURRENT CONTROL 51 REGISTER(0x09).Torch Mode is activated by the 51 REGISTER(0x09).Torch Mode is activated by the ENABLE REGISTER(0x0A) or by the 52 hardware TORCH input. 52 hardware TORCH input. 53 53 54 LM3556 torch can be controlled through /sys/cl !! 54 LM3556 torch can be controlled through sys/class/leds/torch/brightness file. 55 * if TORCH pin is enabled, below example contr 55 * if TORCH pin is enabled, below example control brightness only, 56 and ON / OFF will be controlled by TORCH pin. 56 and ON / OFF will be controlled by TORCH pin. 57 57 58 Torch Example: 58 Torch Example: 59 59 60 OFF:: 60 OFF:: 61 61 62 #echo 0 > /sys/class/leds/torch/bright !! 62 #echo 0 > sys/class/leds/torch/brightness 63 63 64 46.88 mA:: 64 46.88 mA:: 65 65 66 #echo 1 > /sys/class/leds/torch/bright !! 66 #echo 1 > sys/class/leds/torch/brightness 67 67 68 ... 68 ... 69 69 70 375 mA:: 70 375 mA:: 71 71 72 #echo 8 > /sys/class/leds/torch/bright !! 72 #echo 8 > sys/class/leds/torch/brightness 73 73 74 Indicator Mode 74 Indicator Mode 75 ^^^^^^^^^^^^^^ 75 ^^^^^^^^^^^^^^ 76 76 77 Indicator pattern can be set through /sys/clas !! 77 Indicator pattern can be set through sys/class/leds/indicator/pattern file, 78 and 4 patterns are pre-defined in indicator_pa 78 and 4 patterns are pre-defined in indicator_pattern array. 79 79 80 According to N-lank, Pulse time and N Period v 80 According to N-lank, Pulse time and N Period values, different pattern wiill 81 be generated.If you want new patterns for your 81 be generated.If you want new patterns for your own device, change 82 indicator_pattern array with your own values a 82 indicator_pattern array with your own values and INDIC_PATTERN_SIZE. 83 83 84 Please refer datasheet for more detail about N 84 Please refer datasheet for more detail about N-Blank, Pulse time and N Period. 85 85 86 Indicator pattern example: 86 Indicator pattern example: 87 87 88 pattern 0:: 88 pattern 0:: 89 89 90 #echo 0 > /sys/class/leds/indicator/pa !! 90 #echo 0 > sys/class/leds/indicator/pattern 91 91 92 ... 92 ... 93 93 94 pattern 3:: 94 pattern 3:: 95 95 96 #echo 3 > /sys/class/leds/indicator/pa !! 96 #echo 3 > sys/class/leds/indicator/pattern 97 97 98 Indicator brightness can be controlled through 98 Indicator brightness can be controlled through 99 sys/class/leds/indicator/brightness file. 99 sys/class/leds/indicator/brightness file. 100 100 101 Example: 101 Example: 102 102 103 OFF:: 103 OFF:: 104 104 105 #echo 0 > /sys/class/leds/indicator/br !! 105 #echo 0 > sys/class/leds/indicator/brightness 106 106 107 5.86 mA:: 107 5.86 mA:: 108 108 109 #echo 1 > /sys/class/leds/indicator/br !! 109 #echo 1 > sys/class/leds/indicator/brightness 110 110 111 ... 111 ... 112 112 113 46.875mA:: 113 46.875mA:: 114 114 115 #echo 8 > /sys/class/leds/indicator/br !! 115 #echo 8 > sys/class/leds/indicator/brightness 116 116 117 Notes 117 Notes 118 ----- 118 ----- 119 Driver expects it is registered using the i2c_ 119 Driver expects it is registered using the i2c_board_info mechanism. 120 To register the chip at address 0x63 on specif 120 To register the chip at address 0x63 on specific adapter, set the platform data 121 according to include/linux/platform_data/leds- 121 according to include/linux/platform_data/leds-lm3556.h, set the i2c board info 122 122 123 Example:: 123 Example:: 124 124 125 static struct i2c_board_info board_i2c 125 static struct i2c_board_info board_i2c_ch4[] __initdata = { 126 { 126 { 127 I2C_BOARD_INFO(LM3556 127 I2C_BOARD_INFO(LM3556_NAME, 0x63), 128 .platform_data = &lm3 128 .platform_data = &lm3556_pdata, 129 }, 129 }, 130 }; 130 }; 131 131 132 and register it in the platform init function 132 and register it in the platform init function 133 133 134 Example:: 134 Example:: 135 135 136 board_register_i2c_bus(4, 400, 136 board_register_i2c_bus(4, 400, 137 board_i2c_ch4, 137 board_i2c_ch4, ARRAY_SIZE(board_i2c_ch4));
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.