X-Git-Url: https://git.stricted.de/?p=GitHub%2Fmt8127%2Fandroid_kernel_alcatel_ttab.git;a=blobdiff_plain;f=drivers%2Ftty%2Fserial%2F8250%2F8250_dw.c;h=9f3666c233b328951fbffc3d72105cce94627025;hp=86281fa5dcc327424e3ca9a3115e8032874c6147;hb=85511b9d61996487dabf98ce126b51b049a22921;hpb=89bf6007dd14768791598eca6fd387b9637226eb diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c index 86281fa5dcc3..9f3666c233b3 100644 --- a/drivers/tty/serial/8250/8250_dw.c +++ b/drivers/tty/serial/8250/8250_dw.c @@ -116,8 +116,8 @@ static void dw8250_serial_out32(struct uart_port *p, int offset, int value) { struct dw8250_data *d = p->private_data; - if (offset == UART_MCR) - d->last_mcr = value; + if (offset == UART_LCR) + d->last_lcr = value; writel(value, p->membase + (offset << p->regshift)); @@ -140,20 +140,22 @@ static void dw8250_serial_out32(struct uart_port *p, int offset, int value) static unsigned int dw8250_serial_in32(struct uart_port *p, int offset) { - unsigned int value = readl(p->membase + (offset << p->regshift)); + offset <<= p->regshift; - return dw8250_modify_msr(p, offset, value); + return readl(p->membase + offset); } static int dw8250_handle_irq(struct uart_port *p) { + struct dw8250_data *d = p->private_data; unsigned int iir = p->serial_in(p, UART_IIR); if (serial8250_handle_irq(p, iir)) { return 1; } else if ((iir & UART_IIR_BUSY) == UART_IIR_BUSY) { - /* Clear the USR */ + /* Clear the USR and write the LCR again. */ (void)p->serial_in(p, DW_UART_USR); + p->serial_out(p, UART_LCR, d->last_lcr); return 1; }