]> err.no Git - linux-2.6/blobdiff - drivers/serial/ioc4_serial.c
[PATCH] ppc32: add 405EP cpu_spec entry
[linux-2.6] / drivers / serial / ioc4_serial.c
index d3f4542616c66dcd6f4d901480dc47b74f30251f..ba4e13a22a50951484dd23df491942d7109eb7a9 100644 (file)
@@ -838,7 +838,7 @@ static int inline port_init(struct ioc4_port *port)
        port->ip_tx_prod = readl(&port->ip_serial_regs->stcir) & PROD_CONS_MASK;
        writel(port->ip_tx_prod, &port->ip_serial_regs->stpir);
        port->ip_rx_cons = readl(&port->ip_serial_regs->srpir) & PROD_CONS_MASK;
-       writel(port->ip_rx_cons, &port->ip_serial_regs->srcir);
+       writel(port->ip_rx_cons | IOC4_SRCIR_ARM, &port->ip_serial_regs->srcir);
 
        /* Disable interrupts for this 16550 */
        uart = port->ip_uart_regs;
@@ -1688,8 +1688,8 @@ ioc4_change_speed(struct uart_port *the_port,
 {
        struct ioc4_port *port = get_ioc4_port(the_port);
        int baud, bits;
-       unsigned cflag, cval;
-       int new_parity = 0, new_parity_enable = 0, new_stop = 1, new_data = 8;
+       unsigned cflag;
+       int new_parity = 0, new_parity_enable = 0, new_stop = 0, new_data = 8;
        struct uart_info *info = the_port->info;
 
        cflag = new_termios->c_cflag;
@@ -1697,48 +1697,35 @@ ioc4_change_speed(struct uart_port *the_port,
        switch (cflag & CSIZE) {
        case CS5:
                new_data = 5;
-               cval = 0x00;
                bits = 7;
                break;
        case CS6:
                new_data = 6;
-               cval = 0x01;
                bits = 8;
                break;
        case CS7:
                new_data = 7;
-               cval = 0x02;
                bits = 9;
                break;
        case CS8:
                new_data = 8;
-               cval = 0x03;
                bits = 10;
                break;
        default:
                /* cuz we always need a default ... */
                new_data = 5;
-               cval = 0x00;
                bits = 7;
                break;
        }
        if (cflag & CSTOPB) {
-               cval |= 0x04;
                bits++;
                new_stop = 1;
        }
        if (cflag & PARENB) {
-               cval |= UART_LCR_PARITY;
                bits++;
                new_parity_enable = 1;
-       }
-       if (cflag & PARODD) {
-               cval |= UART_LCR_EPAR;
-               new_parity = 1;
-       }
-       if (cflag & IGNPAR) {
-               cval &= ~UART_LCR_PARITY;
-               new_parity_enable = 0;
+               if (cflag & PARODD)
+                       new_parity = 1;
        }
        baud = uart_get_baud_rate(the_port, new_termios, old_termios,
                                MIN_BAUD_SUPPORTED, MAX_BAUD_SUPPORTED);
@@ -1771,10 +1758,12 @@ ioc4_change_speed(struct uart_port *the_port,
        if (cflag & CRTSCTS) {
                info->flags |= ASYNC_CTS_FLOW;
                port->ip_sscr |= IOC4_SSCR_HFC_EN;
-               writel(port->ip_sscr, &port->ip_serial_regs->sscr);
        }
-       else
+       else {
                info->flags &= ~ASYNC_CTS_FLOW;
+               port->ip_sscr &= ~IOC4_SSCR_HFC_EN;
+       }
+       writel(port->ip_sscr, &port->ip_serial_regs->sscr);
 
        /* Set the configuration and proper notification call */
        DPRINT_CONFIG(("%s : port 0x%p cflag 0%o "
@@ -1847,7 +1836,6 @@ static void ioc4_cb_output_lowat(struct ioc4_port *port)
        }
 }
 
-
 /**
  * handle_intr - service any interrupts for the given port - 2nd level
  *                     called via sd_intr