Skip to content

Commit c1ff7da

Browse files
refractionwarelag-linaro
authored andcommitted
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
1 parent 24b8ae3 commit c1ff7da

File tree

1 file changed

+26
-22
lines changed

1 file changed

+26
-22
lines changed

drivers/video/backlight/lp855x_bl.c

+26-22
Original file line numberDiff line numberDiff line change
@@ -218,23 +218,10 @@ static int lp855x_configure(struct lp855x *lp)
218218

219219
static void lp855x_pwm_ctrl(struct lp855x *lp, int br, int max_br)
220220
{
221-
struct pwm_device *pwm;
222221
struct pwm_state state;
223222

224-
/* request pwm device with the consumer name */
225-
if (!lp->pwm) {
226-
pwm = devm_pwm_get(lp->dev, lp->chipname);
227-
if (IS_ERR(pwm))
228-
return;
229-
230-
lp->pwm = pwm;
231-
232-
pwm_init_state(lp->pwm, &state);
233-
} else {
234-
pwm_get_state(lp->pwm, &state);
235-
}
223+
pwm_get_state(lp->pwm, &state);
236224

237-
state.period = lp->pdata->period_ns;
238225
state.duty_cycle = div_u64(br * state.period, max_br);
239226
state.enabled = state.duty_cycle;
240227

@@ -339,6 +326,7 @@ static int lp855x_parse_dt(struct lp855x *lp)
339326
of_property_read_string(node, "bl-name", &pdata->name);
340327
of_property_read_u8(node, "dev-ctrl", &pdata->device_control);
341328
of_property_read_u8(node, "init-brt", &pdata->initial_brightness);
329+
/* Deprecated, specify period in pwms property instead */
342330
of_property_read_u32(node, "pwm-period", &pdata->period_ns);
343331

344332
/* Fill ROM platform data if defined */
@@ -399,6 +387,7 @@ static int lp855x_probe(struct i2c_client *cl)
399387
const struct i2c_device_id *id = i2c_client_get_device_id(cl);
400388
const struct acpi_device_id *acpi_id = NULL;
401389
struct device *dev = &cl->dev;
390+
struct pwm_state pwmstate;
402391
struct lp855x *lp;
403392
int ret;
404393

@@ -457,11 +446,6 @@ static int lp855x_probe(struct i2c_client *cl)
457446
}
458447
}
459448

460-
if (lp->pdata->period_ns > 0)
461-
lp->mode = PWM_BASED;
462-
else
463-
lp->mode = REGISTER_BASED;
464-
465449
lp->supply = devm_regulator_get(dev, "power");
466450
if (IS_ERR(lp->supply)) {
467451
if (PTR_ERR(lp->supply) == -EPROBE_DEFER)
@@ -472,11 +456,31 @@ static int lp855x_probe(struct i2c_client *cl)
472456
lp->enable = devm_regulator_get_optional(dev, "enable");
473457
if (IS_ERR(lp->enable)) {
474458
ret = PTR_ERR(lp->enable);
475-
if (ret == -ENODEV) {
459+
if (ret == -ENODEV)
476460
lp->enable = NULL;
477-
} else {
461+
else
478462
return dev_err_probe(dev, ret, "getting enable regulator\n");
479-
}
463+
}
464+
465+
lp->pwm = devm_pwm_get(lp->dev, lp->chipname);
466+
if (IS_ERR(lp->pwm)) {
467+
ret = PTR_ERR(lp->pwm);
468+
if (ret == -ENODEV || ret == -EINVAL)
469+
lp->pwm = NULL;
470+
else
471+
return dev_err_probe(dev, ret, "getting PWM\n");
472+
473+
lp->mode = REGISTER_BASED;
474+
dev_dbg(dev, "mode: register based\n");
475+
} else {
476+
pwm_init_state(lp->pwm, &pwmstate);
477+
/* Legacy platform data compatibility */
478+
if (lp->pdata->period_ns > 0)
479+
pwmstate.period = lp->pdata->period_ns;
480+
pwm_apply_state(lp->pwm, &pwmstate);
481+
482+
lp->mode = PWM_BASED;
483+
dev_dbg(dev, "mode: PWM based\n");
480484
}
481485

482486
if (lp->supply) {

0 commit comments

Comments
 (0)