diff options
author | Juergen Beisert <jbe@pengutronix.de> | 2010-12-13 11:53:25 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2010-12-14 15:15:06 +0100 |
commit | f3d7fe0673b2bc7d187cc5bb7953bd6c3a0ac85c (patch) | |
tree | f8f8c9c3b35f803cff12f3d3c501b82b0f32818a | |
parent | f9a11ecfef1983b33a619d7eab479c8390c2838d (diff) | |
download | barebox-f3d7fe0673b2bc7d187cc5bb7953bd6c3a0ac85c.tar.gz barebox-f3d7fe0673b2bc7d187cc5bb7953bd6c3a0ac85c.tar.xz |
Add macro for correct rounding in integer devisions
Just stolen from Linux.
Signed-off-by: Juergen Beisert <jbe@pengutronix.de>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | drivers/mci/stm378x.c | 2 | ||||
-rw-r--r-- | include/common.h | 7 |
2 files changed, 8 insertions, 1 deletions
diff --git a/drivers/mci/stm378x.c b/drivers/mci/stm378x.c index 039fbb91..a2802aff 100644 --- a/drivers/mci/stm378x.c +++ b/drivers/mci/stm378x.c @@ -484,7 +484,7 @@ static unsigned setup_clock_speed(struct device_d *hw_dev, unsigned nc) ssp = imx_get_sspclk(0) * 1000; for (div = 2; div < 255; div += 2) { - rate = (((ssp + (nc >> 1) ) / nc) + (div >> 1)) / div; + rate = DIV_ROUND_CLOSEST(DIV_ROUND_CLOSEST(ssp, nc), div); if (rate <= 0x100) break; } diff --git a/include/common.h b/include/common.h index be83a31a..1bea10c0 100644 --- a/include/common.h +++ b/include/common.h @@ -224,4 +224,11 @@ extern const char version_string[]; #define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) +#define DIV_ROUND_CLOSEST(x, divisor)( \ +{ \ + typeof(divisor) __divisor = divisor; \ + (((x) + ((__divisor) / 2)) / (__divisor)); \ +} \ +) + #endif /* __COMMON_H_ */ |