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:
parent
b300645aec
commit
5812c13a4e
5 changed files with 67 additions and 7 deletions
|
@ -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
|
||||||
------------------------
|
------------------------
|
||||||
|
|
|
@ -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";
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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},
|
||||||
{ }
|
{ }
|
||||||
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Reference in a new issue