--- zzzz-none-000/linux-3.10.107/drivers/tty/serial/lpc32xx_hs.c 2017-06-27 09:49:32.000000000 +0000 +++ scorpion-7490-727/linux-3.10.107/drivers/tty/serial/lpc32xx_hs.c 2021-02-04 17:41:59.000000000 +0000 @@ -279,7 +279,10 @@ tmp = readl(LPC32XX_HSUART_FIFO(port->membase)); } + + spin_unlock(&port->lock); tty_flip_buffer_push(tport); + spin_lock(&port->lock); } static void __serial_lpc32xx_tx(struct uart_port *port) @@ -351,10 +354,8 @@ } /* Data received? */ - if (status & (LPC32XX_HSU_RX_TIMEOUT_INT | LPC32XX_HSU_RX_TRIG_INT)) { + if (status & (LPC32XX_HSU_RX_TIMEOUT_INT | LPC32XX_HSU_RX_TRIG_INT)) __serial_lpc32xx_rx(port); - tty_flip_buffer_push(tport); - } /* Transmit data request? */ if ((status & LPC32XX_HSU_TX_INT) && (!uart_tx_stopped(port))) { @@ -426,12 +427,6 @@ LPC32XX_HSU_FE_INT), LPC32XX_HSUART_IIR(port->membase)); } -/* port->lock held by caller. */ -static void serial_lpc32xx_enable_ms(struct uart_port *port) -{ - /* Modem status is not supported */ -} - /* port->lock is not held. */ static void serial_lpc32xx_break_ctl(struct uart_port *port, int break_state) @@ -657,7 +652,6 @@ .stop_tx = serial_lpc32xx_stop_tx, .start_tx = serial_lpc32xx_start_tx, .stop_rx = serial_lpc32xx_stop_rx, - .enable_ms = serial_lpc32xx_enable_ms, .break_ctl = serial_lpc32xx_break_ctl, .startup = serial_lpc32xx_startup, .shutdown = serial_lpc32xx_shutdown, @@ -697,12 +691,13 @@ p->port.mapbase = res->start; p->port.membase = NULL; - p->port.irq = platform_get_irq(pdev, 0); - if (p->port.irq < 0) { + ret = platform_get_irq(pdev, 0); + if (ret < 0) { dev_err(&pdev->dev, "Error getting irq for HS UART port %d\n", uarts_registered); - return p->port.irq; + return ret; } + p->port.irq = ret; p->port.iotype = UPIO_MEM32; p->port.uartclk = LPC32XX_MAIN_OSC_FREQ; @@ -774,7 +769,6 @@ .resume = serial_hs_lpc32xx_resume, .driver = { .name = MODNAME, - .owner = THIS_MODULE, .of_match_table = serial_hs_lpc32xx_dt_ids, }, };