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
cd441d7
..
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);
@@
-285,7
+285,7
@@
static void keyspan_pda_rx_throttle (struct usb_serial_port *port)
upon the device too. */
dbg("keyspan_pda_rx_throttle port %d", port->number);
upon the device too. */
dbg("keyspan_pda_rx_throttle port %d", port->number);
- usb_
unlink
_urb(port->interrupt_in_urb);
+ usb_
kill
_urb(port->interrupt_in_urb);
}
}
@@
-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;
}
@@
-493,7
+493,7
@@
static int keyspan_pda_ioctl(struct usb_serial_port *port, struct file *file,
return -ENOIOCTLCMD;
}
return -ENOIOCTLCMD;
}
-static int keyspan_pda_write(struct usb_serial_port *port,
int from_user,
+static int keyspan_pda_write(struct usb_serial_port *port,
const unsigned char *buf, int count)
{
struct usb_serial *serial = port->serial;
const unsigned char *buf, int count)
{
struct usb_serial *serial = port->serial;
@@
-520,9
+520,13
@@
static int keyspan_pda_write(struct usb_serial_port *port, int from_user,
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, int from_user,
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;
@@
-567,19
+571,10
@@
static int keyspan_pda_write(struct usb_serial_port *port, int from_user,
if (count) {
/* now transfer data */
if (count) {
/* now transfer data */
- if (from_user) {
- if( copy_from_user(port->write_urb->transfer_buffer,
- buf, count) ) {
- rc = -EFAULT;
- goto exit;
- }
- }
- else {
- memcpy (port->write_urb->transfer_buffer, buf, count);
- }
+ memcpy (port->write_urb->transfer_buffer, buf, count);
/* send the data out the bulk port */
port->write_urb->transfer_buffer_length = 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;
@@
-602,6
+597,8
@@
static int keyspan_pda_write(struct usb_serial_port *port, int from_user,
rc = count;
exit:
rc = count;
exit:
+ if (rc < 0)
+ port->write_urb_busy = 0;
return rc;
}
return rc;
}
@@
-611,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 */
@@
-635,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;
}
@@
-662,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;
@@
-706,8
+704,8
@@
static void keyspan_pda_close(struct usb_serial_port *port, struct file *filp)
keyspan_pda_set_modem_info(serial, 0);
/* shutdown our bulk reads and writes */
keyspan_pda_set_modem_info(serial, 0);
/* shutdown our bulk reads and writes */
- usb_
unlink_urb
(port->write_urb);
- usb_
unlink_urb
(port->interrupt_in_urb);
+ usb_
kill_urb
(port->write_urb);
+ usb_
kill_urb
(port->interrupt_in_urb);
}
}
}
}
@@
-722,12
+720,12
@@
static int keyspan_pda_fake_startup (struct usb_serial *serial)
response = ezusb_set_reset(serial, 1);
#ifdef KEYSPAN
response = ezusb_set_reset(serial, 1);
#ifdef KEYSPAN
- if (
serial->dev->descriptor.idVendor
== KEYSPAN_VENDOR_ID)
+ if (
le16_to_cpu(serial->dev->descriptor.idVendor)
== KEYSPAN_VENDOR_ID)
record = &keyspan_pda_firmware[0];
#endif
#ifdef XIRCOM
record = &keyspan_pda_firmware[0];
#endif
#ifdef XIRCOM
- if ((
serial->dev->descriptor.idVendor
== XIRCOM_VENDOR_ID) ||
- (
serial->dev->descriptor.idVendor
== ENTREGRA_VENDOR_ID))
+ if ((
le16_to_cpu(serial->dev->descriptor.idVendor)
== XIRCOM_VENDOR_ID) ||
+ (
le16_to_cpu(serial->dev->descriptor.idVendor)
== ENTREGRA_VENDOR_ID))
record = &xircom_pgs_firmware[0];
#endif
if (record == NULL) {
record = &xircom_pgs_firmware[0];
#endif
if (record == NULL) {
@@
-785,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,
@@
-799,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,
@@
-812,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,