diff options
author | Alan Cox <alan@linux.intel.com> | 2010-09-16 18:21:40 +0100 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-10-22 10:20:04 -0700 |
commit | 0bca1b913affbd7e2fdaffee62a499659a466eb5 (patch) | |
tree | a7e1c20146790345c0cdcadb31b4ff908d1632c2 /drivers/usb/serial/io_edgeport.c | |
parent | d281da7ff6f70efca0553c288bb883e8605b3862 (diff) |
tty: Convert the USB drivers to the new icount interface
Simple pasting job using the new ops function. Also fix a couple of devices
directly returning the internal struct (which happens at this point to match
for the fields that matter but isn't correct or futureproof)
Signed-off-by: Alan Cox <alan@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/serial/io_edgeport.c')
-rw-r--r-- | drivers/usb/serial/io_edgeport.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/drivers/usb/serial/io_edgeport.c b/drivers/usb/serial/io_edgeport.c index 76e6fb3aab7..a0ab78ada25 100644 --- a/drivers/usb/serial/io_edgeport.c +++ b/drivers/usb/serial/io_edgeport.c @@ -222,6 +222,8 @@ static void edge_break(struct tty_struct *tty, int break_state); static int edge_tiocmget(struct tty_struct *tty, struct file *file); static int edge_tiocmset(struct tty_struct *tty, struct file *file, unsigned int set, unsigned int clear); +static int edge_get_icount(struct tty_struct *tty, + struct serial_icounter_struct *icount); static int edge_startup(struct usb_serial *serial); static void edge_disconnect(struct usb_serial *serial); static void edge_release(struct usb_serial *serial); @@ -1624,6 +1626,31 @@ static int edge_tiocmget(struct tty_struct *tty, struct file *file) return result; } +static int edge_get_icount(struct tty_struct *tty, + struct serial_icounter_struct *icount) +{ + struct usb_serial_port *port = tty->driver_data; + struct edgeport_port *edge_port = usb_get_serial_port_data(port); + struct async_icount cnow; + cnow = edge_port->icount; + + 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; + + dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d", + __func__, port->number, icount->rx, icount->tx); + return 0; +} + static int get_serial_info(struct edgeport_port *edge_port, struct serial_struct __user *retinfo) { @@ -1650,7 +1677,6 @@ static int get_serial_info(struct edgeport_port *edge_port, } - /***************************************************************************** * SerialIoctl * this function handles any ioctl calls to the driver @@ -1663,7 +1689,6 @@ static int edge_ioctl(struct tty_struct *tty, struct file *file, struct edgeport_port *edge_port = usb_get_serial_port_data(port); struct async_icount cnow; struct async_icount cprev; - struct serial_icounter_struct icount; dbg("%s - port %d, cmd = 0x%x", __func__, port->number, cmd); @@ -1702,26 +1727,6 @@ static int edge_ioctl(struct tty_struct *tty, struct file *file, /* NOTREACHED */ break; - case TIOCGICOUNT: - cnow = edge_port->icount; - memset(&icount, 0, sizeof(icount)); - 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; - - dbg("%s (%d) TIOCGICOUNT RX=%d, TX=%d", - __func__, port->number, icount.rx, icount.tx); - if (copy_to_user((void __user *)arg, &icount, sizeof(icount))) - return -EFAULT; - return 0; } return -ENOIOCTLCMD; } |