--- linux-2.6.23-rc3-mm1/drivers/char/nozomi.c.orig 2007-08-24 05:39:06.000000000 -0400 +++ linux-2.6.23-rc3-mm1/drivers/char/nozomi.c 2007-08-24 05:41:07.000000000 -0400 @@ -1930,12 +1930,16 @@ } /* Sets io controls parameters */ -static int ntty_tiocmset(struct tty_struct *tty, struct file *file, u32 arg) +static int ntty_tiocmset(struct tty_struct *tty, struct file *file, + unsigned int set, unsigned int clear) { struct port *port = (struct port *)tty->driver_data; - set_rts(port->tty_index, (arg & TIOCM_RTS) ? 1 : 0); - set_dtr(port->tty_index, (arg & TIOCM_DTR) ? 1 : 0); + if(set & TIOCM_RTS) set_rts(port->tty_index, 1); + else if(clear & TIOCM_RTS) set_rts(port->tty_index, 0); + + if(set & TIOCM_DTR) set_dtr(port->tty_index, 1); + else if(clear & TIOCM_DTR) set_dtr(port->tty_index, 0); return 0; } @@ -2039,7 +2043,7 @@ spin_unlock_irqrestore(&dc->spin_mutex, flags); break; case TIOCMSET: - rval = ntty_tiocmset(tty, file, arg); + rval = ntty_tiocmset(tty, file, arg, ~arg); break; case TIOCMBIC: if (get_user(mask, (unsigned long __user *)arg)) @@ -2152,6 +2156,7 @@ .set_termios = ntty_set_termios, .chars_in_buffer = ntty_chars_in_buffer, .put_char = ntty_put_char, + .tiocmset = ntty_tiocmset, }; /* Initializes the tty */