mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
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>
This commit is contained in:
parent
c7bcd0df1f
commit
26a4bc66a6
1 changed files with 11 additions and 0 deletions
|
@ -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,
|
||||
|
|
Loading…
Reference in a new issue