This patchset adds an experimental driver for Digidesign 002/003 family. If you have any models, please test with this driver and report the result.
Currently, this driver correctly supports these major functionalities: (as long as I tested) * PCM sample capture * MIDI messages capture * MIDI messages playback
And functionalities which need to be tested: * streaming with S/PDIF, ADAT and work clock source * MIDI device control
And includes a bug which should be fixed: * PCM sample playback
For a driver for these models, there was a preceding implementation by Robin Gareus and Damien Zammit. [alsa-devel] draft -- ALSA firewire + digi003 http://mailman.alsa-project.org/pipermail/alsa-devel/2013-January/058177.htm...
This patchset includes their implementation, called-as double-oh-three, to multiplex PCM samples into CIP packet. As long as I test, their implementation may includes any bugs and this driver still causes noisy sound in several cases, while I confirm to get the same data block pattern which Robin explains. http://gareus.org/wiki/digi003
If you interested in this bug and tries to fix it, my packet dump may be helpfull. Please see: http://subversion.ffado.org/wiki/digi003rack * 96khz-24bit-1ch.log (27.5 kB) * 44khz-24bit-1ch.log (49.8 kB) * 44khz-24bit-2ch.log (49.8 kB)
And DKMS package is available on my github repository. https://github.com/takaswie/snd-firewire-improve
Takashi Sakamoto (11): ALSA: digi00x: add skelton for Digi 002/003 device driver ALSA: digi00x: add streaming functionality ALSA: digi00x: add proc node for clock status ALSA: digi00x: add PCM functionality ALSA: digi00x: add MIDI functionality ALSA: digi00x: add hwdep interface ALSA: digi00x: support unknown asynchronous message ALSA: digi00x: support MIDI ports for device control ALSA: firewire-lib: allows to implement external MIDI callback function digi00x: improve MIDI capture/playback ALSA: digi00x: apply double-oh-three algorism to multiplex PCM samples
include/uapi/sound/asound.h | 3 +- include/uapi/sound/firewire.h | 1 + sound/firewire/Kconfig | 10 + sound/firewire/Makefile | 1 + sound/firewire/amdtp.c | 30 ++- sound/firewire/amdtp.h | 5 + sound/firewire/digi00x/Makefile | 3 + sound/firewire/digi00x/digi00x-hwdep.c | 192 ++++++++++++++ sound/firewire/digi00x/digi00x-midi.c | 199 +++++++++++++++ sound/firewire/digi00x/digi00x-pcm.c | 336 +++++++++++++++++++++++++ sound/firewire/digi00x/digi00x-proc.c | 71 ++++++ sound/firewire/digi00x/digi00x-protocol.c | 361 +++++++++++++++++++++++++++ sound/firewire/digi00x/digi00x-stream.c | 398 ++++++++++++++++++++++++++++++ sound/firewire/digi00x/digi00x.c | 179 ++++++++++++++ sound/firewire/digi00x/digi00x.h | 126 ++++++++++ 15 files changed, 1907 insertions(+), 8 deletions(-) create mode 100644 sound/firewire/digi00x/Makefile create mode 100644 sound/firewire/digi00x/digi00x-hwdep.c create mode 100644 sound/firewire/digi00x/digi00x-midi.c create mode 100644 sound/firewire/digi00x/digi00x-pcm.c create mode 100644 sound/firewire/digi00x/digi00x-proc.c create mode 100644 sound/firewire/digi00x/digi00x-protocol.c create mode 100644 sound/firewire/digi00x/digi00x-stream.c create mode 100644 sound/firewire/digi00x/digi00x.c create mode 100644 sound/firewire/digi00x/digi00x.h