aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Collins <chris@ursys.com.au>2008-04-10 04:15:53 -0400
committerGreg Kroah-Hartman <gregkh@suse.de>2008-04-25 00:16:51 -0400
commit5f760040bcb4cc0498d4c662c4ea305290198ef3 (patch)
treeb47db322de6c6903b5201d7e6645a6bc1c54f911
parente6a79f1f07fc88a2efd6d0e8f0ccf591cb93cd34 (diff)
USB: option.c: correct DTR behaviour
Setting DTR et al. should work for all interfaces if you actually pass the interface number. :-P This should help with devices that have important pseudo-serial ports that aren't on the first interface in the device. Signed-off-by: Chris Collins <chris@ursys.com.au> Signed-off-by: Matthias Urlichs <matthias@urlichs.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/usb/serial/option.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/usb/serial/option.c b/drivers/usb/serial/option.c
index 0e7eeb2820e2..130aa96746f0 100644
--- a/drivers/usb/serial/option.c
+++ b/drivers/usb/serial/option.c
@@ -28,7 +28,7 @@
28 device features. 28 device features.
29*/ 29*/
30 30
31#define DRIVER_VERSION "v0.7.1" 31#define DRIVER_VERSION "v0.7.2"
32#define DRIVER_AUTHOR "Matthias Urlichs <smurf@smurf.noris.de>" 32#define DRIVER_AUTHOR "Matthias Urlichs <smurf@smurf.noris.de>"
33#define DRIVER_DESC "USB Driver for GSM modems" 33#define DRIVER_DESC "USB Driver for GSM modems"
34 34
@@ -824,16 +824,19 @@ static void option_setup_urbs(struct usb_serial *serial)
824 } 824 }
825} 825}
826 826
827
828/** send RTS/DTR state to the port.
829 *
830 * This is exactly the same as SET_CONTROL_LINE_STATE from the PSTN
831 * CDC.
832*/
827static int option_send_setup(struct usb_serial_port *port) 833static int option_send_setup(struct usb_serial_port *port)
828{ 834{
829 struct usb_serial *serial = port->serial; 835 struct usb_serial *serial = port->serial;
830 struct option_port_private *portdata; 836 struct option_port_private *portdata;
831 837 int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber;
832 dbg("%s", __FUNCTION__); 838 dbg("%s", __FUNCTION__);
833 839
834 if (port->number != 0)
835 return 0;
836
837 portdata = usb_get_serial_port_data(port); 840 portdata = usb_get_serial_port_data(port);
838 841
839 if (port->tty) { 842 if (port->tty) {
@@ -845,7 +848,7 @@ static int option_send_setup(struct usb_serial_port *port)
845 848
846 return usb_control_msg(serial->dev, 849 return usb_control_msg(serial->dev,
847 usb_rcvctrlpipe(serial->dev, 0), 850 usb_rcvctrlpipe(serial->dev, 0),
848 0x22,0x21,val,0,NULL,0,USB_CTRL_SET_TIMEOUT); 851 0x22,0x21,val,ifNum,NULL,0,USB_CTRL_SET_TIMEOUT);
849 } 852 }
850 853
851 return 0; 854 return 0;