[PATCH v7 0/2] Add generic serial MIDI driver using serial bus API

Takashi Iwai tiwai at suse.de
Thu May 12 11:55:02 CEST 2022


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


More information about the Alsa-devel mailing list