aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/serial/keyspan_pda.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/usb/serial/keyspan_pda.c')
-rw-r--r--drivers/usb/serial/keyspan_pda.c42
1 files changed, 19 insertions, 23 deletions
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c
index b1fa5a376e96..ff54203944ca 100644
--- a/drivers/usb/serial/keyspan_pda.c
+++ b/drivers/usb/serial/keyspan_pda.c
@@ -208,13 +208,13 @@ static void keyspan_pda_request_unthrottle(struct work_struct *work)
208 2000); 208 2000);
209 if (result < 0) 209 if (result < 0)
210 dbg("%s - error %d from usb_control_msg", 210 dbg("%s - error %d from usb_control_msg",
211 __FUNCTION__, result); 211 __func__, result);
212} 212}
213 213
214 214
215static void keyspan_pda_rx_interrupt (struct urb *urb) 215static void keyspan_pda_rx_interrupt (struct urb *urb)
216{ 216{
217 struct usb_serial_port *port = (struct usb_serial_port *)urb->context; 217 struct usb_serial_port *port = urb->context;
218 struct tty_struct *tty = port->tty; 218 struct tty_struct *tty = port->tty;
219 unsigned char *data = urb->transfer_buffer; 219 unsigned char *data = urb->transfer_buffer;
220 int i; 220 int i;
@@ -232,11 +232,11 @@ static void keyspan_pda_rx_interrupt (struct urb *urb)
232 case -ESHUTDOWN: 232 case -ESHUTDOWN:
233 /* this urb is terminated, clean up */ 233 /* this urb is terminated, clean up */
234 dbg("%s - urb shutting down with status: %d", 234 dbg("%s - urb shutting down with status: %d",
235 __FUNCTION__, status); 235 __func__, status);
236 return; 236 return;
237 default: 237 default:
238 dbg("%s - nonzero urb status received: %d", 238 dbg("%s - nonzero urb status received: %d",
239 __FUNCTION__, status); 239 __func__, status);
240 goto exit; 240 goto exit;
241 } 241 }
242 242
@@ -274,7 +274,7 @@ exit:
274 retval = usb_submit_urb (urb, GFP_ATOMIC); 274 retval = usb_submit_urb (urb, GFP_ATOMIC);
275 if (retval) 275 if (retval)
276 err ("%s - usb_submit_urb failed with result %d", 276 err ("%s - usb_submit_urb failed with result %d",
277 __FUNCTION__, retval); 277 __func__, retval);
278} 278}
279 279
280 280
@@ -358,7 +358,7 @@ static void keyspan_pda_break_ctl (struct usb_serial_port *port, int break_state
358 value, 0, NULL, 0, 2000); 358 value, 0, NULL, 0, 2000);
359 if (result < 0) 359 if (result < 0)
360 dbg("%s - error %d from usb_control_msg", 360 dbg("%s - error %d from usb_control_msg",
361 __FUNCTION__, result); 361 __func__, result);
362 /* there is something funky about this.. the TCSBRK that 'cu' performs 362 /* there is something funky about this.. the TCSBRK that 'cu' performs
363 ought to translate into a break_ctl(-1),break_ctl(0) pair HZ/4 363 ought to translate into a break_ctl(-1),break_ctl(0) pair HZ/4
364 seconds apart, but it feels like the break sent isn't as long as it 364 seconds apart, but it feels like the break sent isn't as long as it
@@ -608,7 +608,7 @@ exit:
608 608
609static void keyspan_pda_write_bulk_callback (struct urb *urb) 609static void keyspan_pda_write_bulk_callback (struct urb *urb)
610{ 610{
611 struct usb_serial_port *port = (struct usb_serial_port *)urb->context; 611 struct usb_serial_port *port = urb->context;
612 struct keyspan_pda_private *priv; 612 struct keyspan_pda_private *priv;
613 613
614 port->write_urb_busy = 0; 614 port->write_urb_busy = 0;
@@ -636,14 +636,19 @@ static int keyspan_pda_write_room (struct usb_serial_port *port)
636static int keyspan_pda_chars_in_buffer (struct usb_serial_port *port) 636static int keyspan_pda_chars_in_buffer (struct usb_serial_port *port)
637{ 637{
638 struct keyspan_pda_private *priv; 638 struct keyspan_pda_private *priv;
639 unsigned long flags;
640 int ret = 0;
639 641
640 priv = usb_get_serial_port_data(port); 642 priv = usb_get_serial_port_data(port);
641 643
642 /* when throttled, return at least WAKEUP_CHARS to tell select() (via 644 /* when throttled, return at least WAKEUP_CHARS to tell select() (via
643 n_tty.c:normal_poll() ) that we're not writeable. */ 645 n_tty.c:normal_poll() ) that we're not writeable. */
646
647 spin_lock_irqsave(&port->lock, flags);
644 if (port->write_urb_busy || priv->tx_throttled) 648 if (port->write_urb_busy || priv->tx_throttled)
645 return 256; 649 ret = 256;
646 return 0; 650 spin_unlock_irqrestore(&port->lock, flags);
651 return ret;
647} 652}
648 653
649 654
@@ -665,11 +670,11 @@ static int keyspan_pda_open (struct usb_serial_port *port, struct file *filp)
665 1, 670 1,
666 2000); 671 2000);
667 if (rc < 0) { 672 if (rc < 0) {
668 dbg("%s - roomquery failed", __FUNCTION__); 673 dbg("%s - roomquery failed", __func__);
669 goto error; 674 goto error;
670 } 675 }
671 if (rc == 0) { 676 if (rc == 0) {
672 dbg("%s - roomquery returned 0 bytes", __FUNCTION__); 677 dbg("%s - roomquery returned 0 bytes", __func__);
673 rc = -EIO; 678 rc = -EIO;
674 goto error; 679 goto error;
675 } 680 }
@@ -688,7 +693,7 @@ static int keyspan_pda_open (struct usb_serial_port *port, struct file *filp)
688 port->interrupt_in_urb->dev = serial->dev; 693 port->interrupt_in_urb->dev = serial->dev;
689 rc = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 694 rc = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL);
690 if (rc) { 695 if (rc) {
691 dbg("%s - usb_submit_urb(read int) failed", __FUNCTION__); 696 dbg("%s - usb_submit_urb(read int) failed", __func__);
692 goto error; 697 goto error;
693 } 698 }
694 699
@@ -732,7 +737,7 @@ static int keyspan_pda_fake_startup (struct usb_serial *serial)
732 record = &xircom_pgs_firmware[0]; 737 record = &xircom_pgs_firmware[0];
733#endif 738#endif
734 if (record == NULL) { 739 if (record == NULL) {
735 err("%s: unknown vendor, aborting.", __FUNCTION__); 740 err("%s: unknown vendor, aborting.", __func__);
736 return -ENODEV; 741 return -ENODEV;
737 } 742 }
738 743
@@ -779,7 +784,7 @@ static int keyspan_pda_startup (struct usb_serial *serial)
779 784
780static void keyspan_pda_shutdown (struct usb_serial *serial) 785static void keyspan_pda_shutdown (struct usb_serial *serial)
781{ 786{
782 dbg("%s", __FUNCTION__); 787 dbg("%s", __func__);
783 788
784 kfree(usb_get_serial_port_data(serial->port[0])); 789 kfree(usb_get_serial_port_data(serial->port[0]));
785} 790}
@@ -793,9 +798,6 @@ static struct usb_serial_driver keyspan_pda_fake_device = {
793 .description = "Keyspan PDA - (prerenumeration)", 798 .description = "Keyspan PDA - (prerenumeration)",
794 .usb_driver = &keyspan_pda_driver, 799 .usb_driver = &keyspan_pda_driver,
795 .id_table = id_table_fake, 800 .id_table = id_table_fake,
796 .num_interrupt_in = NUM_DONT_CARE,
797 .num_bulk_in = NUM_DONT_CARE,
798 .num_bulk_out = NUM_DONT_CARE,
799 .num_ports = 1, 801 .num_ports = 1,
800 .attach = keyspan_pda_fake_startup, 802 .attach = keyspan_pda_fake_startup,
801}; 803};
@@ -810,9 +812,6 @@ static struct usb_serial_driver xircom_pgs_fake_device = {
810 .description = "Xircom / Entregra PGS - (prerenumeration)", 812 .description = "Xircom / Entregra PGS - (prerenumeration)",
811 .usb_driver = &keyspan_pda_driver, 813 .usb_driver = &keyspan_pda_driver,
812 .id_table = id_table_fake_xircom, 814 .id_table = id_table_fake_xircom,
813 .num_interrupt_in = NUM_DONT_CARE,
814 .num_bulk_in = NUM_DONT_CARE,
815 .num_bulk_out = NUM_DONT_CARE,
816 .num_ports = 1, 815 .num_ports = 1,
817 .attach = keyspan_pda_fake_startup, 816 .attach = keyspan_pda_fake_startup,
818}; 817};
@@ -826,9 +825,6 @@ static struct usb_serial_driver keyspan_pda_device = {
826 .description = "Keyspan PDA", 825 .description = "Keyspan PDA",
827 .usb_driver = &keyspan_pda_driver, 826 .usb_driver = &keyspan_pda_driver,
828 .id_table = id_table_std, 827 .id_table = id_table_std,
829 .num_interrupt_in = 1,
830 .num_bulk_in = 0,
831 .num_bulk_out = 1,
832 .num_ports = 1, 828 .num_ports = 1,
833 .open = keyspan_pda_open, 829 .open = keyspan_pda_open,
834 .close = keyspan_pda_close, 830 .close = keyspan_pda_close,