Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5812c13a authored by Milo Kim's avatar Milo Kim Committed by Linus Torvalds
Browse files

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: default avatarMilo Kim <milo.kim@ti.com>
Signed-off-by: default avatarJingoo Han <jg1.han@samsung.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent b300645a
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -4,7 +4,8 @@ Kernel driver lp855x
Backlight driver for LP855x ICs

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>

@@ -24,7 +25,7 @@ Value : pwm based or register based

2) 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
------------------------
+28 −1
Original line number Diff line number Diff line
@@ -2,7 +2,7 @@ lp855x bindings

Required properties:
  - compatible: "ti,lp8550", "ti,lp8551", "ti,lp8552", "ti,lp8553",
                "ti,lp8556", "ti,lp8557"
                "ti,lp8555", "ti,lp8556", "ti,lp8557"
  - reg: I2C slave address (u8)
  - dev-ctrl: Value of DEVICE CONTROL register (u8). It depends on the device.

@@ -15,6 +15,33 @@ Optional properties:

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 */
	backlight@2c {
		compatible = "ti,lp8556";
+2 −2
Original line number Diff line number Diff line
@@ -388,8 +388,8 @@ config BACKLIGHT_LP855X
	tristate "Backlight driver for TI LP855X"
	depends on BACKLIGHT_CLASS_DEVICE && I2C
	help
	  This supports TI LP8550, LP8551, LP8552, LP8553, LP8556 and LP8557
	  backlight driver.
	  This supports TI LP8550, LP8551, LP8552, LP8553, LP8555, LP8556 and
	  LP8557 backlight driver.

config BACKLIGHT_LP8788
	tristate "Backlight driver for TI LP8788 MFD"
+15 −2
Original line number Diff line number Diff line
@@ -26,13 +26,15 @@
#define LP8556_EPROM_START		0xA0
#define LP8556_EPROM_END		0xAF

/* LP8557 Registers */
/* LP8555/7 Registers */
#define LP8557_BL_CMD			0x00
#define LP8557_BL_MASK			0x01
#define LP8557_BL_ON			0x01
#define LP8557_BL_OFF			0x00
#define LP8557_BRIGHTNESS_CTRL		0x04
#define LP8557_CONFIG			0x10
#define LP8555_EPROM_START		0x10
#define LP8555_EPROM_END		0x7A
#define LP8557_EPROM_START		0x10
#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;
		end = LP8556_EPROM_END;
		break;
	case LP8555:
		start = LP8555_EPROM_START;
		end = LP8555_EPROM_END;
		break;
	case LP8557:
		start = LP8557_EPROM_START;
		end = LP8557_EPROM_END;
@@ -165,9 +171,14 @@ static int lp855x_configure(struct lp855x *lp)
	struct lp855x_platform_data *pd = lp->pdata;

	switch (lp->chip_id) {
	case LP8550 ... LP8556:
	case LP8550:
	case LP8551:
	case LP8552:
	case LP8553:
	case LP8556:
		lp->cfg = &lp855x_dev_cfg;
		break;
	case LP8555:
	case LP8557:
		lp->cfg = &lp8557_dev_cfg;
		break;
@@ -470,6 +481,7 @@ static const struct of_device_id lp855x_dt_ids[] = {
	{ .compatible = "ti,lp8551", },
	{ .compatible = "ti,lp8552", },
	{ .compatible = "ti,lp8553", },
	{ .compatible = "ti,lp8555", },
	{ .compatible = "ti,lp8556", },
	{ .compatible = "ti,lp8557", },
	{ }
@@ -481,6 +493,7 @@ static const struct i2c_device_id lp855x_ids[] = {
	{"lp8551", LP8551},
	{"lp8552", LP8552},
	{"lp8553", LP8553},
	{"lp8555", LP8555},
	{"lp8556", LP8556},
	{"lp8557", LP8557},
	{ }
+19 −0
Original line number Diff line number Diff line
@@ -40,6 +40,17 @@
#define LP8553_PWM_CONFIG	LP8550_PWM_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 */
#define LP8556_PWM_CONFIG	(LP8556_PWM_ONLY << BRT_MODE_SHFT)
#define LP8556_COMB1_CONFIG	(LP8556_COMBINED1 << BRT_MODE_SHFT)
@@ -65,6 +76,7 @@ enum lp855x_chip_id {
	LP8551,
	LP8552,
	LP8553,
	LP8555,
	LP8556,
	LP8557,
};
@@ -89,6 +101,13 @@ enum lp8553_brighntess_source {
	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 {
	LP8556_PWM_ONLY,
	LP8556_COMBINED1,	/* pwm + i2c before the shaper block */