For a given struct tty_struct, this provides the appropriate tty line state flags needed to add more modes to the ledtrig-tty trigger. The new function is then used to get via tty_tiocmget() the different tty line states. Signed-off-by: Florian Eckert <fe@xxxxxxxxxx> --- drivers/tty/tty_io.c | 32 +++++++++++++++++++++++++------- include/linux/tty.h | 3 ++- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c index 3149114bf130..e4dc59eda43f 100644 --- a/drivers/tty/tty_io.c +++ b/drivers/tty/tty_io.c @@ -2493,26 +2493,44 @@ static int send_break(struct tty_struct *tty, unsigned int duration) return retval; } +/* + * tty_get_mget - get modem status + * @tty: tty device + * + * Obtain the modem status bits from the tty driver if the feature + * is supported. Return -ENOTTY if it is not available. + * + */ + +int tty_get_mget(struct tty_struct *tty) +{ + int retval = -ENOTTY; + + if (tty->ops->tiocmget) + retval = tty->ops->tiocmget(tty); + + return retval; +} +EXPORT_SYMBOL_GPL(tty_get_mget); + /** * tty_tiocmget - get modem status * @tty: tty device * @p: pointer to result * * Obtain the modem status bits from the tty driver if the feature is - * supported. Return -%ENOTTY if it is not available. + * supported. * * Locking: none (up to the driver) */ static int tty_tiocmget(struct tty_struct *tty, int __user *p) { - int retval = -ENOTTY; + int retval; - if (tty->ops->tiocmget) { - retval = tty->ops->tiocmget(tty); + retval = tty_get_mget(tty); + if (retval >= 0) + retval = put_user(retval, p); - if (retval >= 0) - retval = put_user(retval, p); - } return retval; } diff --git a/include/linux/tty.h b/include/linux/tty.h index 730c3301d710..9c1485c31081 100644 --- a/include/linux/tty.h +++ b/include/linux/tty.h @@ -419,8 +419,9 @@ void tty_unthrottle(struct tty_struct *tty); int tty_throttle_safe(struct tty_struct *tty); int tty_unthrottle_safe(struct tty_struct *tty); int tty_do_resize(struct tty_struct *tty, struct winsize *ws); -int tty_get_icount(struct tty_struct *tty, +int tty_get_icount(struct tty_struct *tty struct serial_icounter_struct *icount); +extern int tty_get_mget(struct tty_struct *tty); int is_current_pgrp_orphaned(void); void tty_hangup(struct tty_struct *tty); void tty_vhangup(struct tty_struct *tty); -- 2.30.2