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

Commit 39892da4 authored by Oliver Neukum's avatar Oliver Neukum Committed by Greg Kroah-Hartman
Browse files

USB: Digi AccelePort adapted to new tty buffering



this fixes the flushing trouble due to its own buffering for this driver.


Signed-off-by: default avatarOliver Neukum <oneukum@suse.de>
Cc: Al Borchers <alborchers@steinerpoint.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent b308e74d
Loading
Loading
Loading
Loading
+13 −39
Original line number Diff line number Diff line
@@ -930,23 +930,17 @@ static void digi_rx_unthrottle( struct usb_serial_port *port )
{

	int ret = 0;
	int len;
	unsigned long flags;
	struct digi_port *priv = usb_get_serial_port_data(port);
	struct tty_struct *tty = port->tty;


dbg( "digi_rx_unthrottle: TOP: port=%d", priv->dp_port_num );

	spin_lock_irqsave( &priv->dp_port_lock, flags );

	/* send any buffered chars from throttle time on to tty subsystem */

	len = tty_buffer_request_room(tty, priv->dp_in_buf_len);
	if( len > 0 ) {
		tty_insert_flip_string_flags(tty, priv->dp_in_buf, priv->dp_in_flag_buf, len);
		tty_flip_buffer_push( tty );
	}
	/* turn throttle off */
	priv->dp_throttled = 0;
	priv->dp_in_buf_len = 0;
	priv->dp_throttle_restart = 0;

	/* restart read chain */
	if( priv->dp_throttle_restart ) {
@@ -954,11 +948,6 @@ dbg( "digi_rx_unthrottle: TOP: port=%d", priv->dp_port_num );
		ret = usb_submit_urb( port->read_urb, GFP_ATOMIC );
	}

	/* turn throttle off */
	priv->dp_throttled = 0;
	priv->dp_in_buf_len = 0;
	priv->dp_throttle_restart = 0;

	spin_unlock_irqrestore( &priv->dp_port_lock, flags );

	if( ret ) {
@@ -1864,20 +1853,6 @@ static int digi_read_inb_callback( struct urb *urb )
		/* data length is len-1 (one byte of len is status) */
		--len;

		if( throttled ) {

			len = min( len,
				DIGI_IN_BUF_SIZE - priv->dp_in_buf_len );

			if( len > 0 ) {
				memcpy( priv->dp_in_buf + priv->dp_in_buf_len,
					data, len );
				memset( priv->dp_in_flag_buf
					+ priv->dp_in_buf_len, flag, len );
				priv->dp_in_buf_len += len;
			}

		} else {
		len = tty_buffer_request_room(tty, len);
		if( len > 0 ) {
			/* Hot path */
@@ -1890,7 +1865,6 @@ static int digi_read_inb_callback( struct urb *urb )
			tty_flip_buffer_push( tty );
		}
	}
	}

	spin_unlock( &priv->dp_port_lock );