serial: sh-sci: Updated calculation of bit error rate and bit rate
authorNobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Mon, 14 Jul 2014 07:09:58 +0000 (16:09 +0900)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 18 Jul 2014 01:14:44 +0000 (18:14 -0700)
Currently, the decimal point is discarded calculation of BRR.
Therefore, it can not calculate a value close to the correct value.
This patch fixes this problem by using DIV_ROUND_CLOSEST.

Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/tty/serial/sh-sci.c

index 26dad3e87b5249e87a1d473d9f0f2ae44e89dfa2..2ba42069922f8c74272693da741b150b178b67e3 100644 (file)
@@ -1789,11 +1789,13 @@ static void sci_baud_calc_hscif(unsigned int bps, unsigned long freq,
        for (sr = 8; sr <= 32; sr++) {
                for (c = 0; c <= 3; c++) {
                        /* integerized formulas from HSCIF documentation */
-                       br = freq / (sr * (1 << (2 * c + 1)) * bps) - 1;
+                       br = DIV_ROUND_CLOSEST(freq, (sr *
+                                             (1 << (2 * c + 1)) * bps)) - 1;
                        if (br < 0 || br > 255)
                                continue;
-                       err = freq / ((br + 1) * bps * sr *
-                             (1 << (2 * c + 1)) / 1000) - 1000;
+                       err = DIV_ROUND_CLOSEST(freq, ((br + 1) * bps * sr *
+                                              (1 << (2 * c + 1)) / 1000)) -
+                                              1000;
                        if (min_err > err) {
                                min_err = err;
                                *brr = br;