To determine the correct divisor, we need to know the difference between
the desired baud rate and the actual baud rate. The calculation for this
difference is implemented twice within omap_serial_baud_is_mode16().
Pull out the calculation for easier maintenance.

While at it, remove the CamelCasing from the variable names.

Signed-off-by: Frans Klaver <frans.kla...@xsens.com>
---
 drivers/tty/serial/omap-serial.c | 42 +++++++++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/drivers/tty/serial/omap-serial.c b/drivers/tty/serial/omap-serial.c
index e454b7c..18c30ca 100644
--- a/drivers/tty/serial/omap-serial.c
+++ b/drivers/tty/serial/omap-serial.c
@@ -239,6 +239,26 @@ static void serial_omap_enable_wakeup(struct 
uart_omap_port *up, bool enable)
 }
 
 /*
+ * Calculate the absolute difference between the desired and actual baud
+ * rate for the given mode.
+ */
+static inline int calculate_baud_abs_diff(struct uart_port *port,
+                               unsigned int baud, unsigned int mode)
+{
+       unsigned int n = port->uartclk / (mode * baud);
+       int abs_diff;
+
+       if (n == 0)
+               n = 1;
+
+       abs_diff = baud - (port->uartclk / (mode * n));
+       if (abs_diff < 0)
+               abs_diff = -abs_diff;
+
+       return abs_diff;
+}
+
+/*
  * serial_omap_baud_is_mode16 - check if baud rate is MODE16X
  * @port: uart port info
  * @baud: baudrate for which mode needs to be determined
@@ -252,24 +272,10 @@ static void serial_omap_enable_wakeup(struct 
uart_omap_port *up, bool enable)
 static bool
 serial_omap_baud_is_mode16(struct uart_port *port, unsigned int baud)
 {
-       unsigned int n13 = port->uartclk / (13 * baud);
-       unsigned int n16 = port->uartclk / (16 * baud);
-       int baudAbsDiff13;
-       int baudAbsDiff16;
-
-       if (n13 == 0)
-               n13 = 1;
-       if (n16 == 0)
-               n16 = 1;
-
-       baudAbsDiff13 = baud - (port->uartclk / (13 * n13));
-       baudAbsDiff16 = baud - (port->uartclk / (16 * n16));
-       if (baudAbsDiff13 < 0)
-               baudAbsDiff13 = -baudAbsDiff13;
-       if (baudAbsDiff16 < 0)
-               baudAbsDiff16 = -baudAbsDiff16;
-
-       return (baudAbsDiff13 >= baudAbsDiff16);
+       int abs_diff_13 = calculate_baud_abs_diff(port, baud, 13);
+       int abs_diff_16 = calculate_baud_abs_diff(port, baud, 16);
+
+       return (abs_diff_13 >= abs_diff_16);
 }
 
 /*
-- 
2.1.0

--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to