summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2013-04-07 11:50:24 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2013-09-27 07:16:50 +0200
commitf043520c5abe7627168af77b2c4b2992c4679e3a (patch)
tree4a4857e2fe7ba73bc198f0184ec3cb1d24d87a11
parentab8a576a09185e2013fa8b5246edc2981e4e6487 (diff)
downloadbarebox-f043520c5abe7627168af77b2c4b2992c4679e3a.tar.gz
barebox-f043520c5abe7627168af77b2c4b2992c4679e3a.tar.xz
pwm: sanity check values before passing them to the drivers
Check for valid period size before calling ops->config. This fixes the pxa driver which otherwise does a division by zero. While at it, also check for duty_ns being smaller or equal to period_ns. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Cc: Robert Jarzmik <robert.jarzmik@free.fr>
-rw-r--r--drivers/pwm/core.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/pwm/core.c b/drivers/pwm/core.c
index db7d260c00..f769cfe9bb 100644
--- a/drivers/pwm/core.c
+++ b/drivers/pwm/core.c
@@ -177,6 +177,13 @@ int pwm_config(struct pwm_device *pwm, int duty_ns, int period_ns)
{
pwm->chip->duty_ns = duty_ns;
pwm->chip->period_ns = period_ns;
+
+ if (period_ns == 0)
+ return -EINVAL;
+
+ if (duty_ns > period_ns)
+ return -EINVAL;
+
return pwm->chip->ops->config(pwm->chip, duty_ns, period_ns);
}
EXPORT_SYMBOL_GPL(pwm_config);