In order for a serial function to add flags to the poll() mask of their tty files, propagate the poll() callback to the next layer so it can return a mask if it sees fit to do so. Signed-off-by: Tal Shorer <tal.shorer@xxxxxxxxx> --- drivers/usb/gadget/function/u_serial.c | 16 ++++++++++++++++ drivers/usb/gadget/function/u_serial.h | 3 +++ 2 files changed, 19 insertions(+) diff --git a/drivers/usb/gadget/function/u_serial.c b/drivers/usb/gadget/function/u_serial.c index 9b0805f..d466f58 100644 --- a/drivers/usb/gadget/function/u_serial.c +++ b/drivers/usb/gadget/function/u_serial.c @@ -1025,6 +1025,21 @@ static int gs_break_ctl(struct tty_struct *tty, int duration) return status; } +static unsigned int gs_poll(struct tty_struct *tty, struct file *file, + poll_table *wait) +{ + struct gs_port *port = tty->driver_data; + struct gserial *gser; + unsigned int mask = 0; + + spin_lock_irq(&port->port_lock); + gser = port->port_usb; + if (gser && gser->poll) + mask |= gser->poll(gser, file, wait); + spin_unlock_irq(&port->port_lock); + return mask; +} + static const struct tty_operations gs_tty_ops = { .open = gs_open, .close = gs_close, @@ -1035,6 +1050,7 @@ static const struct tty_operations gs_tty_ops = { .chars_in_buffer = gs_chars_in_buffer, .unthrottle = gs_unthrottle, .break_ctl = gs_break_ctl, + .poll = gs_poll, }; /*-------------------------------------------------------------------------*/ diff --git a/drivers/usb/gadget/function/u_serial.h b/drivers/usb/gadget/function/u_serial.h index c20210c..ce00840 100644 --- a/drivers/usb/gadget/function/u_serial.h +++ b/drivers/usb/gadget/function/u_serial.h @@ -12,6 +12,7 @@ #ifndef __U_SERIAL_H #define __U_SERIAL_H +#include <linux/poll.h> #include <linux/usb/composite.h> #include <linux/usb/cdc.h> @@ -50,6 +51,8 @@ struct gserial { void (*connect)(struct gserial *p); void (*disconnect)(struct gserial *p); int (*send_break)(struct gserial *p, int duration); + unsigned int (*poll)(struct gserial *p, struct file *file, + poll_table *wait); }; /* utilities to allocate/free request and buffer */ -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html