mfd: pm8xxx-pwm: fix an overflow bug

The overflow could be the multiplication (period_us * NSEC_PER_USEC)
in next line, rather than at the 6-bit max period value. So we should
use the max unsigned int value as boundary.

Change-Id: Ida753d752a8ca144b4c158e1a6ed505077de98ea
Signed-off-by: Willie Ruan <wruan@codeaurora.org>
This commit is contained in:
Willie Ruan
2012-01-10 10:09:36 -08:00
parent c155c357a7
commit 70f989db30

View File

@@ -1,4 +1,4 @@
/* Copyright (c) 2011, Code Aurora Forum. All rights reserved.
/* Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -342,7 +342,7 @@ static void pm8xxx_pwm_calc_period(unsigned int period_us,
unsigned int tmp_p, last_p, min_err, period_n;
/* PWM Period / N */
if (period_us < (40 * USEC_PER_SEC)) { /* ~6-bit max */
if (period_us < ((unsigned)(-1) / NSEC_PER_USEC)) {
period_n = (period_us * NSEC_PER_USEC) >> 6;
n = 6;
} else if (period_us < (274 * USEC_PER_SEC)) { /* overflow threshold */