USB: cypress_m8: only wake up MSR queue on changes
authorJohan Hovold <jhovold@gmail.com>
Thu, 2 Jan 2014 21:49:26 +0000 (22:49 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 3 Jan 2014 20:42:24 +0000 (12:42 -0800)
Only wake up MSR wait queue on actual modem-status changes.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/serial/cypress_m8.c
drivers/usb/serial/cypress_m8.h

index 558605d..07e0033 100644 (file)
@@ -1187,7 +1187,10 @@ static void cypress_read_int_callback(struct urb *urb)
        if (priv->current_status != priv->prev_status) {
                priv->diff_status |= priv->current_status ^
                        priv->prev_status;
-               wake_up_interruptible(&port->port.delta_msr_wait);
+
+               if (priv->diff_status & UART_MSR_MASK)
+                       wake_up_interruptible(&port->port.delta_msr_wait);
+
                priv->prev_status = priv->current_status;
        }
        spin_unlock_irqrestore(&priv->lock, flags);
index 68bfd51..119d2e1 100644 (file)
@@ -66,6 +66,7 @@
 #define CONTROL_RTS    0x10    /* request to send */
 #define CONTROL_RESET  0x08    /* sent with output report */
 
+#define UART_MSR_MASK  0xf0
 #define UART_RI                0x80    /* ring indicator */
 #define UART_CD                0x40    /* carrier detect */
 #define UART_DSR       0x20    /* data set ready */