|
@@ -1886,24 +1886,22 @@ static void ftdi_dtr_rts(struct usb_serial_port *port, int on)
|
|
|
{
|
|
|
struct ftdi_private *priv = usb_get_serial_port_data(port);
|
|
|
|
|
|
- mutex_lock(&port->serial->disc_mutex);
|
|
|
- if (!port->serial->disconnected) {
|
|
|
- /* Disable flow control */
|
|
|
- if (!on && usb_control_msg(port->serial->dev,
|
|
|
+ /* Disable flow control */
|
|
|
+ if (!on) {
|
|
|
+ if (usb_control_msg(port->serial->dev,
|
|
|
usb_sndctrlpipe(port->serial->dev, 0),
|
|
|
FTDI_SIO_SET_FLOW_CTRL_REQUEST,
|
|
|
FTDI_SIO_SET_FLOW_CTRL_REQUEST_TYPE,
|
|
|
0, priv->interface, NULL, 0,
|
|
|
WDR_TIMEOUT) < 0) {
|
|
|
- dev_err(&port->dev, "error from flowcontrol urb\n");
|
|
|
+ dev_err(&port->dev, "error from flowcontrol urb\n");
|
|
|
}
|
|
|
- /* drop RTS and DTR */
|
|
|
- if (on)
|
|
|
- set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
|
|
|
- else
|
|
|
- clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
|
|
|
}
|
|
|
- mutex_unlock(&port->serial->disc_mutex);
|
|
|
+ /* drop RTS and DTR */
|
|
|
+ if (on)
|
|
|
+ set_mctrl(port, TIOCM_DTR | TIOCM_RTS);
|
|
|
+ else
|
|
|
+ clear_mctrl(port, TIOCM_DTR | TIOCM_RTS);
|
|
|
}
|
|
|
|
|
|
/*
|