[PATCH 10/16] USB: ch341: clean up line-status handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Clean up line-status handling.

Signed-off-by: Johan Hovold <jhovold@xxxxxxxxx>
---
 drivers/usb/serial/ch341.c | 22 ++++++++++++++--------
 1 file changed, 14 insertions(+), 8 deletions(-)

diff --git a/drivers/usb/serial/ch341.c b/drivers/usb/serial/ch341.c
index f647dbdcb27d..9dd94a7e08b9 100644
--- a/drivers/usb/serial/ch341.c
+++ b/drivers/usb/serial/ch341.c
@@ -444,24 +444,30 @@ static void ch341_update_line_status(struct usb_serial_port *port,
 					unsigned char *data, size_t len)
 {
 	struct ch341_private *priv = usb_get_serial_port_data(port);
+	struct tty_struct *tty;
 	unsigned long flags;
-	u8 prev_line_status = priv->line_status;
+	u8 status;
+	u8 delta;
 
 	if (len < 4)
 		return;
 
+	status = ~data[2] & CH341_BITS_MODEM_STAT;
+
 	spin_lock_irqsave(&priv->lock, flags);
-	priv->line_status = (~(data[2])) & CH341_BITS_MODEM_STAT;
-	if ((data[1] & CH341_MULT_STAT))
+	delta = status ^ priv->line_status;
+	priv->line_status = status;
+	if (data[1] & CH341_MULT_STAT)
 		priv->multi_status_change = 1;
 	spin_unlock_irqrestore(&priv->lock, flags);
 
-	if ((priv->line_status ^ prev_line_status) & CH341_BIT_DCD) {
-		struct tty_struct *tty = tty_port_tty_get(&port->port);
-		if (tty)
+	if (delta & CH341_BIT_DCD) {
+		tty = tty_port_tty_get(&port->port);
+		if (tty) {
 			usb_serial_handle_dcd_change(port, tty,
-					priv->line_status & CH341_BIT_DCD);
-		tty_kref_put(tty);
+						status & CH341_BIT_DCD);
+			tty_kref_put(tty);
+		}
 	}
 
 	wake_up_interruptible(&port->port.delta_msr_wait);
-- 
1.8.3.2

--
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




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux