summaryrefslogtreecommitdiff
path: root/drivers/video/pwm_backlight.c
diff options
context:
space:
mode:
authorStefan Mavrodiev <stefan@olimex.com>2019-04-12 08:56:27 +0300
committerAnatolij Gustschin <agust@denx.de>2019-04-14 14:17:36 +0200
commit57e7775413cfd4ada728c4e60df64895dfa37e4e (patch)
tree758c983d5b8c46ae9738c401f86010b50525f7fa /drivers/video/pwm_backlight.c
parentcf5eebeb18f7790d5030eb94f51fca0ebcd6e406 (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.c11
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);