Commit c1ff7da0 authored by Artur Weber's avatar Artur Weber Committed by Lee Jones
Browse files

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: default avatarArtur Weber <aweber.kernel@gmail.com>
Reviewed-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
Signed-off-by: default avatarLee Jones <lee@kernel.org>
Link: https://lore.kernel.org/r/20230519180728.2281-3-aweber.kernel@gmail.com
parent 24b8ae3e
Loading
Loading
Loading
Loading
+26 −22
Original line number Diff line number Diff line
@@ -218,23 +218,10 @@ static int lp855x_configure(struct lp855x *lp)

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;

		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) {