On Mon, 09 May 2022 16:59:31 +0200, Daniel Kaehn wrote: > > Generic serial MIDI driver adding support for using serial devices > compatible with the serial bus as raw MIDI devices, allowing using > additional serial devices not compatible with the existing > serial-u16550 driver. Supports only setting standard serial baudrates on > the underlying serial device; however, the underlying serial device can > be configured so that a requested 38.4 kBaud is actually the standard MIDI > 31.25 kBaud. Supports DeviceTree configuration. > > Changes in v7: > - Separate examples in dt-binding to remove need to specify unit name > (fixing dt_binding_check error) > > Changes in v6: > - Change compatible "serialmidi" -> serial-midi" > - Default current-speed to 38400 (closest baud to MIDI standard speed) > - Appropriately stop reading or writing MIDI if input or output > _trigger() is called with a parameter of zero, respectively > - Zero out corresponding triggered state on close to ensure input and > output closing results in the serial port being closed > - Fix order of operations in _probe() > - Remove "DEBUG" literal from debug messages > - Remove unused dt-parsing patch checking for existence of node > - Whitespace / tabbing fixes / improvements > > Changes in v5: > - Reword description in dt-binding for clarity > - Change 'speed' dt property to standard 'current-speed' > - Move MIDI output loop onto workqueue (since this could loop quite a while, > if ALSA provides a continuous stream of bytes) > - Add tx_state bit flags to snd_serial_generic struct > - Safegard critical section in tx_work with atomic bit ops on tx_state > - Switch operations on filemode to use atomic bit ops > > Changes in v4: > - Fix regressed typo - Correct 3.84 kBaud -> 38.4 kBaud in DT & Kconfig > (sorry about spam - noticed after sending v3 and didn't want to let > the error sit around for too long) > > Changes in v3: > - Replace use of snd_printk() with dev_* alternatives > - Removed unnecessary initialization of err variables > - Replaced instances of `== SERIAL_MODE_NOT_OPENED` with zero check > - Loop on output_write to completely fill output buffer if data available > - Depend on CONFIG_OF in Kconfig > - Replace use of devm_kzalloc() with extra_size allocation in snd_devm_card_new() > - Use module_serdev_device_driver() instead of module_init() and module_exit(0) > > Changes in v2: > - Fix 'snd_serial_generic_write_wakeup' missing static keyword > - Correct 3.125 kBaud > 31.25 kBaud in documentation for MIDI > > > The need for this driver arose from a project using a Raspberry Pi4 which > needed to receive and send raw MIDI with low latency. The pl011 UART > used is not compatible with the existing serial MIDI driver made for > u16550-style devices. Using a userspace program such as ttymidi to feed > input from the TTY device to a virtual ALSA MIDI device was functional, > but not ideal. > > I am not sure if a MIDI driver needing the mentioned 'hack' to clock > 38.4 kBaud down to the standard MIDI baud is permissible in the mainline > kernel, but am submitting nevertheless in case it is useful. To my knowledge, > it doesn't seem that there would be any way for this driver to manually > configure a serial port to 31.25 kBaud using the serial bus API (please > correct me f I'm wrong). In my use case, I am actually configuring one port > to run at 115.2 kBaud for faster communication with a custom onboard MIDI controller. > > Daniel Kaehn (2): > dt-bindings: sound: Add generic serial MIDI device > Add generic serial MIDI driver using serial bus API Now applied both patches to for-next branch. thanks, Takashi