struct ktermios *old)
 {
        unsigned long flags;
-       unsigned int baud, quot, h_lcr;
+       unsigned int baud, quot, h_lcr, b;
 
        /*
         * We don't support modem control lines.
         */
        baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16); 
        quot = uart_get_divisor(port, baud);
-
-       if (port->state && port->state->port.tty) {
-               struct tty_struct *tty = port->state->port.tty;
-               unsigned int b = port->uartclk / (16 * quot);
-               tty_encode_baud_rate(tty, b, b);
-       }
+       b = port->uartclk / (16 * quot);
+       tty_termios_encode_baud_rate(termios, b, b);
 
        switch (termios->c_cflag & CSIZE) {
        case CS5:
 
        rational_best_approximation(16 * div * baud, sport->port.uartclk,
                1 << 16, 1 << 16, &num, &denom);
 
-       if (port->state && port->state->port.tty) {
-               tdiv64 = sport->port.uartclk;
-               tdiv64 *= num;
-               do_div(tdiv64, denom * 16 * div);
-               tty_encode_baud_rate(sport->port.state->port.tty,
+       tdiv64 = sport->port.uartclk;
+       tdiv64 *= num;
+       do_div(tdiv64, denom * 16 * div);
+       tty_termios_encode_baud_rate(termios,
                                (speed_t)tdiv64, (speed_t)tdiv64);
-       }
 
        num -= 1;
        denom -= 1;
 
                  struct ktermios *new_termios, struct ktermios *old_termios)
 {
        struct ioc3_port *port = get_ioc3_port(the_port);
-       unsigned int cflag;
+       unsigned int cflag, iflag;
        int baud;
        int new_parity = 0, new_parity_enable = 0, new_stop = 0, new_data = 8;
        struct uart_state *state = the_port->state;
 
        cflag = new_termios->c_cflag;
+       iflag = new_termios->c_iflag;
 
        switch (cflag & CSIZE) {
        case CS5:
 
        state->port.tty->low_latency = 1;
 
-       if (I_IGNPAR(state->port.tty))
+       if (iflag & IGNPAR)
                the_port->ignore_status_mask &= ~(N_PARITY_ERROR
                                                  | N_FRAMING_ERROR);
-       if (I_IGNBRK(state->port.tty)) {
+       if (iflag & IGNBRK) {
                the_port->ignore_status_mask &= ~N_BREAK;
-               if (I_IGNPAR(state->port.tty))
+               if (iflag & IGNPAR)
                        the_port->ignore_status_mask &= ~N_OVERRUN_ERROR;
        }
        if (!(cflag & CREAD)) {
 
 {
        struct ioc4_port *port = get_ioc4_port(the_port, 0);
        int baud, bits;
-       unsigned cflag;
+       unsigned cflag, iflag;
        int new_parity = 0, new_parity_enable = 0, new_stop = 0, new_data = 8;
        struct uart_state *state = the_port->state;
 
        cflag = new_termios->c_cflag;
+       iflag = new_termios->c_iflag;
 
        switch (cflag & CSIZE) {
        case CS5:
 
        state->port.tty->low_latency = 1;
 
-       if (I_IGNPAR(state->port.tty))
+       if (iflag & IGNPAR)
                the_port->ignore_status_mask &= ~(N_PARITY_ERROR
                                                | N_FRAMING_ERROR);
-       if (I_IGNBRK(state->port.tty)) {
+       if (iflag & IGNBRK) {
                the_port->ignore_status_mask &= ~N_BREAK;
-               if (I_IGNPAR(state->port.tty))
+               if (iflag & IGNPAR)
                        the_port->ignore_status_mask &= ~N_OVERRUN_ERROR;
        }
        if (!(cflag & CREAD)) {
 
        int baud = 0;
        unsigned cflag;
        u32 param_new, param_mask, parity = 0;
-       struct tty_struct *tty = s->port.state->port.tty;
 
        dev_dbg(&s->spi->dev, "%s\n", __func__);
-       if (!tty)
-               return;
 
        cflag = termios->c_cflag;
        param_new = 0;
        param_mask = 0;
 
-       baud = tty_get_baud_rate(tty);
+       baud = tty_termios_baud_rate(termios);
        param_new = s->conf & MAX3100_BAUD;
        switch (baud) {
        case 300:
        default:
                baud = s->baud;
        }
-       tty_encode_baud_rate(tty, baud, baud);
+       tty_termios_encode_baud_rate(termios, baud, baud);
        s->baud = baud;
        param_mask |= MAX3100_BAUD;