diff options
author | Stefan Mavrodiev <stefan@olimex.com> | 2019-04-12 08:56:27 +0300 |
---|---|---|
committer | Anatolij Gustschin <agust@denx.de> | 2019-04-14 14:17:36 +0200 |
commit | 57e7775413cfd4ada728c4e60df64895dfa37e4e (patch) | |
tree | 758c983d5b8c46ae9738c401f86010b50525f7fa /drivers/video/pwm_backlight.c | |
parent | cf5eebeb18f7790d5030eb94f51fca0ebcd6e406 (diff) |
video: backlight: Parse PWM polarity cell
This patch enables the reading of the polarity cell from a PWM
phandle and calls pwm_set_invert().
Not all platforms have polarity cell, so skip if it's not pressent.
Signed-off-by: Stefan Mavrodiev <stefan@olimex.com>
Reviewed-by: Anatolij Gustschin <agust@denx.de>
Diffstat (limited to 'drivers/video/pwm_backlight.c')
-rw-r--r-- | drivers/video/pwm_backlight.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/video/pwm_backlight.c b/drivers/video/pwm_backlight.c index bd733f5f1c..a587977c22 100644 --- a/drivers/video/pwm_backlight.c +++ b/drivers/video/pwm_backlight.c @@ -39,6 +39,12 @@ struct pwm_backlight_priv { struct udevice *pwm; uint channel; uint period_ns; + /* + * the polarity of one PWM + * 0: normal polarity + * 1: inverted polarity + */ + bool polarity; u32 *levels; int num_levels; uint default_level; @@ -57,7 +63,10 @@ static int set_pwm(struct pwm_backlight_priv *priv) (priv->max_level - priv->min_level + 1); ret = pwm_set_config(priv->pwm, priv->channel, priv->period_ns, duty_cycle); + if (ret) + return log_ret(ret); + ret = pwm_set_invert(priv->pwm, priv->channel, priv->polarity); return log_ret(ret); } @@ -202,6 +211,8 @@ static int pwm_backlight_ofdata_to_platdata(struct udevice *dev) return log_msg_ret("Not enough arguments to pwm\n", -EINVAL); priv->channel = args.args[0]; priv->period_ns = args.args[1]; + if (args.args_count > 2) + priv->polarity = args.args[2]; index = dev_read_u32_default(dev, "default-brightness-level", 255); cell = dev_read_prop(dev, "brightness-levels", &len); |