video: backlight: lp855x: Get PWM for PWM mode during probe
Also deprecate the pwm-period DT property, as it is now redundant (pwms property already contains period value). Signed-off-by: Artur Weber <aweber.kernel@gmail.com> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org> Signed-off-by: Lee Jones <lee@kernel.org> Link: https://lore.kernel.org/r/20230519180728.2281-3-aweber.kernel@gmail.com
This commit is contained in:
parent
24b8ae3e2e
commit
c1ff7da03e
@ -218,23 +218,10 @@ err:
|
||||
|
||||
static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br)
|
||||
{
|
||||
struct pwm_device *pwm;
|
||||
struct pwm_state state;
|
||||
|
||||
/* request pwm device with the consumer name */
|
||||
if (!lp->pwm) {
|
||||
pwm = devm_pwm_get(lp->dev, lp->chipname);
|
||||
if (IS_ERR(pwm))
|
||||
return;
|
||||
pwm_get_state(lp->pwm, &state);
|
||||
|
||||
lp->pwm = pwm;
|
||||
|
||||
pwm_init_state(lp->pwm, &state);
|
||||
} else {
|
||||
pwm_get_state(lp->pwm, &state);
|
||||
}
|
||||
|
||||
state.period = lp->pdata->period_ns;
|
||||
state.duty_cycle = div_u64(br * state.period, max_br);
|
||||
state.enabled = state.duty_cycle;
|
||||
|
||||
@ -339,6 +326,7 @@ static int lp855x_parse_dt(struct lp855x *lp)
|
||||
of_property_read_string(node, "bl-name", &pdata->name);
|
||||
of_property_read_u8(node, "dev-ctrl", &pdata->device_control);
|
||||
of_property_read_u8(node, "init-brt", &pdata->initial_brightness);
|
||||
/* Deprecated, specify period in pwms property instead */
|
||||
of_property_read_u32(node, "pwm-period", &pdata->period_ns);
|
||||
|
||||
/* Fill ROM platform data if defined */
|
||||
@ -399,6 +387,7 @@ static int lp855x_probe(struct i2c_client *cl)
|
||||
const struct i2c_device_id *id = i2c_client_get_device_id(cl);
|
||||
const struct acpi_device_id *acpi_id = NULL;
|
||||
struct device *dev = &cl->dev;
|
||||
struct pwm_state pwmstate;
|
||||
struct lp855x *lp;
|
||||
int ret;
|
||||
|
||||
@ -457,11 +446,6 @@ static int lp855x_probe(struct i2c_client *cl)
|
||||
}
|
||||
}
|
||||
|
||||
if (lp->pdata->period_ns > 0)
|
||||
lp->mode = PWM_BASED;
|
||||
else
|
||||
lp->mode = REGISTER_BASED;
|
||||
|
||||
lp->supply = devm_regulator_get(dev, "power");
|
||||
if (IS_ERR(lp->supply)) {
|
||||
if (PTR_ERR(lp->supply) == -EPROBE_DEFER)
|
||||
@ -472,11 +456,31 @@ static int lp855x_probe(struct i2c_client *cl)
|
||||
lp->enable = devm_regulator_get_optional(dev, "enable");
|
||||
if (IS_ERR(lp->enable)) {
|
||||
ret = PTR_ERR(lp->enable);
|
||||
if (ret == -ENODEV) {
|
||||
if (ret == -ENODEV)
|
||||
lp->enable = NULL;
|
||||
} else {
|
||||
else
|
||||
return dev_err_probe(dev, ret, "getting enable regulator\n");
|
||||
}
|
||||
}
|
||||
|
||||
lp->pwm = devm_pwm_get(lp->dev, lp->chipname);
|
||||
if (IS_ERR(lp->pwm)) {
|
||||
ret = PTR_ERR(lp->pwm);
|
||||
if (ret == -ENODEV || ret == -EINVAL)
|
||||
lp->pwm = NULL;
|
||||
else
|
||||
return dev_err_probe(dev, ret, "getting PWM\n");
|
||||
|
||||
lp->mode = REGISTER_BASED;
|
||||
dev_dbg(dev, "mode: register based\n");
|
||||
} else {
|
||||
pwm_init_state(lp->pwm, &pwmstate);
|
||||
/* Legacy platform data compatibility */
|
||||
if (lp->pdata->period_ns > 0)
|
||||
pwmstate.period = lp->pdata->period_ns;
|
||||
pwm_apply_state(lp->pwm, &pwmstate);
|
||||
|
||||
lp->mode = PWM_BASED;
|
||||
dev_dbg(dev, "mode: PWM based\n");
|
||||
}
|
||||
|
||||
if (lp->supply) {
|
||||
|
Loading…
Reference in New Issue
Block a user