On Thu, May 07, 2020 at 09:59:18PM +0100, Sean Young wrote: > 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: > > > 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. Why not just use the ir-usb.c driver for this device instead? thanks, greg k-h