[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