Эх сурвалжийг харах

m68knommu: fix ColdFire 5272 serial baud rates in mcf.c

I noticed (the hard way) that the mcf.c driver doesn't support the fractional precision register on the MCF5272.  This makes the console dicey at 115200 baud and a system clock of 66.0 MHz.  On the other hand, if your hardware is running at 66.666 MHz, it probably isn't a problem.

Patch submitted by John Adamson <jadamson@allen-organ.com>

Signed-off-by: Greg Ungerer <gerg@uclinux.org>
John Adamson 17 жил өмнө
parent
commit
26a4bc66a6
1 өөрчлөгдсөн 11 нэмэгдсэн , 0 устгасан
  1. 11 0
      drivers/serial/mcf.c

+ 11 - 0
drivers/serial/mcf.c

@@ -212,10 +212,18 @@ static void mcf_set_termios(struct uart_port *port, struct ktermios *termios,
 {
 	unsigned long flags;
 	unsigned int baud, baudclk;
+#if defined(CONFIG_M5272)
+	unsigned int baudfr;
+#endif
 	unsigned char mr1, mr2;
 
 	baud = uart_get_baud_rate(port, termios, old, 0, 230400);
+#if defined(CONFIG_M5272)
+	baudclk = (MCF_BUSCLK / baud) / 32;
+	baudfr = (((MCF_BUSCLK / baud) + 1) / 2) % 16;
+#else
 	baudclk = ((MCF_BUSCLK / baud) + 16) / 32;
+#endif
 
 	mr1 = MCFUART_MR1_RXIRQRDY | MCFUART_MR1_RXERRCHAR;
 	mr2 = 0;
@@ -262,6 +270,9 @@ static void mcf_set_termios(struct uart_port *port, struct ktermios *termios,
 	writeb(mr2, port->membase + MCFUART_UMR);
 	writeb((baudclk & 0xff00) >> 8, port->membase + MCFUART_UBG1);
 	writeb((baudclk & 0xff), port->membase + MCFUART_UBG2);
+#if defined(CONFIG_M5272)
+	writeb((baudfr & 0x0f), port->membase + MCFUART_UFPD);
+#endif
 	writeb(MCFUART_UCSR_RXCLKTIMER | MCFUART_UCSR_TXCLKTIMER,
 		port->membase + MCFUART_UCSR);
 	writeb(MCFUART_UCR_RXENABLE | MCFUART_UCR_TXENABLE,