video: pwm_backlight: support PWM polarity setting

The latest kernel PWM drivers enable the polarity settings. When system
run from U-Boot to kerenl, if there are differences in polarity set or
duty cycle, the PMW will re-init:
close -> set polarity and duty cycle -> enable the PWM.
The pwm_backlight would be unstable, might be screen flashing.

Change-Id: I7c026c9756e013f0ac99e43b09b633dc83268ce9
Signed-off-by: David Wu <david.wu@rock-chips.com>
This commit is contained in:
David Wu 2018-03-16 18:01:22 +08:00 committed by Kever Yang
parent bab0c55c3c
commit f462f55341
1 changed files with 8 additions and 0 deletions

View File

@ -20,6 +20,7 @@ struct pwm_backlight_priv {
struct udevice *pwm;
uint channel;
uint period_ns;
bool polarity;
uint default_level;
uint min_level;
uint max_level;
@ -45,6 +46,12 @@ static int pwm_backlight_enable(struct udevice *dev)
mdelay(120);
}
ret = pwm_set_invert(priv->pwm, priv->channel, priv->polarity);
if (ret) {
dev_err(dev, "Failed to invert PWM\n");
return ret;
}
duty_cycle = priv->period_ns * (priv->default_level - priv->min_level) /
(priv->max_level - priv->min_level + 1);
ret = pwm_set_config(priv->pwm, priv->channel, priv->period_ns,
@ -136,6 +143,7 @@ static int pwm_backlight_ofdata_to_platdata(struct udevice *dev)
}
priv->channel = args.args[0];
priv->period_ns = args.args[1];
priv->polarity = args.args[2];
index = dev_read_u32_default(dev, "default-brightness-level", 255);
cell = dev_read_prop(dev, "brightness-levels", &len);