Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 185418
b: refs/heads/master
c: 1f87158
h: refs/heads/master
v: v3
  • Loading branch information
Alan Stern authored and Greg Kroah-Hartman committed Mar 2, 2010
1 parent ac831f3 commit e6ac0b2
Show file tree
Hide file tree
Showing 12 changed files with 67 additions and 127 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a108bfcb372d8c4452701039308fb95747911c59
refs/heads/master: 1f87158e44e79e62c8250f278c225ce4ab695f4b
34 changes: 13 additions & 21 deletions trunk/drivers/usb/serial/aircable.c
Original file line number Diff line number Diff line change
Expand Up @@ -468,10 +468,6 @@ static void aircable_read_bulk_callback(struct urb *urb)

if (status) {
dbg("%s - urb status = %d", __func__, status);
if (!port->port.count) {
dbg("%s - port is closed, exiting.", __func__);
return;
}
if (status == -EPROTO) {
dbg("%s - caught -EPROTO, resubmitting the urb",
__func__);
Expand Down Expand Up @@ -530,23 +526,19 @@ static void aircable_read_bulk_callback(struct urb *urb)
}
tty_kref_put(tty);

/* Schedule the next read _if_ we are still open */
if (port->port.count) {
usb_fill_bulk_urb(port->read_urb, port->serial->dev,
usb_rcvbulkpipe(port->serial->dev,
port->bulk_in_endpointAddress),
port->read_urb->transfer_buffer,
port->read_urb->transfer_buffer_length,
aircable_read_bulk_callback, port);

result = usb_submit_urb(urb, GFP_ATOMIC);
if (result)
dev_err(&urb->dev->dev,
"%s - failed resubmitting read urb, error %d\n",
__func__, result);
}

return;
/* Schedule the next read */
usb_fill_bulk_urb(port->read_urb, port->serial->dev,
usb_rcvbulkpipe(port->serial->dev,
port->bulk_in_endpointAddress),
port->read_urb->transfer_buffer,
port->read_urb->transfer_buffer_length,
aircable_read_bulk_callback, port);

result = usb_submit_urb(urb, GFP_ATOMIC);
if (result && result != -EPERM)
dev_err(&urb->dev->dev,
"%s - failed resubmitting read urb, error %d\n",
__func__, result);
}

/* Based on ftdi_sio.c throttle */
Expand Down
6 changes: 3 additions & 3 deletions trunk/drivers/usb/serial/cypress_m8.c
Original file line number Diff line number Diff line change
Expand Up @@ -1321,9 +1321,9 @@ static void cypress_read_int_callback(struct urb *urb)
continue_read:
tty_kref_put(tty);

/* Continue trying to always read... unless the port has closed. */
/* Continue trying to always read */

if (port->port.count > 0 && priv->comm_is_ok) {
if (priv->comm_is_ok) {
usb_fill_int_urb(port->interrupt_in_urb, port->serial->dev,
usb_rcvintpipe(port->serial->dev,
port->interrupt_in_endpointAddress),
Expand All @@ -1332,7 +1332,7 @@ static void cypress_read_int_callback(struct urb *urb)
cypress_read_int_callback, port,
priv->read_urb_interval);
result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
if (result) {
if (result && result != -EPERM) {
dev_err(&urb->dev->dev, "%s - failed resubmitting "
"read urb, error %d\n", __func__,
result);
Expand Down
19 changes: 8 additions & 11 deletions trunk/drivers/usb/serial/digi_acceleport.c
Original file line number Diff line number Diff line change
Expand Up @@ -1262,10 +1262,10 @@ static void digi_write_bulk_callback(struct urb *urb)
return;
}

/* try to send any buffered data on this port, if it is open */
/* try to send any buffered data on this port */
spin_lock(&priv->dp_port_lock);
priv->dp_write_urb_in_use = 0;
if (port->port.count && priv->dp_out_buf_len > 0) {
if (priv->dp_out_buf_len > 0) {
*((unsigned char *)(port->write_urb->transfer_buffer))
= (unsigned char)DIGI_CMD_SEND_DATA;
*((unsigned char *)(port->write_urb->transfer_buffer) + 1)
Expand All @@ -1288,7 +1288,7 @@ static void digi_write_bulk_callback(struct urb *urb)
schedule_work(&priv->dp_wakeup_work);

spin_unlock(&priv->dp_port_lock);
if (ret)
if (ret && ret != -EPERM)
dev_err(&port->dev,
"%s: usb_submit_urb failed, ret=%d, port=%d\n",
__func__, ret, priv->dp_port_num);
Expand Down Expand Up @@ -1353,8 +1353,7 @@ static int digi_open(struct tty_struct *tty, struct usb_serial_port *port)
struct digi_port *priv = usb_get_serial_port_data(port);
struct ktermios not_termios;

dbg("digi_open: TOP: port=%d, open_count=%d",
priv->dp_port_num, port->port.count);
dbg("digi_open: TOP: port=%d", priv->dp_port_num);

/* be sure the device is started up */
if (digi_startup_device(port->serial) != 0)
Expand Down Expand Up @@ -1393,8 +1392,7 @@ static void digi_close(struct usb_serial_port *port)
unsigned char buf[32];
struct digi_port *priv = usb_get_serial_port_data(port);

dbg("digi_close: TOP: port=%d, open_count=%d",
priv->dp_port_num, port->port.count);
dbg("digi_close: TOP: port=%d", priv->dp_port_num);

mutex_lock(&port->serial->disc_mutex);
/* if disconnected, just clear flags */
Expand Down Expand Up @@ -1629,7 +1627,7 @@ static void digi_read_bulk_callback(struct urb *urb)
/* continue read */
urb->dev = port->serial->dev;
ret = usb_submit_urb(urb, GFP_ATOMIC);
if (ret != 0) {
if (ret != 0 && ret != -EPERM) {
dev_err(&port->dev,
"%s: failed resubmitting urb, ret=%d, port=%d\n",
__func__, ret, priv->dp_port_num);
Expand Down Expand Up @@ -1662,7 +1660,7 @@ static int digi_read_inb_callback(struct urb *urb)

/* do not process callbacks on closed ports */
/* but do continue the read chain */
if (port->port.count == 0)
if (urb->status == -ENOENT)
return 0;

/* short/multiple packet check */
Expand Down Expand Up @@ -1767,8 +1765,7 @@ static int digi_read_oob_callback(struct urb *urb)

tty = tty_port_tty_get(&port->port);
rts = 0;
if (port->port.count)
rts = tty->termios->c_cflag & CRTSCTS;
rts = tty->termios->c_cflag & CRTSCTS;

if (opcode == DIGI_CMD_READ_INPUT_SIGNALS) {
spin_lock(&priv->dp_port_lock);
Expand Down
3 changes: 2 additions & 1 deletion trunk/drivers/usb/serial/generic.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include <linux/usb/serial.h>
#include <linux/uaccess.h>
#include <linux/kfifo.h>
#include <linux/serial.h>

static int debug;

Expand Down Expand Up @@ -585,7 +586,7 @@ int usb_serial_generic_resume(struct usb_serial *serial)

for (i = 0; i < serial->num_ports; i++) {
port = serial->port[i];
if (!port->port.count)
if (!test_bit(ASYNCB_INITIALIZED, &port->port.flags))
continue;

if (port->read_urb) {
Expand Down
5 changes: 0 additions & 5 deletions trunk/drivers/usb/serial/ir-usb.c
Original file line number Diff line number Diff line change
Expand Up @@ -445,11 +445,6 @@ static void ir_read_bulk_callback(struct urb *urb)

dbg("%s - port %d", __func__, port->number);

if (!port->port.count) {
dbg("%s - port closed.", __func__);
return;
}

switch (status) {
case 0: /* Successful */
/*
Expand Down
57 changes: 18 additions & 39 deletions trunk/drivers/usb/serial/keyspan.c
Original file line number Diff line number Diff line change
Expand Up @@ -464,13 +464,9 @@ static void usa26_indat_callback(struct urb *urb)

/* Resubmit urb so we continue receiving */
urb->dev = port->serial->dev;
if (port->port.count) {
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err != 0)
dbg("%s - resubmit read urb failed. (%d)",
__func__, err);
}
return;
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err != 0)
dbg("%s - resubmit read urb failed. (%d)", __func__, err);
}

/* Outdat handling is common for all devices */
Expand All @@ -483,8 +479,7 @@ static void usa2x_outdat_callback(struct urb *urb)
p_priv = usb_get_serial_port_data(port);
dbg("%s - urb %d", __func__, urb == p_priv->out_urbs[1]);

if (port->port.count)
usb_serial_port_softint(port);
usb_serial_port_softint(port);
}

static void usa26_inack_callback(struct urb *urb)
Expand Down Expand Up @@ -615,12 +610,10 @@ static void usa28_indat_callback(struct urb *urb)

/* Resubmit urb so we continue receiving */
urb->dev = port->serial->dev;
if (port->port.count) {
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err != 0)
dbg("%s - resubmit read urb failed. (%d)",
__func__, err);
}
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err != 0)
dbg("%s - resubmit read urb failed. (%d)",
__func__, err);
p_priv->in_flip ^= 1;

urb = p_priv->in_urbs[p_priv->in_flip];
Expand Down Expand Up @@ -856,12 +849,9 @@ static void usa49_indat_callback(struct urb *urb)

/* Resubmit urb so we continue receiving */
urb->dev = port->serial->dev;
if (port->port.count) {
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err != 0)
dbg("%s - resubmit read urb failed. (%d)",
__func__, err);
}
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err != 0)
dbg("%s - resubmit read urb failed. (%d)", __func__, err);
}

static void usa49wg_indat_callback(struct urb *urb)
Expand Down Expand Up @@ -904,11 +894,7 @@ static void usa49wg_indat_callback(struct urb *urb)
/* no error on any byte */
i++;
for (x = 1; x < len ; ++x)
if (port->port.count)
tty_insert_flip_char(tty,
data[i++], 0);
else
i++;
tty_insert_flip_char(tty, data[i++], 0);
} else {
/*
* some bytes had errors, every byte has status
Expand All @@ -922,14 +908,12 @@ static void usa49wg_indat_callback(struct urb *urb)
if (stat & RXERROR_PARITY)
flag |= TTY_PARITY;
/* XXX should handle break (0x10) */
if (port->port.count)
tty_insert_flip_char(tty,
tty_insert_flip_char(tty,
data[i+1], flag);
i += 2;
}
}
if (port->port.count)
tty_flip_buffer_push(tty);
tty_flip_buffer_push(tty);
tty_kref_put(tty);
}
}
Expand Down Expand Up @@ -1013,13 +997,9 @@ static void usa90_indat_callback(struct urb *urb)

/* Resubmit urb so we continue receiving */
urb->dev = port->serial->dev;
if (port->port.count) {
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err != 0)
dbg("%s - resubmit read urb failed. (%d)",
__func__, err);
}
return;
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err != 0)
dbg("%s - resubmit read urb failed. (%d)", __func__, err);
}


Expand Down Expand Up @@ -2418,8 +2398,7 @@ static int keyspan_usa90_send_setup(struct usb_serial *serial,
msg.portEnabled = 0;
/* Sending intermediate configs */
else {
if (port->port.count)
msg.portEnabled = 1;
msg.portEnabled = 1;
msg.txBreak = (p_priv->break_on);
}

Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/usb/serial/option.c
Original file line number Diff line number Diff line change
Expand Up @@ -971,9 +971,9 @@ static void option_indat_callback(struct urb *urb)
tty_kref_put(tty);

/* Resubmit urb so we continue receiving */
if (port->port.count && status != -ESHUTDOWN) {
if (status != -ESHUTDOWN) {
err = usb_submit_urb(urb, GFP_ATOMIC);
if (err)
if (err && err != -EPERM)
printk(KERN_ERR "%s: resubmit read urb failed. "
"(%d)", __func__, err);
else
Expand Down
21 changes: 6 additions & 15 deletions trunk/drivers/usb/serial/oti6858.c
Original file line number Diff line number Diff line change
Expand Up @@ -585,9 +585,6 @@ static int oti6858_open(struct tty_struct *tty, struct usb_serial_port *port)
usb_clear_halt(serial->dev, port->write_urb->pipe);
usb_clear_halt(serial->dev, port->read_urb->pipe);

if (port->port.count != 1)
return 0;

buf = kmalloc(OTI6858_CTRL_PKT_SIZE, GFP_KERNEL);
if (buf == NULL) {
dev_err(&port->dev, "%s(): out of memory!\n", __func__);
Expand Down Expand Up @@ -934,10 +931,6 @@ static void oti6858_read_bulk_callback(struct urb *urb)
spin_unlock_irqrestore(&priv->lock, flags);

if (status != 0) {
if (!port->port.count) {
dbg("%s(): port is closed, exiting", __func__);
return;
}
/*
if (status == -EPROTO) {
* PL2303 mysteriously fails with -EPROTO reschedule
Expand All @@ -961,14 +954,12 @@ static void oti6858_read_bulk_callback(struct urb *urb)
}
tty_kref_put(tty);

/* schedule the interrupt urb if we are still open */
if (port->port.count != 0) {
port->interrupt_in_urb->dev = port->serial->dev;
result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
if (result != 0) {
dev_err(&port->dev, "%s(): usb_submit_urb() failed,"
" error %d\n", __func__, result);
}
/* schedule the interrupt urb */
port->interrupt_in_urb->dev = port->serial->dev;
result = usb_submit_urb(port->interrupt_in_urb, GFP_ATOMIC);
if (result != 0 && result != -EPERM) {
dev_err(&port->dev, "%s(): usb_submit_urb() failed,"
" error %d\n", __func__, result);
}
}

Expand Down
18 changes: 5 additions & 13 deletions trunk/drivers/usb/serial/pl2303.c
Original file line number Diff line number Diff line change
Expand Up @@ -1071,10 +1071,6 @@ static void pl2303_read_bulk_callback(struct urb *urb)

if (status) {
dbg("%s - urb status = %d", __func__, status);
if (!port->port.count) {
dbg("%s - port is closed, exiting.", __func__);
return;
}
if (status == -EPROTO) {
/* PL2303 mysteriously fails with -EPROTO reschedule
* the read */
Expand Down Expand Up @@ -1107,15 +1103,11 @@ static void pl2303_read_bulk_callback(struct urb *urb)
}
tty_kref_put(tty);
/* Schedule the next read _if_ we are still open */
if (port->port.count) {
urb->dev = port->serial->dev;
result = usb_submit_urb(urb, GFP_ATOMIC);
if (result)
dev_err(&urb->dev->dev, "%s - failed resubmitting"
" read urb, error %d\n", __func__, result);
}

return;
urb->dev = port->serial->dev;
result = usb_submit_urb(urb, GFP_ATOMIC);
if (result && result != -EPERM)
dev_err(&urb->dev->dev, "%s - failed resubmitting"
" read urb, error %d\n", __func__, result);
}

static void pl2303_write_bulk_callback(struct urb *urb)
Expand Down
Loading

0 comments on commit e6ac0b2

Please sign in to comment.