git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git]
/
drivers
/
usb
/
serial
/
keyspan_pda.c
diff --git
a/drivers/usb/serial/keyspan_pda.c
b/drivers/usb/serial/keyspan_pda.c
index
eaa290b
..
b0441c3
100644
(file)
--- a/
drivers/usb/serial/keyspan_pda.c
+++ b/
drivers/usb/serial/keyspan_pda.c
@@
-150,11
+150,11
@@
static struct usb_device_id id_table_combined [] = {
MODULE_DEVICE_TABLE (usb, id_table_combined);
static struct usb_driver keyspan_pda_driver = {
MODULE_DEVICE_TABLE (usb, id_table_combined);
static struct usb_driver keyspan_pda_driver = {
- .owner = THIS_MODULE,
.name = "keyspan_pda",
.probe = usb_serial_probe,
.disconnect = usb_serial_disconnect,
.id_table = id_table_combined,
.name = "keyspan_pda",
.probe = usb_serial_probe,
.disconnect = usb_serial_disconnect,
.id_table = id_table_combined,
+ .no_dynamic_id = 1,
};
static struct usb_device_id id_table_std [] = {
};
static struct usb_device_id id_table_std [] = {
@@
-205,7
+205,7
@@
static void keyspan_pda_request_unthrottle( struct usb_serial *serial )
0, /* index */
NULL,
0,
0, /* index */
NULL,
0,
- 2
*HZ
);
+ 2
000
);
if (result < 0)
dbg("%s - error %d from usb_control_msg",
__FUNCTION__, result);
if (result < 0)
dbg("%s - error %d from usb_control_msg",
__FUNCTION__, result);
@@
-330,7
+330,7
@@
static int keyspan_pda_setbaud (struct usb_serial *serial, int baud)
0, /* index */
NULL, /* &data */
0, /* size */
0, /* index */
NULL, /* &data */
0, /* size */
- 2
*HZ
); /* timeout */
+ 2
000
); /* timeout */
return(rc);
}
return(rc);
}
@@
-348,7
+348,7
@@
static void keyspan_pda_break_ctl (struct usb_serial_port *port, int break_state
result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
4, /* set break */
USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT,
result = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
4, /* set break */
USB_TYPE_VENDOR | USB_RECIP_INTERFACE | USB_DIR_OUT,
- value, 0, NULL, 0, 2
*HZ
);
+ value, 0, NULL, 0, 2
000
);
if (result < 0)
dbg("%s - error %d from usb_control_msg",
__FUNCTION__, result);
if (result < 0)
dbg("%s - error %d from usb_control_msg",
__FUNCTION__, result);
@@
-416,7
+416,7
@@
static int keyspan_pda_get_modem_info(struct usb_serial *serial,
rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
3, /* get pins */
USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_IN,
rc = usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
3, /* get pins */
USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_IN,
- 0, 0, &data, 1, 2
*HZ
);
+ 0, 0, &data, 1, 2
000
);
if (rc > 0)
*value = data;
return rc;
if (rc > 0)
*value = data;
return rc;
@@
-430,7
+430,7
@@
static int keyspan_pda_set_modem_info(struct usb_serial *serial,
rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
3, /* set pins */
USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_OUT,
rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
3, /* set pins */
USB_TYPE_VENDOR|USB_RECIP_INTERFACE|USB_DIR_OUT,
- value, 0, NULL, 0, 2
*HZ
);
+ value, 0, NULL, 0, 2
000
);
return rc;
}
return rc;
}
@@
-520,9
+520,13
@@
static int keyspan_pda_write(struct usb_serial_port *port,
the TX urb is in-flight (wait until it completes)
the device is full (wait until it says there is room)
*/
the TX urb is in-flight (wait until it completes)
the device is full (wait until it says there is room)
*/
- if (port->write_urb->status == -EINPROGRESS || priv->tx_throttled ) {
- return( 0 );
+ spin_lock(&port->lock);
+ if (port->write_urb_busy || priv->tx_throttled) {
+ spin_unlock(&port->lock);
+ return 0;
}
}
+ port->write_urb_busy = 1;
+ spin_unlock(&port->lock);
/* At this point the URB is in our control, nobody else can submit it
again (the only sudden transition was the one from EINPROGRESS to
/* At this point the URB is in our control, nobody else can submit it
again (the only sudden transition was the one from EINPROGRESS to
@@
-545,7
+549,7
@@
static int keyspan_pda_write(struct usb_serial_port *port,
0, /* index */
&room,
1,
0, /* index */
&room,
1,
- 2
*HZ
);
+ 2
000
);
if (rc < 0) {
dbg(" roomquery failed");
goto exit;
if (rc < 0) {
dbg(" roomquery failed");
goto exit;
@@
-570,7
+574,7
@@
static int keyspan_pda_write(struct usb_serial_port *port,
memcpy (port->write_urb->transfer_buffer, buf, count);
/* send the data out the bulk port */
port->write_urb->transfer_buffer_length = count;
memcpy (port->write_urb->transfer_buffer, buf, count);
/* send the data out the bulk port */
port->write_urb->transfer_buffer_length = count;
-
+
priv->tx_room -= count;
port->write_urb->dev = port->serial->dev;
priv->tx_room -= count;
port->write_urb->dev = port->serial->dev;
@@
-593,6
+597,8
@@
static int keyspan_pda_write(struct usb_serial_port *port,
rc = count;
exit:
rc = count;
exit:
+ if (rc < 0)
+ port->write_urb_busy = 0;
return rc;
}
return rc;
}
@@
-602,6
+608,7
@@
static void keyspan_pda_write_bulk_callback (struct urb *urb, struct pt_regs *re
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct keyspan_pda_private *priv;
struct usb_serial_port *port = (struct usb_serial_port *)urb->context;
struct keyspan_pda_private *priv;
+ port->write_urb_busy = 0;
priv = usb_get_serial_port_data(port);
/* queue up a wakeup at scheduler time */
priv = usb_get_serial_port_data(port);
/* queue up a wakeup at scheduler time */
@@
-626,12
+633,12
@@
static int keyspan_pda_write_room (struct usb_serial_port *port)
static int keyspan_pda_chars_in_buffer (struct usb_serial_port *port)
{
struct keyspan_pda_private *priv;
static int keyspan_pda_chars_in_buffer (struct usb_serial_port *port)
{
struct keyspan_pda_private *priv;
-
+
priv = usb_get_serial_port_data(port);
priv = usb_get_serial_port_data(port);
-
+
/* when throttled, return at least WAKEUP_CHARS to tell select() (via
n_tty.c:normal_poll() ) that we're not writeable. */
/* when throttled, return at least WAKEUP_CHARS to tell select() (via
n_tty.c:normal_poll() ) that we're not writeable. */
- if
( port->write_urb->status == -EINPROGRESS || priv->tx_throttled
)
+ if
(port->write_urb_busy || priv->tx_throttled
)
return 256;
return 0;
}
return 256;
return 0;
}
@@
-653,7
+660,7
@@
static int keyspan_pda_open (struct usb_serial_port *port, struct file *filp)
0, /* index */
&room,
1,
0, /* index */
&room,
1,
- 2
*HZ
);
+ 2
000
);
if (rc < 0) {
dbg("%s - roomquery failed", __FUNCTION__);
goto error;
if (rc < 0) {
dbg("%s - roomquery failed", __FUNCTION__);
goto error;
@@
-776,10
+783,12
@@
static void keyspan_pda_shutdown (struct usb_serial *serial)
}
#ifdef KEYSPAN
}
#ifdef KEYSPAN
-static struct usb_serial_device_type keyspan_pda_fake_device = {
- .owner = THIS_MODULE,
- .name = "Keyspan PDA - (prerenumeration)",
- .short_name = "keyspan_pda_pre",
+static struct usb_serial_driver keyspan_pda_fake_device = {
+ .driver = {
+ .owner = THIS_MODULE,
+ .name = "keyspan_pda_pre",
+ },
+ .description = "Keyspan PDA - (prerenumeration)",
.id_table = id_table_fake,
.num_interrupt_in = NUM_DONT_CARE,
.num_bulk_in = NUM_DONT_CARE,
.id_table = id_table_fake,
.num_interrupt_in = NUM_DONT_CARE,
.num_bulk_in = NUM_DONT_CARE,
@@
-790,10
+799,12
@@
static struct usb_serial_device_type keyspan_pda_fake_device = {
#endif
#ifdef XIRCOM
#endif
#ifdef XIRCOM
-static struct usb_serial_device_type xircom_pgs_fake_device = {
- .owner = THIS_MODULE,
- .name = "Xircom / Entregra PGS - (prerenumeration)",
- .short_name = "xircom_no_firm",
+static struct usb_serial_driver xircom_pgs_fake_device = {
+ .driver = {
+ .owner = THIS_MODULE,
+ .name = "xircom_no_firm",
+ },
+ .description = "Xircom / Entregra PGS - (prerenumeration)",
.id_table = id_table_fake_xircom,
.num_interrupt_in = NUM_DONT_CARE,
.num_bulk_in = NUM_DONT_CARE,
.id_table = id_table_fake_xircom,
.num_interrupt_in = NUM_DONT_CARE,
.num_bulk_in = NUM_DONT_CARE,
@@
-803,10
+814,12
@@
static struct usb_serial_device_type xircom_pgs_fake_device = {
};
#endif
};
#endif
-static struct usb_serial_device_type keyspan_pda_device = {
- .owner = THIS_MODULE,
- .name = "Keyspan PDA",
- .short_name = "keyspan_pda",
+static struct usb_serial_driver keyspan_pda_device = {
+ .driver = {
+ .owner = THIS_MODULE,
+ .name = "keyspan_pda",
+ },
+ .description = "Keyspan PDA",
.id_table = id_table_std,
.num_interrupt_in = 1,
.num_bulk_in = 0,
.id_table = id_table_std,
.num_interrupt_in = 1,
.num_bulk_in = 0,