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

Commit 44b87b60 authored by Philipp Hachtmann's avatar Philipp Hachtmann Committed by Sasha Levin
Browse files

USB: symbolserial: Correct transferred data size



[ Upstream commit 8ae25a355b5969e12f3185e8cb8eb08b871c9084 ]

The scanner (here DS3508) always returns 64 bytes per urb buffer. The first
byte indicates the data length used in the current buffer. There even was
a comment describing this. But the comment also said that we'll send
everything in the buffer to the tty layer. That means sending the actual
barcode data and lots of trailing zeroes. This patch lets the driver only
send the real data.

Signed-off-by: default avatarPhilipp Hachtmann <hachti@hachti.de>
Acked-by: default avatarJohan Hovold <johan@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
parent 0fa94e01
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -60,17 +60,15 @@ static void symbol_int_callback(struct urb *urb)

	usb_serial_debug_data(&port->dev, __func__, urb->actual_length, data);

	if (urb->actual_length > 1) {
		data_length = urb->actual_length - 1;

	/*
	 * Data from the device comes with a 1 byte header:
	 *
		 * <size of data>data...
		 * 	This is real data to be sent to the tty layer
		 * we pretty much just ignore the size and send everything
		 * else to the tty layer.
	 * <size of data> <data>...
	 */
	if (urb->actual_length > 1) {
		data_length = data[0];
		if (data_length > (urb->actual_length - 1))
			data_length = urb->actual_length - 1;
		tty_insert_flip_string(&port->port, &data[1], data_length);
		tty_flip_buffer_push(&port->port);
	} else {