backlight: lp855x_bl: support new LP8555 device

LP8555 is one of the LP855x family devices.

This device needs pre_init_device() and post_init_device() driver
structure.  It's same as LP8557, so the device configuration code is
shared with LP8557.  Backlight outputs are generated from dual DC-DC boost
converters.  It's configurable EPROM settings which are defined in the
platform data.

Driver documentation and device tree bindings are updated.

Signed-off-by: Milo Kim <milo.kim@ti.com>
Signed-off-by: Jingoo Han <jg1.han@samsung.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Milo Kim 2013-11-12 15:08:57 -08:00 committed by Linus Torvalds
parent b300645aec
commit 5812c13a4e
5 changed files with 67 additions and 7 deletions

View file

@ -4,7 +4,8 @@ Kernel driver lp855x
Backlight driver for LP855x ICs Backlight driver for LP855x ICs
Supported chips: Supported chips:
Texas Instruments LP8550, LP8551, LP8552, LP8553, LP8556 and LP8557 Texas Instruments LP8550, LP8551, LP8552, LP8553, LP8555, LP8556 and
LP8557
Author: Milo(Woogyom) Kim <milo.kim@ti.com> Author: Milo(Woogyom) Kim <milo.kim@ti.com>
@ -24,7 +25,7 @@ Value : pwm based or register based
2) chip_id 2) chip_id
The lp855x chip id. The lp855x chip id.
Value : lp8550/lp8551/lp8552/lp8553/lp8556/lp8557 Value : lp8550/lp8551/lp8552/lp8553/lp8555/lp8556/lp8557
Platform data for lp855x Platform data for lp855x
------------------------ ------------------------

View file

@ -2,7 +2,7 @@ lp855x bindings
Required properties: Required properties:
- compatible: "ti,lp8550", "ti,lp8551", "ti,lp8552", "ti,lp8553", - compatible: "ti,lp8550", "ti,lp8551", "ti,lp8552", "ti,lp8553",
"ti,lp8556", "ti,lp8557" "ti,lp8555", "ti,lp8556", "ti,lp8557"
- reg: I2C slave address (u8) - reg: I2C slave address (u8)
- dev-ctrl: Value of DEVICE CONTROL register (u8). It depends on the device. - dev-ctrl: Value of DEVICE CONTROL register (u8). It depends on the device.
@ -15,6 +15,33 @@ Optional properties:
Example: Example:
/* LP8555 */
backlight@2c {
compatible = "ti,lp8555";
reg = <0x2c>;
dev-ctrl = /bits/ 8 <0x00>;
pwm-period = <10000>;
/* 4V OV, 4 output LED0 string enabled */
rom_14h {
rom-addr = /bits/ 8 <0x14>;
rom-val = /bits/ 8 <0xcf>;
};
/* Heavy smoothing, 24ms ramp time step */
rom_15h {
rom-addr = /bits/ 8 <0x15>;
rom-val = /bits/ 8 <0xc7>;
};
/* 4 output LED1 string enabled */
rom_19h {
rom-addr = /bits/ 8 <0x19>;
rom-val = /bits/ 8 <0x0f>;
};
};
/* LP8556 */ /* LP8556 */
backlight@2c { backlight@2c {
compatible = "ti,lp8556"; compatible = "ti,lp8556";

View file

@ -388,8 +388,8 @@ config BACKLIGHT_LP855X
tristate "Backlight driver for TI LP855X" tristate "Backlight driver for TI LP855X"
depends on BACKLIGHT_CLASS_DEVICE && I2C depends on BACKLIGHT_CLASS_DEVICE && I2C
help help
This supports TI LP8550, LP8551, LP8552, LP8553, LP8556 and LP8557 This supports TI LP8550, LP8551, LP8552, LP8553, LP8555, LP8556 and
backlight driver. LP8557 backlight driver.
config BACKLIGHT_LP8788 config BACKLIGHT_LP8788
tristate "Backlight driver for TI LP8788 MFD" tristate "Backlight driver for TI LP8788 MFD"

View file

@ -26,13 +26,15 @@
#define LP8556_EPROM_START 0xA0 #define LP8556_EPROM_START 0xA0
#define LP8556_EPROM_END 0xAF #define LP8556_EPROM_END 0xAF
/* LP8557 Registers */ /* LP8555/7 Registers */
#define LP8557_BL_CMD 0x00 #define LP8557_BL_CMD 0x00
#define LP8557_BL_MASK 0x01 #define LP8557_BL_MASK 0x01
#define LP8557_BL_ON 0x01 #define LP8557_BL_ON 0x01
#define LP8557_BL_OFF 0x00 #define LP8557_BL_OFF 0x00
#define LP8557_BRIGHTNESS_CTRL 0x04 #define LP8557_BRIGHTNESS_CTRL 0x04
#define LP8557_CONFIG 0x10 #define LP8557_CONFIG 0x10
#define LP8555_EPROM_START 0x10
#define LP8555_EPROM_END 0x7A
#define LP8557_EPROM_START 0x10 #define LP8557_EPROM_START 0x10
#define LP8557_EPROM_END 0x1E #define LP8557_EPROM_END 0x1E
@ -111,6 +113,10 @@ static bool lp855x_is_valid_rom_area(struct lp855x *lp, u8 addr)
start = LP8556_EPROM_START; start = LP8556_EPROM_START;
end = LP8556_EPROM_END; end = LP8556_EPROM_END;
break; break;
case LP8555:
start = LP8555_EPROM_START;
end = LP8555_EPROM_END;
break;
case LP8557: case LP8557:
start = LP8557_EPROM_START; start = LP8557_EPROM_START;
end = LP8557_EPROM_END; end = LP8557_EPROM_END;
@ -165,9 +171,14 @@ static int lp855x_configure(struct lp855x *lp)
struct lp855x_platform_data *pd = lp->pdata; struct lp855x_platform_data *pd = lp->pdata;
switch (lp->chip_id) { switch (lp->chip_id) {
case LP8550 ... LP8556: case LP8550:
case LP8551:
case LP8552:
case LP8553:
case LP8556:
lp->cfg = &lp855x_dev_cfg; lp->cfg = &lp855x_dev_cfg;
break; break;
case LP8555:
case LP8557: case LP8557:
lp->cfg = &lp8557_dev_cfg; lp->cfg = &lp8557_dev_cfg;
break; break;
@ -470,6 +481,7 @@ static const struct of_device_id lp855x_dt_ids[] = {
{ .compatible = "ti,lp8551", }, { .compatible = "ti,lp8551", },
{ .compatible = "ti,lp8552", }, { .compatible = "ti,lp8552", },
{ .compatible = "ti,lp8553", }, { .compatible = "ti,lp8553", },
{ .compatible = "ti,lp8555", },
{ .compatible = "ti,lp8556", }, { .compatible = "ti,lp8556", },
{ .compatible = "ti,lp8557", }, { .compatible = "ti,lp8557", },
{ } { }
@ -481,6 +493,7 @@ static const struct i2c_device_id lp855x_ids[] = {
{"lp8551", LP8551}, {"lp8551", LP8551},
{"lp8552", LP8552}, {"lp8552", LP8552},
{"lp8553", LP8553}, {"lp8553", LP8553},
{"lp8555", LP8555},
{"lp8556", LP8556}, {"lp8556", LP8556},
{"lp8557", LP8557}, {"lp8557", LP8557},
{ } { }

View file

@ -40,6 +40,17 @@
#define LP8553_PWM_CONFIG LP8550_PWM_CONFIG #define LP8553_PWM_CONFIG LP8550_PWM_CONFIG
#define LP8553_I2C_CONFIG LP8550_I2C_CONFIG #define LP8553_I2C_CONFIG LP8550_I2C_CONFIG
/* CONFIG register - LP8555 */
#define LP8555_PWM_STANDBY BIT(7)
#define LP8555_PWM_FILTER BIT(6)
#define LP8555_RELOAD_EPROM BIT(3) /* use it if EPROMs should be reset
when the backlight turns on */
#define LP8555_OFF_OPENLEDS BIT(2)
#define LP8555_PWM_CONFIG LP8555_PWM_ONLY
#define LP8555_I2C_CONFIG LP8555_I2C_ONLY
#define LP8555_COMB1_CONFIG LP8555_COMBINED1
#define LP8555_COMB2_CONFIG LP8555_COMBINED2
/* DEVICE CONTROL register - LP8556 */ /* DEVICE CONTROL register - LP8556 */
#define LP8556_PWM_CONFIG (LP8556_PWM_ONLY << BRT_MODE_SHFT) #define LP8556_PWM_CONFIG (LP8556_PWM_ONLY << BRT_MODE_SHFT)
#define LP8556_COMB1_CONFIG (LP8556_COMBINED1 << BRT_MODE_SHFT) #define LP8556_COMB1_CONFIG (LP8556_COMBINED1 << BRT_MODE_SHFT)
@ -65,6 +76,7 @@ enum lp855x_chip_id {
LP8551, LP8551,
LP8552, LP8552,
LP8553, LP8553,
LP8555,
LP8556, LP8556,
LP8557, LP8557,
}; };
@ -89,6 +101,13 @@ enum lp8553_brighntess_source {
LP8553_I2C_ONLY = LP8550_I2C_ONLY, LP8553_I2C_ONLY = LP8550_I2C_ONLY,
}; };
enum lp8555_brightness_source {
LP8555_PWM_ONLY,
LP8555_I2C_ONLY,
LP8555_COMBINED1, /* Brightness register with shaped PWM */
LP8555_COMBINED2, /* PWM with shaped brightness register */
};
enum lp8556_brightness_source { enum lp8556_brightness_source {
LP8556_PWM_ONLY, LP8556_PWM_ONLY,
LP8556_COMBINED1, /* pwm + i2c before the shaper block */ LP8556_COMBINED1, /* pwm + i2c before the shaper block */