tty: rework break handling

Some hardware needs to do break handling itself and may have partial
support only. Make break_ctl return an error code. Add a tty driver flag
so you can indicate driver hardware side break support.

Signed-off-by: Alan Cox <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
Alan Cox 2008-07-22 11:18:03 +01:00 • committed by Linus Torvalds
commit 9e98966c7b
20 changed files with 97 additions and 84 deletions

View file

@ -732,13 +732,16 @@ static void acm_tty_unthrottle(struct tty_struct *tty)
tasklet_schedule(&acm->urb_task);
}
static void acm_tty_break_ctl(struct tty_struct *tty, int state)
static int acm_tty_break_ctl(struct tty_struct *tty, int state)
{
struct acm *acm = tty->driver_data;
int retval;
if (!ACM_READY(acm))
return;
if (acm_send_break(acm, state ? 0xffff : 0))
return -EINVAL;
retval = acm_send_break(acm, state ? 0xffff : 0);
if (retval < 0)
dbg("send break failed");
return retval;
}
static int acm_tty_tiocmget(struct tty_struct *tty, struct file *file)

View file

@ -395,7 +395,7 @@ static void serial_set_termios(struct tty_struct *tty, struct ktermios *old)
tty_termios_copy_hw(tty->termios, old);
}
static void serial_break(struct tty_struct *tty, int break_state)
static int serial_break(struct tty_struct *tty, int break_state)
{
struct usb_serial_port *port = tty->driver_data;
@ -409,6 +409,7 @@ static void serial_break(struct tty_struct *tty, int break_state)
port->serial->type->break_ctl(tty, break_state);
unlock_kernel();
}
return 0;
}
static int serial_read_proc(char *page, char **start, off_t off, int count,