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>
This commit is contained in:
@@ -364,6 +364,25 @@ void tty_termios_copy_hw(struct ktermios *new, struct ktermios *old)
|
||||
|
||||
EXPORT_SYMBOL(tty_termios_copy_hw);
|
||||
|
||||
/**
|
||||
* tty_termios_hw_change - check for setting change
|
||||
* @a: termios
|
||||
* @b: termios to compare
|
||||
*
|
||||
* Check if any of the bits that affect a dumb device have changed
|
||||
* between the two termios structures, or a speed change is needed.
|
||||
*/
|
||||
|
||||
int tty_termios_hw_change(struct ktermios *a, struct ktermios *b)
|
||||
{
|
||||
if (a->c_ispeed != b->c_ispeed || a->c_ospeed != b->c_ospeed)
|
||||
return 1;
|
||||
if ((a->c_cflag ^ b->c_cflag) & ~(HUPCL | CREAD | CLOCAL))
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(tty_termios_hw_change);
|
||||
|
||||
/**
|
||||
* change_termios - update termios values
|
||||
* @tty: tty to update
|
||||
|
Reference in New Issue
Block a user