Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 82275
b: refs/heads/master
c: e33fe4d
h: refs/heads/master
i:
  82273: 438dfea
  82271: fc78c06
v: v3
  • Loading branch information
Oliver Neukum authored and Greg Kroah-Hartman committed Feb 1, 2008
1 parent 1bd19df commit a339af6
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 22 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: 004b4f2d4448cff7f13871c05d744b00a7c74d4a
refs/heads/master: e33fe4d86f91127f6f7d931ff59ed6cbda06e72b
17 changes: 9 additions & 8 deletions trunk/drivers/usb/serial/mct_u232.c
Original file line number Diff line number Diff line change
Expand Up @@ -487,21 +487,22 @@ static int mct_u232_open (struct usb_serial_port *port, struct file *filp)
static void mct_u232_close (struct usb_serial_port *port, struct file *filp)
{
unsigned int c_cflag;
unsigned long flags;
unsigned int control_state;
struct mct_u232_private *priv = usb_get_serial_port_data(port);
dbg("%s port %d", __FUNCTION__, port->number);

if (port->tty) {
c_cflag = port->tty->termios->c_cflag;
if (c_cflag & HUPCL) {
/* drop DTR and RTS */
spin_lock_irqsave(&priv->lock, flags);
priv->control_state &= ~(TIOCM_DTR | TIOCM_RTS);
control_state = priv->control_state;
spin_unlock_irqrestore(&priv->lock, flags);
mct_u232_set_modem_ctrl(port->serial, control_state);
mutex_lock(&port->serial->disc_mutex);
if (c_cflag & HUPCL && !port->serial->disconnected) {
/* drop DTR and RTS */
spin_lock_irq(&priv->lock);
priv->control_state &= ~(TIOCM_DTR | TIOCM_RTS);
control_state = priv->control_state;
spin_unlock_irq(&priv->lock);
mct_u232_set_modem_ctrl(port->serial, control_state);
}
mutex_unlock(&port->serial->disc_mutex);
}


Expand Down
5 changes: 4 additions & 1 deletion trunk/drivers/usb/serial/option.c
Original file line number Diff line number Diff line change
Expand Up @@ -641,7 +641,10 @@ static void option_close(struct usb_serial_port *port, struct file *filp)
portdata->dtr_state = 0;

if (serial->dev) {
option_send_setup(port);
mutex_lock(&serial->disc_mutex);
if (!serial->disconnected)
option_send_setup(port);
mutex_unlock(&serial->disc_mutex);

/* Stop reading/writing urbs */
for (i = 0; i < N_IN_URB; i++)
Expand Down
5 changes: 4 additions & 1 deletion trunk/drivers/usb/serial/sierra.c
Original file line number Diff line number Diff line change
Expand Up @@ -597,7 +597,10 @@ static void sierra_close(struct usb_serial_port *port, struct file *filp)
portdata->dtr_state = 0;

if (serial->dev) {
sierra_send_setup(port);
mutex_lock(&serial->disc_mutex);
if (!serial->disconnected)
sierra_send_setup(port);
mutex_unlock(&serial->disc_mutex);

/* Stop reading/writing urbs */
for (i = 0; i < N_IN_URB; i++)
Expand Down
22 changes: 13 additions & 9 deletions trunk/drivers/usb/serial/visor.c
Original file line number Diff line number Diff line change
Expand Up @@ -349,16 +349,20 @@ static void visor_close (struct usb_serial_port *port, struct file * filp)
usb_kill_urb(port->read_urb);
usb_kill_urb(port->interrupt_in_urb);

/* Try to send shutdown message, if the device is gone, this will just fail. */
transfer_buffer = kmalloc (0x12, GFP_KERNEL);
if (transfer_buffer) {
usb_control_msg (port->serial->dev,
usb_rcvctrlpipe(port->serial->dev, 0),
VISOR_CLOSE_NOTIFICATION, 0xc2,
0x0000, 0x0000,
transfer_buffer, 0x12, 300);
kfree (transfer_buffer);
mutex_lock(&port->serial->disc_mutex);
if (!port->serial->disconnected) {
/* Try to send shutdown message, unless the device is gone */
transfer_buffer = kmalloc (0x12, GFP_KERNEL);
if (transfer_buffer) {
usb_control_msg (port->serial->dev,
usb_rcvctrlpipe(port->serial->dev, 0),
VISOR_CLOSE_NOTIFICATION, 0xc2,
0x0000, 0x0000,
transfer_buffer, 0x12, 300);
kfree (transfer_buffer);
}
}
mutex_lock(&port->serial->disc_mutex);

if (stats)
dev_info(&port->dev, "Bytes In = %d Bytes Out = %d\n",
Expand Down
7 changes: 5 additions & 2 deletions trunk/drivers/usb/serial/whiteheat.c
Original file line number Diff line number Diff line change
Expand Up @@ -658,11 +658,14 @@ static void whiteheat_close(struct usb_serial_port *port, struct file * filp)
struct list_head *tmp2;

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


mutex_lock(&port->serial->disc_mutex);
/* filp is NULL when called from usb_serial_disconnect */
if (filp && (tty_hung_up_p(filp))) {
if ((filp && (tty_hung_up_p(filp))) || port->serial->disconnected) {
mutex_unlock(&port->serial->disc_mutex);
return;
}
mutex_unlock(&port->serial->disc_mutex);

port->tty->closing = 1;

Expand Down

0 comments on commit a339af6

Please sign in to comment.