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

Commit 7d55deaf authored by Alan Cox's avatar Alan Cox Committed by Linus Torvalds
Browse files

timbuart: Fix the termios logic



The driver only handles speeds but it fails to return the current values
for the hardware features it does not support.

Signed-off-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 34aec591
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -278,7 +278,7 @@ static int get_bindex(int baud)
	int i;

	for (i = 0; i < ARRAY_SIZE(baudrates); i++)
		if (baud == baudrates[i])
		if (baud <= baudrates[i])
			return i;

	return -1;
@@ -296,15 +296,21 @@ static void timbuart_set_termios(struct uart_port *port,
	bindex = get_bindex(baud);
	dev_dbg(port->dev, "%s - bindex %d\n", __func__, bindex);

	if (bindex < 0) {
		printk(KERN_ALERT "timbuart: Unsupported baud rate\n");
	} else {
	if (bindex < 0)
		bindex = 0;
	baud = baudrates[bindex];

	/* The serial layer calls into this once with old = NULL when setting
	   up initially */
	if (old)
		tty_termios_copy_hw(termios, old);
	tty_termios_encode_baud_rate(termios, baud, baud);

	spin_lock_irqsave(&port->lock, flags);
	iowrite8((u8)bindex, port->membase + TIMBUART_BAUDRATE);
	uart_update_timeout(port, termios->c_cflag, baud);
	spin_unlock_irqrestore(&port->lock, flags);
}
}

static const char *timbuart_type(struct uart_port *port)
{