diff options
author | Alan Cox <alan@lxorguk.ukuu.org.uk> | 2008-01-08 14:55:51 +0000 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-01-08 16:16:34 -0800 |
commit | bf5e5834bffc62b50cd4a201804506eb11ef1af8 (patch) | |
tree | 09cd94995a4c67b0fd84f7c81b7f2bb58fac8e50 /drivers/usb | |
parent | cf0594625083111ae522496dc1c256f7476939c2 (diff) | |
download | kernel_samsung_crespo-bf5e5834bffc62b50cd4a201804506eb11ef1af8.zip kernel_samsung_crespo-bf5e5834bffc62b50cd4a201804506eb11ef1af8.tar.gz kernel_samsung_crespo-bf5e5834bffc62b50cd4a201804506eb11ef1af8.tar.bz2 |
pl2303: Fix mode switching regression
Cleaning out all the incorrect 'no change made' checks for termios
settings showed up a problem with the PL2303. The hardware here seems to
lose sync and bits if you tell it to make no changes. This shows up with
a real world application.
To fix this the driver check for meaningful hardware changes is restored
but doing the tests correctly and as a tty layer function so it doesn't
get duplicated wrongly everywhere if other drivers turn out to need it.
Signed-off-by: Alan Cox <alan@redhat.com>
Tested-by: Mirko Parthey <mirko.parthey@informatik.tu-chemnitz.de>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/serial/pl2303.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/usb/serial/pl2303.c b/drivers/usb/serial/pl2303.c index cf8add9..0da1df9 100644 --- a/drivers/usb/serial/pl2303.c +++ b/drivers/usb/serial/pl2303.c @@ -483,6 +483,13 @@ static void pl2303_set_termios(struct usb_serial_port *port, } spin_unlock_irqrestore(&priv->lock, flags); + /* The PL2303 is reported to lose bytes if you change + serial settings even to the same values as before. Thus + we actually need to filter in this specific case */ + + if (!tty_termios_hw_change(port->tty->termios, old_termios)) + return; + cflag = port->tty->termios->c_cflag; buf = kzalloc(7, GFP_KERNEL); |