aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/pxa/patches-2.6.21/030-serial-divisor.patch
blob: 036fb634cdd4230368d04b082e47191686b4843a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Index: linux-2.6.21.7/drivers/serial/pxa.c
===================================================================
--- linux-2.6.21.7.orig/drivers/serial/pxa.c
+++ linux-2.6.21.7/drivers/serial/pxa.c
@@ -41,6 +41,7 @@
 #include <linux/platform_device.h>
 #include <linux/tty.h>
 #include <linux/tty_flip.h>
+#include <linux/serial.h>
 #include <linux/serial_core.h>
 
 #include <asm/io.h>
@@ -577,8 +578,16 @@ static void serial_pxa_config_port(struc
 static int
 serial_pxa_verify_port(struct uart_port *port, struct serial_struct *ser)
 {
-	/* we don't want the core code to modify any port params */
-	return -EINVAL;
+	struct uart_pxa_port *up = (struct uart_pxa_port *)port;
+	int ret = 0;
+
+	if (up->port.uartclk / 16 != ser->baud_base)
+		ret = -EINVAL;
+	else if (((up->port.line & 1) == 0) && ser->baud_base > 230400) /* Max baud rate for STUART and FFUART */
+		ret = -EINVAL;
+	else if (((up->port.line & 1) != 0) && ser->baud_base > 921600) /* Max baud rate for HWUART and BTUART */
+		ret = -EINVAL;
+	return ret;
 }
 
 static const char *