patch-2.4.18 linux/drivers/usb/serial/visor.c
Next file: linux/drivers/usb/storage/Makefile
Previous file: linux/drivers/usb/serial/usbserial.c
Back to the patch index
Back to the overall index
- Lines: 74
- Date:
Wed Dec 26 14:28:36 2001
- Orig file:
linux.orig/drivers/usb/serial/visor.c
- Orig date:
Mon Feb 18 20:18:40 2002
diff -Naur -X /home/marcelo/lib/dontdiff linux.orig/drivers/usb/serial/visor.c linux/drivers/usb/serial/visor.c
@@ -12,6 +12,10 @@
*
* See Documentation/usb/usb-serial.txt for more information on using this driver
*
+ * (12/18/2001) gkh
+ * Added better Clie support for 3.5 devices. Thanks to Geoffrey Levand
+ * for the patch.
+ *
* (11/11/2001) gkh
* Added support for the m125 devices, and added check to prevent oopses
* for Clié devices that lie about the number of ports they have.
@@ -145,6 +149,7 @@
static void visor_set_termios (struct usb_serial_port *port, struct termios *old_termios);
static void visor_write_bulk_callback (struct urb *urb);
static void visor_read_bulk_callback (struct urb *urb);
+static int clie_3_5_startup (struct usb_serial *serial);
static __devinitdata struct usb_device_id visor_id_table [] = {
@@ -251,6 +256,7 @@
close: visor_close,
throttle: visor_throttle,
unthrottle: visor_unthrottle,
+ startup: clie_3_5_startup,
ioctl: visor_ioctl,
set_termios: visor_set_termios,
write: visor_write,
@@ -705,6 +711,46 @@
return 0;
}
+static int clie_3_5_startup (struct usb_serial *serial)
+{
+ int result;
+ u8 data;
+
+ dbg(__FUNCTION__);
+
+ /*
+ * Note that PEG-300 series devices expect the following two calls.
+ */
+
+ /* get the config number */
+ result = usb_control_msg (serial->dev, usb_rcvctrlpipe(serial->dev, 0),
+ USB_REQ_GET_CONFIGURATION, USB_DIR_IN,
+ 0, 0, &data, 1, HZ * 3);
+ if (result < 0) {
+ err(__FUNCTION__ ": get config number failed: %d", result);
+ return result;
+ }
+ if (result != 1) {
+ err(__FUNCTION__ ": get config number bad return length: %d", result);
+ return -EIO;
+ }
+
+ /* get the interface number */
+ result = usb_control_msg (serial->dev, usb_rcvctrlpipe(serial->dev, 0),
+ USB_REQ_GET_INTERFACE,
+ USB_DIR_IN | USB_DT_DEVICE,
+ 0, 0, &data, 1, HZ * 3);
+ if (result < 0) {
+ err(__FUNCTION__ ": get interface number failed: %d", result);
+ return result;
+ }
+ if (result != 1) {
+ err(__FUNCTION__ ": get interface number bad return length: %d", result);
+ return -EIO;
+ }
+
+ return 0;
+}
static void visor_shutdown (struct usb_serial *serial)
{
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)