Commit fe009175 authored by Milo Kim's avatar Milo Kim Committed by Lee Jones

backlight: lp855x: Use private data for regulator control

LP855x backlight device can be enabled by external VDD input. The
'supply' data is used for this purpose. It's kind of private data
which runs internally, so there is no reason to expose to the
platform data.

And devm_regulator_get() is moved from _parse_dt() to _probe().
Regulator consumer(lp855x) can control regulator not only from DT
but also from platform data configuration in a source file such
like board-*.c.
Signed-off-by: default avatarMilo Kim <milo.kim@ti.com>
Acked-by: default avatarSean Paul <seanpaul@chromium.org>
Acked-by: default avatarJingoo Han <jingoohan1@gmail.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent bc0195aa
...@@ -73,6 +73,7 @@ struct lp855x { ...@@ -73,6 +73,7 @@ struct lp855x {
struct device *dev; struct device *dev;
struct lp855x_platform_data *pdata; struct lp855x_platform_data *pdata;
struct pwm_device *pwm; struct pwm_device *pwm;
struct regulator *supply; /* regulator for VDD input */
}; };
static int lp855x_write_byte(struct lp855x *lp, u8 reg, u8 data) static int lp855x_write_byte(struct lp855x *lp, u8 reg, u8 data)
...@@ -378,13 +379,6 @@ static int lp855x_parse_dt(struct lp855x *lp) ...@@ -378,13 +379,6 @@ static int lp855x_parse_dt(struct lp855x *lp)
pdata->rom_data = &rom[0]; pdata->rom_data = &rom[0];
} }
pdata->supply = devm_regulator_get(dev, "power");
if (IS_ERR(pdata->supply)) {
if (PTR_ERR(pdata->supply) == -EPROBE_DEFER)
return -EPROBE_DEFER;
pdata->supply = NULL;
}
lp->pdata = pdata; lp->pdata = pdata;
return 0; return 0;
...@@ -425,8 +419,15 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id) ...@@ -425,8 +419,15 @@ static int lp855x_probe(struct i2c_client *cl, const struct i2c_device_id *id)
else else
lp->mode = REGISTER_BASED; lp->mode = REGISTER_BASED;
if (lp->pdata->supply) { lp->supply = devm_regulator_get(lp->dev, "power");
ret = regulator_enable(lp->pdata->supply); if (IS_ERR(lp->supply)) {
if (PTR_ERR(lp->supply) == -EPROBE_DEFER)
return -EPROBE_DEFER;
lp->supply = NULL;
}
if (lp->supply) {
ret = regulator_enable(lp->supply);
if (ret < 0) { if (ret < 0) {
dev_err(&cl->dev, "failed to enable supply: %d\n", ret); dev_err(&cl->dev, "failed to enable supply: %d\n", ret);
return ret; return ret;
...@@ -464,8 +465,8 @@ static int lp855x_remove(struct i2c_client *cl) ...@@ -464,8 +465,8 @@ static int lp855x_remove(struct i2c_client *cl)
lp->bl->props.brightness = 0; lp->bl->props.brightness = 0;
backlight_update_status(lp->bl); backlight_update_status(lp->bl);
if (lp->pdata->supply) if (lp->supply)
regulator_disable(lp->pdata->supply); regulator_disable(lp->supply);
sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group); sysfs_remove_group(&lp->dev->kobj, &lp855x_attr_group);
return 0; return 0;
......
...@@ -136,7 +136,6 @@ struct lp855x_rom_data { ...@@ -136,7 +136,6 @@ struct lp855x_rom_data {
Only valid when mode is PWM_BASED. Only valid when mode is PWM_BASED.
* @size_program : total size of lp855x_rom_data * @size_program : total size of lp855x_rom_data
* @rom_data : list of new eeprom/eprom registers * @rom_data : list of new eeprom/eprom registers
* @supply : regulator that supplies 3V input
*/ */
struct lp855x_platform_data { struct lp855x_platform_data {
const char *name; const char *name;
...@@ -145,7 +144,6 @@ struct lp855x_platform_data { ...@@ -145,7 +144,6 @@ struct lp855x_platform_data {
unsigned int period_ns; unsigned int period_ns;
int size_program; int size_program;
struct lp855x_rom_data *rom_data; struct lp855x_rom_data *rom_data;
struct regulator *supply;
}; };
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment