mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 16:37:50 +00:00
tty: Remove external interface for tty_set_termios()
tty_set_termios() is an internal helper intended for file scope use. UART drivers which are capable of driving the RTS pin must properly handle the tiocmset() method, regardless of termios settings. A failure to do so is a UART driver bug and should be fixed there. Do not use this interface to workaround UART driver bugs. Cc: Johan Hedberg <johan.hedberg@gmail.com> Cc: <linux-bluetooth@vger.kernel.org> Signed-off-by: Peter Hurley <peter@hurleysoftware.com> Acked-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
348f9bb31c
commit
632f32e210
3 changed files with 3 additions and 16 deletions
|
@ -51,33 +51,22 @@ struct ath_struct {
|
||||||
|
|
||||||
static int ath_wakeup_ar3k(struct tty_struct *tty)
|
static int ath_wakeup_ar3k(struct tty_struct *tty)
|
||||||
{
|
{
|
||||||
struct ktermios ktermios;
|
|
||||||
int status = tty->driver->ops->tiocmget(tty);
|
int status = tty->driver->ops->tiocmget(tty);
|
||||||
|
|
||||||
if (status & TIOCM_CTS)
|
if (status & TIOCM_CTS)
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
/* Disable Automatic RTSCTS */
|
|
||||||
ktermios = tty->termios;
|
|
||||||
ktermios.c_cflag &= ~CRTSCTS;
|
|
||||||
tty_set_termios(tty, &ktermios);
|
|
||||||
|
|
||||||
/* Clear RTS first */
|
/* Clear RTS first */
|
||||||
status = tty->driver->ops->tiocmget(tty);
|
tty->driver->ops->tiocmget(tty);
|
||||||
tty->driver->ops->tiocmset(tty, 0x00, TIOCM_RTS);
|
tty->driver->ops->tiocmset(tty, 0x00, TIOCM_RTS);
|
||||||
mdelay(20);
|
mdelay(20);
|
||||||
|
|
||||||
/* Set RTS, wake up board */
|
/* Set RTS, wake up board */
|
||||||
status = tty->driver->ops->tiocmget(tty);
|
tty->driver->ops->tiocmget(tty);
|
||||||
tty->driver->ops->tiocmset(tty, TIOCM_RTS, 0x00);
|
tty->driver->ops->tiocmset(tty, TIOCM_RTS, 0x00);
|
||||||
mdelay(20);
|
mdelay(20);
|
||||||
|
|
||||||
status = tty->driver->ops->tiocmget(tty);
|
status = tty->driver->ops->tiocmget(tty);
|
||||||
|
|
||||||
/* Enable Automatic RTSCTS */
|
|
||||||
ktermios.c_cflag |= CRTSCTS;
|
|
||||||
status = tty_set_termios(tty, &ktermios);
|
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -530,7 +530,7 @@ EXPORT_SYMBOL(tty_termios_hw_change);
|
||||||
* Locking: termios_rwsem
|
* Locking: termios_rwsem
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios)
|
static int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios)
|
||||||
{
|
{
|
||||||
struct ktermios old_termios;
|
struct ktermios old_termios;
|
||||||
struct tty_ldisc *ld;
|
struct tty_ldisc *ld;
|
||||||
|
@ -563,7 +563,6 @@ int tty_set_termios(struct tty_struct *tty, struct ktermios *new_termios)
|
||||||
up_write(&tty->termios_rwsem);
|
up_write(&tty->termios_rwsem);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(tty_set_termios);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* set_termios - set termios values for a tty
|
* set_termios - set termios values for a tty
|
||||||
|
|
|
@ -491,7 +491,6 @@ static inline speed_t tty_get_baud_rate(struct tty_struct *tty)
|
||||||
|
|
||||||
extern void tty_termios_copy_hw(struct ktermios *new, struct ktermios *old);
|
extern void tty_termios_copy_hw(struct ktermios *new, struct ktermios *old);
|
||||||
extern int tty_termios_hw_change(struct ktermios *a, struct ktermios *b);
|
extern int tty_termios_hw_change(struct ktermios *a, struct ktermios *b);
|
||||||
extern int tty_set_termios(struct tty_struct *tty, struct ktermios *kt);
|
|
||||||
|
|
||||||
extern struct tty_ldisc *tty_ldisc_ref(struct tty_struct *);
|
extern struct tty_ldisc *tty_ldisc_ref(struct tty_struct *);
|
||||||
extern void tty_ldisc_deref(struct tty_ldisc *);
|
extern void tty_ldisc_deref(struct tty_ldisc *);
|
||||||
|
|
Loading…
Reference in a new issue