diff options
Diffstat (limited to 'drivers/tty/amiserial.c')
| -rw-r--r-- | drivers/tty/amiserial.c | 45 | 
1 files changed, 23 insertions, 22 deletions
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c index 6cc4358f68c..42d0a2581a8 100644 --- a/drivers/tty/amiserial.c +++ b/drivers/tty/amiserial.c @@ -420,7 +420,7 @@ static void check_modem_status(struct serial_state *info)  				tty_hangup(port->tty);  		}  	} -	if (port->flags & ASYNC_CTS_FLOW) { +	if (tty_port_cts_enabled(port)) {  		if (port->tty->hw_stopped) {  			if (!(status & SER_CTS)) {  #if (defined(SERIAL_DEBUG_INTR) || defined(SERIAL_DEBUG_FLOW)) @@ -646,7 +646,7 @@ static void shutdown(struct tty_struct *tty, struct serial_state *info)  	custom.adkcon = AC_UARTBRK;  	mb(); -	if (tty->termios->c_cflag & HUPCL) +	if (tty->termios.c_cflag & HUPCL)  		info->MCR &= ~(SER_DTR|SER_RTS);  	rtsdtr_ctrl(info->MCR); @@ -670,7 +670,7 @@ static void change_speed(struct tty_struct *tty, struct serial_state *info,  	int	bits;  	unsigned long	flags; -	cflag = tty->termios->c_cflag; +	cflag = tty->termios.c_cflag;  	/* Byte size is always 8 bits plus parity bit if requested */ @@ -707,8 +707,8 @@ static void change_speed(struct tty_struct *tty, struct serial_state *info,  	/* If the quotient is zero refuse the change */  	if (!quot && old_termios) {  		/* FIXME: Will need updating for new tty in the end */ -		tty->termios->c_cflag &= ~CBAUD; -		tty->termios->c_cflag |= (old_termios->c_cflag & CBAUD); +		tty->termios.c_cflag &= ~CBAUD; +		tty->termios.c_cflag |= (old_termios->c_cflag & CBAUD);  		baud = tty_get_baud_rate(tty);  		if (!baud)  			baud = 9600; @@ -984,7 +984,7 @@ static void rs_throttle(struct tty_struct * tty)  	if (I_IXOFF(tty))  		rs_send_xchar(tty, STOP_CHAR(tty)); -	if (tty->termios->c_cflag & CRTSCTS) +	if (tty->termios.c_cflag & CRTSCTS)  		info->MCR &= ~SER_RTS;  	local_irq_save(flags); @@ -1012,7 +1012,7 @@ static void rs_unthrottle(struct tty_struct * tty)  		else  			rs_send_xchar(tty, START_CHAR(tty));  	} -	if (tty->termios->c_cflag & CRTSCTS) +	if (tty->termios.c_cflag & CRTSCTS)  		info->MCR |= SER_RTS;  	local_irq_save(flags);  	rtsdtr_ctrl(info->MCR); @@ -1033,7 +1033,7 @@ static int get_serial_info(struct tty_struct *tty, struct serial_state *state,  	if (!retinfo)  		return -EFAULT;  	memset(&tmp, 0, sizeof(tmp)); -	tty_lock(); +	tty_lock(tty);  	tmp.line = tty->index;  	tmp.port = state->port;  	tmp.flags = state->tport.flags; @@ -1042,7 +1042,7 @@ static int get_serial_info(struct tty_struct *tty, struct serial_state *state,  	tmp.close_delay = state->tport.close_delay;  	tmp.closing_wait = state->tport.closing_wait;  	tmp.custom_divisor = state->custom_divisor; -	tty_unlock(); +	tty_unlock(tty);  	if (copy_to_user(retinfo,&tmp,sizeof(*retinfo)))  		return -EFAULT;  	return 0; @@ -1059,12 +1059,12 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state,  	if (copy_from_user(&new_serial,new_info,sizeof(new_serial)))  		return -EFAULT; -	tty_lock(); +	tty_lock(tty);  	change_spd = ((new_serial.flags ^ port->flags) & ASYNC_SPD_MASK) ||  		new_serial.custom_divisor != state->custom_divisor;  	if (new_serial.irq || new_serial.port != state->port ||  			new_serial.xmit_fifo_size != state->xmit_fifo_size) { -		tty_unlock(); +		tty_unlock(tty);  		return -EINVAL;  	} @@ -1074,7 +1074,7 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state,  		    (new_serial.xmit_fifo_size != state->xmit_fifo_size) ||  		    ((new_serial.flags & ~ASYNC_USR_MASK) !=  		     (port->flags & ~ASYNC_USR_MASK))) { -			tty_unlock(); +			tty_unlock(tty);  			return -EPERM;  		}  		port->flags = ((port->flags & ~ASYNC_USR_MASK) | @@ -1084,7 +1084,7 @@ static int set_serial_info(struct tty_struct *tty, struct serial_state *state,  	}  	if (new_serial.baud_base < 9600) { -		tty_unlock(); +		tty_unlock(tty);  		return -EINVAL;  	} @@ -1116,7 +1116,7 @@ check_and_exit:  		}  	} else  		retval = startup(tty, state); -	tty_unlock(); +	tty_unlock(tty);  	return retval;  } @@ -1330,7 +1330,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios)  {  	struct serial_state *info = tty->driver_data;  	unsigned long flags; -	unsigned int cflag = tty->termios->c_cflag; +	unsigned int cflag = tty->termios.c_cflag;  	change_speed(tty, info, old_termios); @@ -1347,7 +1347,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios)  	if (!(old_termios->c_cflag & CBAUD) &&  	    (cflag & CBAUD)) {  		info->MCR |= SER_DTR; -		if (!(tty->termios->c_cflag & CRTSCTS) ||  +		if (!(tty->termios.c_cflag & CRTSCTS) ||   		    !test_bit(TTY_THROTTLED, &tty->flags)) {  			info->MCR |= SER_RTS;  		} @@ -1358,7 +1358,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios)  	/* Handle turning off CRTSCTS */  	if ((old_termios->c_cflag & CRTSCTS) && -	    !(tty->termios->c_cflag & CRTSCTS)) { +	    !(tty->termios.c_cflag & CRTSCTS)) {  		tty->hw_stopped = 0;  		rs_start(tty);  	} @@ -1371,7 +1371,7 @@ static void rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios)  	 * or not.  Hence, this may change.....  	 */  	if (!(old_termios->c_cflag & CLOCAL) && -	    (tty->termios->c_cflag & CLOCAL)) +	    (tty->termios.c_cflag & CLOCAL))  		wake_up_interruptible(&info->open_wait);  #endif  } @@ -1710,10 +1710,6 @@ static int __init amiga_serial_probe(struct platform_device *pdev)  	serial_driver->flags = TTY_DRIVER_REAL_RAW;  	tty_set_operations(serial_driver, &serial_ops); -	error = tty_register_driver(serial_driver); -	if (error) -		goto fail_put_tty_driver; -  	state = rs_table;  	state->port = (int)&custom.serdatr; /* Just to give it a value */  	state->custom_divisor = 0; @@ -1724,6 +1720,11 @@ static int __init amiga_serial_probe(struct platform_device *pdev)  	state->icount.overrun = state->icount.brk = 0;  	tty_port_init(&state->tport);  	state->tport.ops = &amiga_port_ops; +	tty_port_link_device(&state->tport, serial_driver, 0); + +	error = tty_register_driver(serial_driver); +	if (error) +		goto fail_put_tty_driver;  	printk(KERN_INFO "ttyS0 is the amiga builtin serial port\n");  |