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>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
d281da7ff6
commit
0bca1b913a
@@ -2209,6 +2209,34 @@ static int mos7840_get_serial_info(struct moschip_port *mos7840_port,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mos7840_get_icount(struct tty_struct *tty,
|
||||
struct serial_icounter_struct *icount)
|
||||
{
|
||||
struct usb_serial_port *port = tty->driver_data;
|
||||
struct moschip_port *mos7840_port;
|
||||
struct async_icount cnow;
|
||||
|
||||
mos7840_port = mos7840_get_port_private(port);
|
||||
cnow = mos7840_port->icount;
|
||||
|
||||
smp_rmb();
|
||||
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;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* SerialIoctl
|
||||
* this function handles any ioctl calls to the driver
|
||||
@@ -2223,7 +2251,6 @@ static int mos7840_ioctl(struct tty_struct *tty, struct file *file,
|
||||
|
||||
struct async_icount cnow;
|
||||
struct async_icount cprev;
|
||||
struct serial_icounter_struct icount;
|
||||
|
||||
if (mos7840_port_paranoia_check(port, __func__)) {
|
||||
dbg("%s", "Invalid port");
|
||||
@@ -2282,29 +2309,6 @@ static int mos7840_ioctl(struct tty_struct *tty, struct file *file,
|
||||
/* NOTREACHED */
|
||||
break;
|
||||
|
||||
case TIOCGICOUNT:
|
||||
cnow = mos7840_port->icount;
|
||||
smp_rmb();
|
||||
|
||||
memset(&icount, 0, sizeof(struct serial_icounter_struct));
|
||||
|
||||
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(argp, &icount, sizeof(icount)))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -2674,6 +2678,7 @@ static struct usb_serial_driver moschip7840_4port_device = {
|
||||
.break_ctl = mos7840_break,
|
||||
.tiocmget = mos7840_tiocmget,
|
||||
.tiocmset = mos7840_tiocmset,
|
||||
.get_icount = mos7840_get_icount,
|
||||
.attach = mos7840_startup,
|
||||
.disconnect = mos7840_disconnect,
|
||||
.release = mos7840_release,
|
||||
|
Reference in New Issue
Block a user