Kernel driver for lm3556

Authors:
  • Daniel Jeong

    Contact:Daniel Jeong(daniel.jeong-at-ti.com, gshark.jeong-at-gmail.com)

Description

There are 3 functions in LM3556, Flash, Torch and Indicator.

Flash Mode

In Flash Mode, the LED current source(LED) provides 16 target current levels from 93.75 mA to 1500 mA.The Flash currents are adjusted via the CURRENT CONTROL REGISTER(0x09).Flash mode is activated by the ENABLE REGISTER(0x0A), or by pulling the STROBE pin HIGH.

LM3556 Flash can be controlled through /sys/class/leds/flash/brightness file

  • if STROBE pin is enabled, below example control brightness only, and ON / OFF will be controlled by STROBE pin.

Flash Example:

OFF:

#echo 0 > /sys/class/leds/flash/brightness

93.75 mA:

#echo 1 > /sys/class/leds/flash/brightness

...

1500 mA:

#echo 16 > /sys/class/leds/flash/brightness

Torch Mode

In Torch Mode, the current source(LED) is programmed via the CURRENT CONTROL REGISTER(0x09).Torch Mode is activated by the ENABLE REGISTER(0x0A) or by the hardware TORCH input.

LM3556 torch can be controlled through /sys/class/leds/torch/brightness file. * if TORCH pin is enabled, below example control brightness only, and ON / OFF will be controlled by TORCH pin.

Torch Example:

OFF:

#echo 0 > /sys/class/leds/torch/brightness

46.88 mA:

#echo 1 > /sys/class/leds/torch/brightness

...

375 mA:

#echo 8 > /sys/class/leds/torch/brightness

Indicator Mode

Indicator pattern can be set through /sys/class/leds/indicator/pattern file, and 4 patterns are pre-defined in indicator_pattern array.

According to N-lank, Pulse time and N Period values, different pattern wiill be generated.If you want new patterns for your own device, change indicator_pattern array with your own values and INDIC_PATTERN_SIZE.

Please refer datasheet for more detail about N-Blank, Pulse time and N Period.

Indicator pattern example:

pattern 0:

#echo 0 > /sys/class/leds/indicator/pattern

...

pattern 3:

#echo 3 > /sys/class/leds/indicator/pattern

Indicator brightness can be controlled through sys/class/leds/indicator/brightness file.

Example:

OFF:

#echo 0 > /sys/class/leds/indicator/brightness

5.86 mA:

#echo 1 > /sys/class/leds/indicator/brightness

...

46.875mA:

#echo 8 > /sys/class/leds/indicator/brightness

Notes

Driver expects it is registered using the i2c_board_info mechanism. To register the chip at address 0x63 on specific adapter, set the platform data according to include/linux/platform_data/leds-lm3556.h, set the i2c board info

Example:

static struct i2c_board_info board_i2c_ch4[] __initdata = {
        {
                 I2C_BOARD_INFO(LM3556_NAME, 0x63),
                 .platform_data = &lm3556_pdata,
         },
};

and register it in the platform init function

Example:

board_register_i2c_bus(4, 400,
                        board_i2c_ch4, ARRAY_SIZE(board_i2c_ch4));