Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6b8f1ca5 authored by Bill Pemberton's avatar Bill Pemberton Committed by Greg Kroah-Hartman
Browse files

USB: ssu100: set tty_flags in ssu100_process_packet



flag was never set in ssu100_process_packet.  Add logic to set it
before calling tty_insert_flip_*

Signed-off-by: default avatarBill Pemberton <wfp5p@virginia.edu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 85dee135
Loading
Loading
Loading
Loading
+29 −9
Original line number Original line Diff line number Diff line
@@ -602,7 +602,8 @@ static void ssu100_update_msr(struct usb_serial_port *port, u8 msr)
	}
	}
}
}


static void ssu100_update_lsr(struct usb_serial_port *port, u8 lsr)
static void ssu100_update_lsr(struct usb_serial_port *port, u8 lsr,
			      char *tty_flag)
{
{
	struct ssu100_port_private *priv = usb_get_serial_port_data(port);
	struct ssu100_port_private *priv = usb_get_serial_port_data(port);
	unsigned long flags;
	unsigned long flags;
@@ -611,16 +612,32 @@ static void ssu100_update_lsr(struct usb_serial_port *port, u8 lsr)
	priv->shadowLSR = lsr;
	priv->shadowLSR = lsr;
	spin_unlock_irqrestore(&priv->status_lock, flags);
	spin_unlock_irqrestore(&priv->status_lock, flags);


	*tty_flag = TTY_NORMAL;
	if (lsr & UART_LSR_BRK_ERROR_BITS) {
	if (lsr & UART_LSR_BRK_ERROR_BITS) {
		if (lsr & UART_LSR_BI)
		/* we always want to update icount, but we only want to
		 * update tty_flag for one case */
		if (lsr & UART_LSR_BI) {
			priv->icount.brk++;
			priv->icount.brk++;
		if (lsr & UART_LSR_FE)
			*tty_flag = TTY_BREAK;
			priv->icount.frame++;
			usb_serial_handle_break(port);
		if (lsr & UART_LSR_PE)
		}
		if (lsr & UART_LSR_PE) {
			priv->icount.parity++;
			priv->icount.parity++;
		if (lsr & UART_LSR_OE)
			if (*tty_flag == TTY_NORMAL)
				*tty_flag = TTY_PARITY;
		}
		if (lsr & UART_LSR_FE) {
			priv->icount.frame++;
			if (*tty_flag == TTY_NORMAL)
				*tty_flag = TTY_FRAME;
		}
		if (lsr & UART_LSR_OE){
			priv->icount.overrun++;
			priv->icount.overrun++;
			if (*tty_flag == TTY_NORMAL)
				*tty_flag = TTY_OVERRUN;
		}
	}
	}

}
}


static int ssu100_process_packet(struct tty_struct *tty,
static int ssu100_process_packet(struct tty_struct *tty,
@@ -629,7 +646,7 @@ static int ssu100_process_packet(struct tty_struct *tty,
				 char *packet, int len)
				 char *packet, int len)
{
{
	int i;
	int i;
	char flag;
	char flag = TTY_NORMAL;
	char *ch;
	char *ch;


	dbg("%s - port %d", __func__, port->number);
	dbg("%s - port %d", __func__, port->number);
@@ -637,8 +654,11 @@ static int ssu100_process_packet(struct tty_struct *tty,
	if ((len >= 4) &&
	if ((len >= 4) &&
	    (packet[0] == 0x1b) && (packet[1] == 0x1b) &&
	    (packet[0] == 0x1b) && (packet[1] == 0x1b) &&
	    ((packet[2] == 0x00) || (packet[2] == 0x01))) {
	    ((packet[2] == 0x00) || (packet[2] == 0x01))) {
		if (packet[2] == 0x00)
		if (packet[2] == 0x00) {
			ssu100_update_lsr(port, packet[3]);
			ssu100_update_lsr(port, packet[3], &flag);
			if (flag == TTY_OVERRUN)
				tty_insert_flip_char(tty, 0, TTY_OVERRUN);
		}
		if (packet[2] == 0x01)
		if (packet[2] == 0x01)
			ssu100_update_msr(port, packet[3]);
			ssu100_update_msr(port, packet[3]);