summaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial/ipaq.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-07-12 21:16:52 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-07-12 21:16:52 -0700
commit70d002bccac5e107fafb95e83fcb7fc010a88695 (patch)
tree58607b980731b3ac418693a1d511630f482564c1 /drivers/usb/serial/ipaq.c
parent7f0852f959d8e92786c684ebd7fee3332a2f4efe (diff)
parenta969888ce91673c7f4b86520d851a6f0d5a5fa7d (diff)
Merge commit master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6 of HEAD
* HEAD: (44 commits) [PATCH] USB: move usb-serial.h to include/linux/usb/ [PATCH] USB: Anydata: Fixes wrong URB callback. [PATCH] USB: gadget section fixups [PATCH] USB: another unusual device [PATCH] USB: Add one VID/PID to ftdi_sio [PATCH] USB: unusual_devs entry for Sony DSC-H5 [PATCH] USB: unusual_devs entry for Nokia E61 [PATCH] USB: unusual_devs entry for Nokia N91 [PATCH] USB: add ZyXEL vendor/product ID to rtl8150 driver [PATCH] USB: Option driver: new product ID [PATCH] USB: add support for WiseGroup., Ltd SmartJoy Dual PLUS Adapter [PATCH] USB: ipw.c driver fix [PATCH] USB: remove devfs information from Kconfig [PATCH] USB: remove empty destructor from drivers/usb/mon/mon_text.c [PATCH] USB: ipaq.c timing parameters [PATCH] USB: ipaq.c bugfixes [PATCH] USB: ehci: fix bogus alteration of a local variable [PATCH] USB: add driver for non-composite Sierra Wireless devices [PATCH] USB: fix pointer dereference in drivers/usb/misc/usblcd [PATCH] USB: Kill compiler warning in quirk_usb_handoff_ohci ...
Diffstat (limited to 'drivers/usb/serial/ipaq.c')
-rw-r--r--drivers/usb/serial/ipaq.c25
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/usb/serial/ipaq.c b/drivers/usb/serial/ipaq.c
index dbcfe172a5c..59c5d999009 100644
--- a/drivers/usb/serial/ipaq.c
+++ b/drivers/usb/serial/ipaq.c
@@ -55,7 +55,7 @@
#include <linux/spinlock.h>
#include <asm/uaccess.h>
#include <linux/usb.h>
-#include "usb-serial.h"
+#include <linux/usb/serial.h>
#include "ipaq.h"
#define KP_RETRIES 100
@@ -70,6 +70,8 @@
static __u16 product, vendor;
static int debug;
+static int connect_retries = KP_RETRIES;
+static int initial_wait;
/* Function prototypes for an ipaq */
static int ipaq_open (struct usb_serial_port *port, struct file *filp);
@@ -582,7 +584,7 @@ static int ipaq_open(struct usb_serial_port *port, struct file *filp)
struct ipaq_private *priv;
struct ipaq_packet *pkt;
int i, result = 0;
- int retries = KP_RETRIES;
+ int retries = connect_retries;
dbg("%s - port %d", __FUNCTION__, port->number);
@@ -646,16 +648,12 @@ static int ipaq_open(struct usb_serial_port *port, struct file *filp)
port->read_urb->transfer_buffer_length = URBDATA_SIZE;
port->bulk_out_size = port->write_urb->transfer_buffer_length = URBDATA_SIZE;
+ msleep(1000*initial_wait);
/* Start reading from the device */
usb_fill_bulk_urb(port->read_urb, serial->dev,
usb_rcvbulkpipe(serial->dev, port->bulk_in_endpointAddress),
port->read_urb->transfer_buffer, port->read_urb->transfer_buffer_length,
ipaq_read_bulk_callback, port);
- result = usb_submit_urb(port->read_urb, GFP_KERNEL);
- if (result) {
- err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
- goto error;
- }
/*
* Send out control message observed in win98 sniffs. Not sure what
@@ -670,8 +668,14 @@ static int ipaq_open(struct usb_serial_port *port, struct file *filp)
usb_sndctrlpipe(serial->dev, 0), 0x22, 0x21,
0x1, 0, NULL, 0, 100);
if (result == 0) {
+ result = usb_submit_urb(port->read_urb, GFP_KERNEL);
+ if (result) {
+ err("%s - failed submitting read urb, error %d", __FUNCTION__, result);
+ goto error;
+ }
return 0;
}
+ msleep(1000);
}
err("%s - failed doing control urb, error %d", __FUNCTION__, result);
goto error;
@@ -854,6 +858,7 @@ static void ipaq_write_bulk_callback(struct urb *urb, struct pt_regs *regs)
if (urb->status) {
dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status);
+ return;
}
spin_lock_irqsave(&write_list_lock, flags);
@@ -966,3 +971,9 @@ MODULE_PARM_DESC(vendor, "User specified USB idVendor");
module_param(product, ushort, 0);
MODULE_PARM_DESC(product, "User specified USB idProduct");
+
+module_param(connect_retries, int, S_IRUGO|S_IWUSR);
+MODULE_PARM_DESC(connect_retries, "Maximum number of connect retries (one second each)");
+
+module_param(initial_wait, int, S_IRUGO|S_IWUSR);
+MODULE_PARM_DESC(initial_wait, "Time to wait before attempting a connection (in seconds)");