diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2013-04-07 11:50:24 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-09-27 07:16:50 +0200 |
commit | f043520c5abe7627168af77b2c4b2992c4679e3a (patch) | |
tree | 4a4857e2fe7ba73bc198f0184ec3cb1d24d87a11 | |
parent | ab8a576a09185e2013fa8b5246edc2981e4e6487 (diff) | |
download | barebox-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.c | 7 |
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); |