Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3d15e4a3 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge of master.kernel.org:/home/rmk/linux-2.6-serial.git

parents 10f02d1c 857dde2e
Loading
Loading
Loading
Loading
+12 −5
Original line number Diff line number Diff line
@@ -682,8 +682,6 @@ static void autoconfig_16550a(struct uart_8250_port *up)
	 * from EXCR1. Switch back to bank 0, change it in MCR. Then
	 * switch back to bank 2, read it from EXCR1 again and check
	 * it's changed. If so, set baud_base in EXCR2 to 921600. -- dwmw2
	 * On PowerPC we don't want to change baud_base, as we have
	 * a number of different divisors.  -- Tom Rini
	 */
	serial_outp(up, UART_LCR, 0);
	status1 = serial_in(up, UART_MCR);
@@ -699,16 +697,25 @@ static void autoconfig_16550a(struct uart_8250_port *up)
		serial_outp(up, UART_MCR, status1);

		if ((status2 ^ status1) & UART_MCR_LOOP) {
#ifndef CONFIG_PPC
			unsigned short quot;

			serial_outp(up, UART_LCR, 0xE0);

			quot = serial_inp(up, UART_DLM) << 8;
			quot += serial_inp(up, UART_DLL);
			quot <<= 3;

			status1 = serial_in(up, 0x04); /* EXCR1 */
			status1 &= ~0xB0; /* Disable LOCK, mask out PRESL[01] */
			status1 |= 0x10;  /* 1.625 divisor for baud_base --> 921600 */
			serial_outp(up, 0x04, status1);
			
			serial_outp(up, UART_DLL, quot & 0xff);
			serial_outp(up, UART_DLM, quot >> 8);

			serial_outp(up, UART_LCR, 0);
			up->port.uartclk = 921600*16;
#endif

			up->port.uartclk = 921600*16;
			up->port.type = PORT_NS16550A;
			up->capabilities |= UART_NATSEMI;
			return;