Multiple firewire soundcards with ALSA backend?

I would like to move to ALSA as my backend instead of FFADO for my multiple Echo AudioFire12s. There are a couple of benefits to this which I can mention if anyone cares.

I am able to use both cards at this time with FFADO as the backend, so I know there is no hardware problems, but I can’t make ALSA see more than one card.
If I enable jack with something simple like:

jackd -d alsa --device hw3,0

I will see 12 ports of one card. I can’t seem to access the second card either by itself or otherwise. I would like to combine the two cards together with ALSA and run jack. I would eventually like to try three cards if I can get two to work.

Can anyone help me help ALSA see the other card?

$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: Generic Analog [Generic Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: Generic Digital [Generic Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 10: HDMI 4 [HDMI 4]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: HDMI [HDA ATI HDMI], device 11: HDMI 5 [HDMI 5]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 3: AudioFire12 [AudioFire12], device 0: Fireworks [AudioFire12 PCM]
Subdevices: 1/1
Subdevice #0: subdevice #0

There are definitely two cards connected, I can use both currently with JACK + FFADO.

aplay -l
shows the same information whether or not snd_dice kernel module is loaded.

Here is some more info about the cards:
$ sudo lsfirewirephy
bus 0, node 0: 080028:434615 Texas Instruments TSB43CB43A
bus 0, node 1: 080028:434615 Texas Instruments TSB43CB43A
bus 0, node 2: 080028:831306 Texas Instruments TSB81BA3D

$ lsfirewire
fw0: Linux Firewire Juju
fw1: Echo Digital Audio AudioFire12
fw2: Echo Digital Audio AudioFire12`

Output from ffado:

$ ffado-diag

FFADO diagnostic utility 2.3.0-Unversioned directory

© 2008 Pieter Palmers
2009-2010 Arnold Krille

=== CHECK ===
Base system…
kernel version… 4.9.20-rt16-1-rt
Preempt (low latency)… False
RT patched… True
old 1394 stack present… False
old 1394 stack loaded… False
old 1394 stack active… False
new 1394 stack present… False
new 1394 stack loaded… True
new 1394 stack active… True
/dev/raw1394 node present. False
/dev/fw* permissions:
crw------- 1 root root 247, 0 Jun 12 20:02 /dev/fw0
crw-rw----+ 1 root audio 247, 1 Jun 12 20:02 /dev/fw1
crw-rw----+ 1 root audio 247, 2 Jun 12 20:02 /dev/fw2
User IDs:
uid=1000(luke) gid=1000(luke) groups=1000(luke),10(wheel),92(audio)
Prerequisites (dynamic at run-time)…
gcc … gcc (GCC) 7.1.1 20170516
g++ … g++ (GCC) 7.1.1 20170516
PyQt4 (by pyuic4) . Python User Interface Compiler 4.12 for Qt version 4.8.7
jackd … no message buffer overruns
path … /usr/bin/jackd
flags … -ljack
libraw1394 … 2.1.2
flags … -lraw1394
libavc1394 … 0.5.4
flags … -lavc1394 -lrom1394 -lraw1394
libiec61883 … 1.2.0
flags … -liec61883 -lraw1394
libxml+±2.6 … Package libxml+±2.6 was not found in the pkg-config search path.
Perhaps you should add the directory containing libxml++-2.6.pc' to the PKG_CONFIG_PATH environment variable No package 'libxml++-2.6' found flags ........... Package libxml++-2.6 was not found in the pkg-config search path. Perhaps you should add the directory containinglibxml+±2.6.pc’
to the PKG_CONFIG_PATH environment variable
No package ‘libxml+±2.6’ found
dbus-1 … 1.10.18
flags … -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -ldbus-1
Prerequisites (static at compile-time)…
gcc … gcc (GCC) 6.3.1 20170109
g++ … g++ (GCC) 6.3.1 20170109
PyQt4 (by pyuic4) . Python User Interface Compiler 4.12 for Qt version 4.8.7
jackd … jackd version 0.125.0 tmpdir /dev/shm protocol 25
path … /usr/bin/jackd
flags … -ljack -lpthread
libraw1394 … 2.1.2
flags … -lraw1394
libavc1394 … 0.5.4
flags … -lavc1394 -lrom1394 -lraw1394
libiec61883 … 1.2.0
flags … -liec61883 -lraw1394
libxml+±2.6 … Package libxml+±2.6 was not found in the pkg-config search path.
flags … Package libxml+±2.6 was not found in the pkg-config search path.
dbus-1 … 1.10.14
flags … -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -ldbus-1
uname -a…
Linux bmo 4.9.20-rt16-1-rt #1 SMP PREEMPT RT Mon Apr 17 22:13:26 EDT 2017 x86_64 GNU/Linux
Hardware…
Host controllers:
03:00.0 FireWire (IEEE 1394) [0c00]: Texas Instruments XIO2213A/B/XIO2221 IEEE-1394b OHCI Controller [Cheetah Express] [104c:823f] (rev 01) (prog-if 10 [OHCI])
Subsystem: Device [3412:7856]
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- SERR- <PERR- INTx-
Latency: 32 (500ns min, 1000ns max)
Interrupt: pin A routed to IRQ 17
Region 0: Memory at dfa04000 (32-bit, non-prefetchable) [size=2K]
Region 1: Memory at dfa00000 (32-bit, non-prefetchable) [size=16K]
Capabilities:
Kernel driver in use: firewire_ohci
Kernel modules: firewire_ohci

CPU info:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Core(s) per socket: 4
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 158
Model name: Intel® Core™ i7-7700K CPU @ 4.20GHz
Stepping: 9
CPU MHz: 4599.902
CPU max MHz: 4600.0000
CPU min MHz: 800.0000
BogoMIPS: 8400.00
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 8192K
NUMA node0 CPU(s): 0-7
Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf eagerfpu pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch epb intel_pt tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
Configuration…
IRQ information
Hardware Interrupts:

IRQ 0: PID: None, count: [58, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘2-edge timer’]
IRQ 1: PID: None, count: [2, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘1-edge i8042’]
IRQ 8: PID: None, count: [0, 1, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘8-edge rtc0’]
IRQ 9: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘9-fasteoi acpi’]
IRQ 12: PID: None, count: [0, 0, 0, 0, 1, 2, 1, 0], Sched None (priority None), drivers: [‘12-edge i8042’]
IRQ 16: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘16-fasteoi i801_smbus’]
IRQ 17: PID: None, count: [41, 1, 2, 1, 159, 1, 7, 7], Sched None (priority None), drivers: [‘17-fasteoi firewire_ohci’]
IRQ 122: PID: None, count: [856, 327, 65, 117, 3210, 73, 52, 65], Sched None (priority None), drivers: [‘524288-edge amdgpu’]
IRQ 123: PID: None, count: [2077, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3670016-edge nvme0q0’, ‘nvme0q1’]
IRQ 124: PID: None, count: [23, 7, 5, 5, 34, 17, 13, 12], Sched None (priority None), drivers: [‘327680-edge xhci_hcd’]
IRQ 125: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘376832-edge ahci’]
IRQ 126: PID: None, count: [7, 1, 3, 0, 11, 3, 0, 4], Sched None (priority None), drivers: [‘3145728-edge xhci_hcd’]
IRQ 127: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3145729-edge xhci_hcd’]
IRQ 128: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3145730-edge xhci_hcd’]
IRQ 129: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3145731-edge xhci_hcd’]
IRQ 130: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3145732-edge xhci_hcd’]
IRQ 131: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3145733-edge xhci_hcd’]
IRQ 132: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3145734-edge xhci_hcd’]
IRQ 133: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3145735-edge xhci_hcd’]
IRQ 134: PID: None, count: [0, 1744, 0, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3670017-edge nvme0q2’]
IRQ 135: PID: None, count: [0, 0, 3355, 0, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3670018-edge nvme0q3’]
IRQ 136: PID: None, count: [0, 0, 0, 2698, 0, 0, 0, 0], Sched None (priority None), drivers: [‘3670019-edge nvme0q4’]
IRQ 137: PID: None, count: [0, 0, 0, 0, 1893, 0, 0, 0], Sched None (priority None), drivers: [‘3670020-edge nvme0q5’]
IRQ 138: PID: None, count: [0, 0, 0, 0, 0, 2480, 0, 0], Sched None (priority None), drivers: [‘3670021-edge nvme0q6’]
IRQ 139: PID: None, count: [0, 0, 0, 0, 0, 0, 2100, 0], Sched None (priority None), drivers: [‘3670022-edge nvme0q7’]
IRQ 140: PID: None, count: [0, 0, 0, 0, 0, 0, 0, 2074], Sched None (priority None), drivers: [‘3670023-edge nvme0q8’]
IRQ 141: PID: None, count: [5, 0, 0, 0, 0, 15, 7, 5], Sched None (priority None), drivers: [‘360448-edge mei_me’]
IRQ 142: PID: None, count: [145, 11, 0, 0, 63, 58, 202, 65], Sched None (priority None), drivers: [‘514048-edge snd_hda_intel:card0’]
IRQ 143: PID: None, count: [52, 0, 0, 0, 0, 24, 58, 28], Sched None (priority None), drivers: [‘526336-edge snd_hda_intel:card1’]
IRQ 144: PID: None, count: [1782, 57, 125, 1153, 811, 45, 315, 76], Sched None (priority None), drivers: [‘520192-edge enp0s31f6’]

Software Interrupts:

=== REPORT ===
FireWire kernel drivers:

The new FireWire kernel stack is loaded.
If running a kernel earlier than 2.6.37 and problems are experienced, either
try with the old Firewire kernel stack or upgrade to a newer kernel
(preferrably 2.6.37 or later).

Did you try unloading the firewire driver that ffado uses? In the past there have been problems: it was either ALSA or fw.
Then again I can also imagine than snd_dice isn’t ready for more than one device of the same type. I’d ask on https://lists.sourceforge.net/lists/listinfo/alsa-user

Can you daisy-chain your FW devices? I used to daisy-chain two original series Onyx mixers with FW cards. I didn’t use ALSA for this, but try it if you have that option.

x42: I was under the impression that the cards were not in use until I loaded jackd with -d ffado. Maybe I can uninstall FFADO and try that. Although it could be a limitation of the driver, no one seems to know.

audiodef: You can! I don’t see much difference giving them their own Firewire ports/cards or chaining them together. Thanks

So I can’t remove FFADO (in Arch linux) because it’s a dependency of jack2. Perhaps the only thing left is to look up the ALSA developer who supported this card and determine if they think the driver can support multiple cards or not…
Not sure what I’m doing here, open to suggestions

@habys: Does arch linux use RPM or Apt? If it uses RPM, you can force remove ffado using the rpm command with --no-deps option. It can probably be done using apt as well, but I am not familiar enough with that. Also, audiodef had the solution here, The AudioFire 12s can be daisy chained, ffado will see it as one device (not sure about ALSA), I had two Audiofire 12s and daisy chaining worked fine for me. I cannot test this under ALSA because I only have one Audiofire 12 now.

There is no reason to remove FFADO. It is not used for anything unless you actively tell it to be.

paul: Thanks, that’s what I was thinking. Few problems seem to be solved by forcing the hand of the package manager.

Lexridge: Not sure what you mean by daisy chained, if you are referring to the physical Firewire cabling, I am pretty sure it doesn’t matter how they are connected, and they are already “daisy-chained” as the secondary card is plugged into the first card. If you are referring to software, please let me know more details.

I am under the impression that for this to work in ALSA, I will need to see both cards as devices in aplay, then use ALSA magic to tie them together in to one pseudo-device which I can tell jack to use. If the driver supports this, then there is a chance that it will work with three cards, with the only concern at that point would be ensuring the clock signal from the first soundcard makes it to the third without being a problem.

That is incorrect. Firewire has the specific property that devices can be daisy chained at the FW level, and the host system sees them as a single integrated device. Its a very nice property of Firewire (too bad that it is dead). I have no idea how you actually go about doing this, however.

Paul is correct. Daisy chaining the hardware is exactly what I was referring to. It should show up as one device. No need to use alsa_in/alsa_out. When doing this, my Audiofire12s show up as a single 24 channel device in ffado. I have never tried in ALSA, and I am not able to do that now, as I only have one device presently. The second AF12 died about 18 months ago when I suffered a devastating lightning strike. I lost way more than just one AF12. I would think ALSA would work the same, since it is a firewire thing on the hardware side.

@paul Yes indeed, firewire is pretty much dead, but you can still presently buy firewire audio devices. Amazing, but true. Perhaps it is just old stock It seems USB 3.0 is the way to go anyway.