Thread (11 messages) 11 messages, 3 authors, 2020-05-13

Re: [PATCH 2/3] input: serio: allow more than one byte to be sent at once

From: Sean Young <sean@mess.org>
Date: 2020-05-07 20:59:22
Also in: linux-media

On Thu, May 07, 2020 at 01:25:46PM -0700, Dmitry Torokhov wrote:
On Thu, May 07, 2020 at 02:53:36PM +0100, Sean Young wrote:
quoted
serio drivers can only send one byte at a time. If the underlying tty
is a usb serial port, then each byte will be put into separate usb
urbs, which is not efficient.

Additionally, the Infrared Toy device refuses to transmit IR if the
IR data is sent one byte at a time. IR data is formatted in u16 values,
and the firmware expects complete u16 values in the packet.

https://github.com/DangerousPrototypes/USB_IR_Toy/blob/master/Firmware-main/IRs.c#L240
Ummm, serial protocol data size is at most 9 bits so I have no earthly
idea how they expect to get 16.
serio is a layer on top several serial protocols, including ttys. ttys allow
more than one byte to be written at a time, see struct tty_operations:

        int  (*write)(struct tty_struct * tty,
                      const unsigned char *buf, int count);

ttys would be very inefficient if you could only write one byte at a time,
and they are very serial.

This patch exposes the underlying tty write() functionality to serio. When
the underlying tty is a usb serial port this makes for far fewer usb packets
being used to send the same data, and fixes my driver problem, and it
would reduce the number of calls in a few other cases too.

I'm happy to rework the patch if there are comments on the style or
approach.

Thanks,

Sean
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help