diff options
author | Chris Collins <chris@ursys.com.au> | 2008-04-10 04:15:53 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-04-25 00:16:51 -0400 |
commit | 5f760040bcb4cc0498d4c662c4ea305290198ef3 (patch) | |
tree | b47db322de6c6903b5201d7e6645a6bc1c54f911 /drivers/usb | |
parent | e6a79f1f07fc88a2efd6d0e8f0ccf591cb93cd34 (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>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/serial/option.c | 15 |
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 | */ | ||
827 | static int option_send_setup(struct usb_serial_port *port) | 833 | static 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; |