Merge tag 'usb-3.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb
Pull USB patches from Greg Kroah-Hartman: "Here's the big USB pull request for 3.10-rc1. Lots of USB patches here, the majority being USB gadget changes and USB-serial driver cleanups, the rest being ARM build fixes / cleanups, and individual driver updates. We also finally got some chipidea fixes, which have been delayed for a number of kernel releases, as the maintainer has now reappeared. All of these have been in linux-next for a while" * tag 'usb-3.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb: (568 commits) USB: ehci-msm: USB_MSM_OTG needs USB_PHY USB: OHCI: avoid conflicting platform drivers USB: OMAP: ISP1301 needs USB_PHY USB: lpc32xx: ISP1301 needs USB_PHY USB: ftdi_sio: enable two UART ports on ST Microconnect Lite usb: phy: tegra: don't call into tegra-ehci directly usb: phy: phy core cannot yet be a module USB: Fix initconst in ehci driver usb-storage: CY7C68300A chips do not support Cypress ATACB USB: serial: option: Added support Olivetti Olicard 145 USB: ftdi_sio: correct ST Micro Connect Lite PIDs ARM: mxs_defconfig: add CONFIG_USB_PHY ARM: imx_v6_v7_defconfig: add CONFIG_USB_PHY usb: phy: remove exported function from __init section usb: gadget: zero: put function instances on unbind usb: gadget: f_sourcesink.c: correct a copy-paste misnomer usb: gadget: cdc2: fix error return code in cdc_do_config() usb: gadget: multi: fix error return code in rndis_do_config() usb: gadget: f_obex: fix error return code in obex_bind() USB: storage: convert to use module_usb_driver() ...
This commit is contained in:
@@ -219,8 +219,6 @@ struct moschip_port {
|
||||
char open;
|
||||
char open_ports;
|
||||
wait_queue_head_t wait_chase; /* for handling sleeping while waiting for chase to finish */
|
||||
int delta_msr_cond;
|
||||
struct async_icount icount;
|
||||
struct usb_serial_port *port; /* loop back to the owner of this object */
|
||||
|
||||
/* Offsets */
|
||||
@@ -399,32 +397,22 @@ static void mos7840_handle_new_msr(struct moschip_port *port, __u8 new_msr)
|
||||
struct moschip_port *mos7840_port;
|
||||
struct async_icount *icount;
|
||||
mos7840_port = port;
|
||||
icount = &mos7840_port->icount;
|
||||
if (new_msr &
|
||||
(MOS_MSR_DELTA_CTS | MOS_MSR_DELTA_DSR | MOS_MSR_DELTA_RI |
|
||||
MOS_MSR_DELTA_CD)) {
|
||||
icount = &mos7840_port->icount;
|
||||
icount = &mos7840_port->port->icount;
|
||||
|
||||
/* update input line counters */
|
||||
if (new_msr & MOS_MSR_DELTA_CTS) {
|
||||
if (new_msr & MOS_MSR_DELTA_CTS)
|
||||
icount->cts++;
|
||||
smp_wmb();
|
||||
}
|
||||
if (new_msr & MOS_MSR_DELTA_DSR) {
|
||||
if (new_msr & MOS_MSR_DELTA_DSR)
|
||||
icount->dsr++;
|
||||
smp_wmb();
|
||||
}
|
||||
if (new_msr & MOS_MSR_DELTA_CD) {
|
||||
if (new_msr & MOS_MSR_DELTA_CD)
|
||||
icount->dcd++;
|
||||
smp_wmb();
|
||||
}
|
||||
if (new_msr & MOS_MSR_DELTA_RI) {
|
||||
if (new_msr & MOS_MSR_DELTA_RI)
|
||||
icount->rng++;
|
||||
smp_wmb();
|
||||
}
|
||||
|
||||
mos7840_port->delta_msr_cond = 1;
|
||||
wake_up_interruptible(&port->port->delta_msr_wait);
|
||||
wake_up_interruptible(&port->port->port.delta_msr_wait);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -442,23 +430,15 @@ static void mos7840_handle_new_lsr(struct moschip_port *port, __u8 new_lsr)
|
||||
}
|
||||
|
||||
/* update input line counters */
|
||||
icount = &port->icount;
|
||||
if (new_lsr & SERIAL_LSR_BI) {
|
||||
icount = &port->port->icount;
|
||||
if (new_lsr & SERIAL_LSR_BI)
|
||||
icount->brk++;
|
||||
smp_wmb();
|
||||
}
|
||||
if (new_lsr & SERIAL_LSR_OE) {
|
||||
if (new_lsr & SERIAL_LSR_OE)
|
||||
icount->overrun++;
|
||||
smp_wmb();
|
||||
}
|
||||
if (new_lsr & SERIAL_LSR_PE) {
|
||||
if (new_lsr & SERIAL_LSR_PE)
|
||||
icount->parity++;
|
||||
smp_wmb();
|
||||
}
|
||||
if (new_lsr & SERIAL_LSR_FE) {
|
||||
if (new_lsr & SERIAL_LSR_FE)
|
||||
icount->frame++;
|
||||
smp_wmb();
|
||||
}
|
||||
}
|
||||
|
||||
/************************************************************************/
|
||||
@@ -777,9 +757,8 @@ static void mos7840_bulk_in_callback(struct urb *urb)
|
||||
struct tty_port *tport = &mos7840_port->port->port;
|
||||
tty_insert_flip_string(tport, data, urb->actual_length);
|
||||
tty_flip_buffer_push(tport);
|
||||
mos7840_port->icount.rx += urb->actual_length;
|
||||
smp_wmb();
|
||||
dev_dbg(&port->dev, "mos7840_port->icount.rx is %d:\n", mos7840_port->icount.rx);
|
||||
port->icount.rx += urb->actual_length;
|
||||
dev_dbg(&port->dev, "icount.rx is %d:\n", port->icount.rx);
|
||||
}
|
||||
|
||||
if (!mos7840_port->read_urb) {
|
||||
@@ -1127,17 +1106,12 @@ static int mos7840_open(struct tty_struct *tty, struct usb_serial_port *port)
|
||||
/* initialize our wait queues */
|
||||
init_waitqueue_head(&mos7840_port->wait_chase);
|
||||
|
||||
/* initialize our icount structure */
|
||||
memset(&(mos7840_port->icount), 0x00, sizeof(mos7840_port->icount));
|
||||
|
||||
/* initialize our port settings */
|
||||
/* Must set to enable ints! */
|
||||
mos7840_port->shadowMCR = MCR_MASTER_IE;
|
||||
/* send a open port command */
|
||||
mos7840_port->open = 1;
|
||||
/* mos7840_change_port_settings(mos7840_port,old_termios); */
|
||||
mos7840_port->icount.tx = 0;
|
||||
mos7840_port->icount.rx = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1220,25 +1194,10 @@ static void mos7840_close(struct usb_serial_port *port)
|
||||
}
|
||||
}
|
||||
|
||||
/* While closing port, shutdown all bulk read, write *
|
||||
* and interrupt read if they exists */
|
||||
if (serial->dev) {
|
||||
if (mos7840_port->write_urb) {
|
||||
dev_dbg(&port->dev, "%s", "Shutdown bulk write\n");
|
||||
usb_kill_urb(mos7840_port->write_urb);
|
||||
}
|
||||
if (mos7840_port->read_urb) {
|
||||
dev_dbg(&port->dev, "%s", "Shutdown bulk read\n");
|
||||
usb_kill_urb(mos7840_port->read_urb);
|
||||
mos7840_port->read_urb_busy = false;
|
||||
}
|
||||
if ((&mos7840_port->control_urb)) {
|
||||
dev_dbg(&port->dev, "%s", "Shutdown control read\n");
|
||||
/*/ usb_kill_urb (mos7840_port->control_urb); */
|
||||
}
|
||||
}
|
||||
/* if(mos7840_port->ctrl_buf != NULL) */
|
||||
/* kfree(mos7840_port->ctrl_buf); */
|
||||
usb_kill_urb(mos7840_port->write_urb);
|
||||
usb_kill_urb(mos7840_port->read_urb);
|
||||
mos7840_port->read_urb_busy = false;
|
||||
|
||||
port0->open_ports--;
|
||||
dev_dbg(&port->dev, "%s in close%d:in port%d\n", __func__, port0->open_ports, port->number);
|
||||
if (port0->open_ports == 0) {
|
||||
@@ -1250,8 +1209,7 @@ static void mos7840_close(struct usb_serial_port *port)
|
||||
|
||||
if (mos7840_port->write_urb) {
|
||||
/* if this urb had a transfer buffer already (old tx) free it */
|
||||
if (mos7840_port->write_urb->transfer_buffer != NULL)
|
||||
kfree(mos7840_port->write_urb->transfer_buffer);
|
||||
kfree(mos7840_port->write_urb->transfer_buffer);
|
||||
usb_free_urb(mos7840_port->write_urb);
|
||||
}
|
||||
|
||||
@@ -1328,9 +1286,8 @@ static void mos7840_break(struct tty_struct *tty, int break_state)
|
||||
if (mos7840_port == NULL)
|
||||
return;
|
||||
|
||||
if (serial->dev)
|
||||
/* flush and block until tx is empty */
|
||||
mos7840_block_until_chase_response(tty, mos7840_port);
|
||||
/* flush and block until tx is empty */
|
||||
mos7840_block_until_chase_response(tty, mos7840_port);
|
||||
|
||||
if (break_state == -1)
|
||||
data = mos7840_port->shadowLCR | LCR_SET_BREAK;
|
||||
@@ -1520,9 +1477,8 @@ static int mos7840_write(struct tty_struct *tty, struct usb_serial_port *port,
|
||||
goto exit;
|
||||
}
|
||||
bytes_sent = transfer_size;
|
||||
mos7840_port->icount.tx += transfer_size;
|
||||
smp_wmb();
|
||||
dev_dbg(&port->dev, "mos7840_port->icount.tx is %d:\n", mos7840_port->icount.tx);
|
||||
port->icount.tx += transfer_size;
|
||||
dev_dbg(&port->dev, "icount.tx is %d:\n", port->icount.tx);
|
||||
exit:
|
||||
return bytes_sent;
|
||||
|
||||
@@ -2141,34 +2097,6 @@ 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;
|
||||
|
||||
dev_dbg(&port->dev, "%s TIOCGICOUNT RX=%d, TX=%d\n", __func__,
|
||||
icount->rx, icount->tx);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* SerialIoctl
|
||||
* this function handles any ioctl calls to the driver
|
||||
@@ -2181,9 +2109,6 @@ static int mos7840_ioctl(struct tty_struct *tty,
|
||||
void __user *argp = (void __user *)arg;
|
||||
struct moschip_port *mos7840_port;
|
||||
|
||||
struct async_icount cnow;
|
||||
struct async_icount cprev;
|
||||
|
||||
if (mos7840_port_paranoia_check(port, __func__))
|
||||
return -1;
|
||||
|
||||
@@ -2208,41 +2133,6 @@ static int mos7840_ioctl(struct tty_struct *tty,
|
||||
case TIOCSSERIAL:
|
||||
dev_dbg(&port->dev, "%s TIOCSSERIAL\n", __func__);
|
||||
break;
|
||||
|
||||
case TIOCMIWAIT:
|
||||
dev_dbg(&port->dev, "%s TIOCMIWAIT\n", __func__);
|
||||
cprev = mos7840_port->icount;
|
||||
while (1) {
|
||||
/* interruptible_sleep_on(&mos7840_port->delta_msr_wait); */
|
||||
mos7840_port->delta_msr_cond = 0;
|
||||
wait_event_interruptible(port->delta_msr_wait,
|
||||
(port->serial->disconnected ||
|
||||
mos7840_port->
|
||||
delta_msr_cond == 1));
|
||||
|
||||
/* see if a signal did it */
|
||||
if (signal_pending(current))
|
||||
return -ERESTARTSYS;
|
||||
|
||||
if (port->serial->disconnected)
|
||||
return -EIO;
|
||||
|
||||
cnow = mos7840_port->icount;
|
||||
smp_rmb();
|
||||
if (cnow.rng == cprev.rng && cnow.dsr == cprev.dsr &&
|
||||
cnow.dcd == cprev.dcd && cnow.cts == cprev.cts)
|
||||
return -EIO; /* no change => error */
|
||||
if (((arg & TIOCM_RNG) && (cnow.rng != cprev.rng)) ||
|
||||
((arg & TIOCM_DSR) && (cnow.dsr != cprev.dsr)) ||
|
||||
((arg & TIOCM_CD) && (cnow.dcd != cprev.dcd)) ||
|
||||
((arg & TIOCM_CTS) && (cnow.cts != cprev.cts))) {
|
||||
return 0;
|
||||
}
|
||||
cprev = cnow;
|
||||
}
|
||||
/* NOTREACHED */
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -2589,7 +2479,8 @@ static struct usb_serial_driver moschip7840_4port_device = {
|
||||
.break_ctl = mos7840_break,
|
||||
.tiocmget = mos7840_tiocmget,
|
||||
.tiocmset = mos7840_tiocmset,
|
||||
.get_icount = mos7840_get_icount,
|
||||
.tiocmiwait = usb_serial_generic_tiocmiwait,
|
||||
.get_icount = usb_serial_generic_get_icount,
|
||||
.port_probe = mos7840_port_probe,
|
||||
.port_remove = mos7840_port_remove,
|
||||
.read_bulk_callback = mos7840_bulk_in_callback,
|
||||
|
Reference in New Issue
Block a user