diff options
Diffstat (limited to 'drivers/usb/serial/ti_usb_3410_5052.c')
| -rw-r--r-- | drivers/usb/serial/ti_usb_3410_5052.c | 37 | 
1 files changed, 29 insertions, 8 deletions
| diff --git a/drivers/usb/serial/ti_usb_3410_5052.c b/drivers/usb/serial/ti_usb_3410_5052.c index 90979a1f5311..b2902f307b47 100644 --- a/drivers/usb/serial/ti_usb_3410_5052.c +++ b/drivers/usb/serial/ti_usb_3410_5052.c @@ -108,6 +108,8 @@ static void ti_throttle(struct tty_struct *tty);  static void ti_unthrottle(struct tty_struct *tty);  static int ti_ioctl(struct tty_struct *tty, struct file *file,  		unsigned int cmd, unsigned long arg); +static int ti_get_icount(struct tty_struct *tty, +		struct serial_icounter_struct *icount);  static void ti_set_termios(struct tty_struct *tty,  		struct usb_serial_port *port, struct ktermios *old_termios);  static int ti_tiocmget(struct tty_struct *tty, struct file *file); @@ -237,6 +239,7 @@ static struct usb_serial_driver ti_1port_device = {  	.set_termios		= ti_set_termios,  	.tiocmget		= ti_tiocmget,  	.tiocmset		= ti_tiocmset, +	.get_icount		= ti_get_icount,  	.break_ctl		= ti_break,  	.read_int_callback	= ti_interrupt_callback,  	.read_bulk_callback	= ti_bulk_in_callback, @@ -265,6 +268,7 @@ static struct usb_serial_driver ti_2port_device = {  	.set_termios		= ti_set_termios,  	.tiocmget		= ti_tiocmget,  	.tiocmset		= ti_tiocmset, +	.get_icount		= ti_get_icount,  	.break_ctl		= ti_break,  	.read_int_callback	= ti_interrupt_callback,  	.read_bulk_callback	= ti_bulk_in_callback, @@ -788,6 +792,31 @@ static void ti_unthrottle(struct tty_struct *tty)  	}  } +static int ti_get_icount(struct tty_struct *tty, +		struct serial_icounter_struct *icount) +{ +	struct usb_serial_port *port = tty->driver_data; +	struct ti_port *tport = usb_get_serial_port_data(port); +	struct async_icount cnow = tport->tp_icount; + +	dbg("%s - (%d) TIOCGICOUNT RX=%d, TX=%d", +		__func__, port->number, +		cnow.rx, cnow.tx); + +	icount->cts = cnow.cts; +	icount->dsr = cnow.dsr; +	icount->rng = cnow.rng; +	icount->dcd = cnow.dcd; +	icount->rx = cnow.rx; +	icount->tx = cnow.tx; +	icount->frame = cnow.frame; +	icount->overrun = cnow.overrun; +	icount->parity = cnow.parity; +	icount->brk = cnow.brk; +	icount->buf_overrun = cnow.buf_overrun; + +	return 0; +}  static int ti_ioctl(struct tty_struct *tty, struct file *file,  	unsigned int cmd, unsigned long arg) @@ -830,14 +859,6 @@ static int ti_ioctl(struct tty_struct *tty, struct file *file,  			cprev = cnow;  		}  		break; -	case TIOCGICOUNT: -		dbg("%s - (%d) TIOCGICOUNT RX=%d, TX=%d", -				__func__, port->number, -				tport->tp_icount.rx, tport->tp_icount.tx); -		if (copy_to_user((void __user *)arg, &tport->tp_icount, -					sizeof(tport->tp_icount))) -			return -EFAULT; -		return 0;  	}  	return -ENOIOCTLCMD;  } | 
