aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial/ftdi_sio.c
diff options
context:
space:
mode:
authorOliver Neukum <oliver@neukum.org>2008-01-22 07:56:18 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2008-02-01 17:35:05 -0500
commit95bef012ea4a3cce437a4fcf59bb097d14944b0d (patch)
treebc9991b335211030bcc2ee76fdc42ae2fcccb645 /drivers/usb/serial/ftdi_sio.c
parente33fe4d86f91127f6f7d931ff59ed6cbda06e72b (diff)
USB: more serial drivers writing after disconnect
this covers the rest of the obvious cases by using the flags and locks to guard against disconnect which were introduced in the earlier patch against mos7720. Signed-off-by: Oliver Neukum <oneukum@suse.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/serial/ftdi_sio.c')
-rw-r--r--drivers/usb/serial/ftdi_sio.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/usb/serial/ftdi_sio.c b/drivers/usb/serial/ftdi_sio.c
index 2c142bb04fe1..90dcc625f70d 100644
--- a/drivers/usb/serial/ftdi_sio.c
+++ b/drivers/usb/serial/ftdi_sio.c
@@ -1198,7 +1198,8 @@ static void ftdi_close (struct usb_serial_port *port, struct file *filp)
1198 1198
1199 dbg("%s", __FUNCTION__); 1199 dbg("%s", __FUNCTION__);
1200 1200
1201 if (c_cflag & HUPCL){ 1201 mutex_lock(&port->serial->disc_mutex);
1202 if (c_cflag & HUPCL && !port->serial->disconnected){
1202 /* Disable flow control */ 1203 /* Disable flow control */
1203 if (usb_control_msg(port->serial->dev, 1204 if (usb_control_msg(port->serial->dev,
1204 usb_sndctrlpipe(port->serial->dev, 0), 1205 usb_sndctrlpipe(port->serial->dev, 0),
@@ -1212,6 +1213,7 @@ static void ftdi_close (struct usb_serial_port *port, struct file *filp)
1212 /* drop RTS and DTR */ 1213 /* drop RTS and DTR */
1213 clear_mctrl(port, TIOCM_DTR | TIOCM_RTS); 1214 clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
1214 } /* Note change no line if hupcl is off */ 1215 } /* Note change no line if hupcl is off */
1216 mutex_unlock(&port->serial->disc_mutex);
1215 1217
1216 /* cancel any scheduled reading */ 1218 /* cancel any scheduled reading */
1217 cancel_delayed_work(&priv->rx_work); 1219 cancel_delayed_work(&priv->rx_work);