diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2008-04-08 12:16:06 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2008-04-25 00:16:55 -0400 |
commit | a5b6f60c5a30c494017c7a2d11c4067f90d3d0df (patch) | |
tree | 2f80d1a6c2655c5c12f40cafbc47516284934d42 /drivers/usb/serial/keyspan_pda.c | |
parent | 441b62c1edb986827154768d89bbac0ba779984f (diff) |
usb serial: more fixes and groundwork for tty changes
- If a termios change fails due to lack of memory we should copy the
old settings back over as the device has not changed
- Note various locking problems
- kl5kusb105 had various remaining tty flag handling problems
- Make safe_serial use tty_insert_flip_string not open coded loops
- set termios speed properly in usb_serial
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/usb/serial/keyspan_pda.c')
-rw-r--r-- | drivers/usb/serial/keyspan_pda.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/drivers/usb/serial/keyspan_pda.c b/drivers/usb/serial/keyspan_pda.c index 6ce292ef1c47..b650fb4754b4 100644 --- a/drivers/usb/serial/keyspan_pda.c +++ b/drivers/usb/serial/keyspan_pda.c | |||
@@ -636,14 +636,19 @@ static int keyspan_pda_write_room (struct usb_serial_port *port) | |||
636 | static int keyspan_pda_chars_in_buffer (struct usb_serial_port *port) | 636 | static 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 | ||