ALSA: fireface: add support for RME FireFace 802
Fireface 802 was shipped by RME GmbH in 2014. This model supports later
protocol for management of isochronous communication and synchronization
of sampling transmission frequency.
This model consists of below ICs:
* TI TSB41AB2
* Xilinx Spartan-6 FPGA XC6SLX16
* TI TMS320 C6747
* SMSC USB3250
Especially, this model just supports IEEE 1394a, against its name which
evokes Fireface 800.
This commit adds support for Fireface 802 (tested). Userspace applications
can transfer PCM frames and MIDI messages via ALSA PCM/Rawmidi interface.
I note that 4 channels for ADAt1 and ADAT2 are disabled at higher sampling
transfer frequency since isochronous resources reservation fails due to
bandwidth limitation of IEEE 1394a.
The value read from LATTER_SYNC_STATUS register is slightly different
from the one of Fireface UCX. The higher 4 bits and lower 4 bits are
swapped within the same byte.
Without any assist of userspace application, transmitted MIDI messages
from the device are not going to be processed. For detail, please refer
to my comment in code of latter protocol.
$ python crpp < /sys/bus/firewire/devices/fw1/config_rom
ROM header and bus information block
-----------------------------------------------------------------
400
0404ffff bus_info_length 4, crc_length 4, crc 65535 (should be 26805)
404
31333934 bus_name "1394"
408
20008000 irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 0, max_rec 8 (512)
40c
000a3504 company_id 000a35 |
410
38077423 device_id
0438077423 | EUI-64
000a350438077423
root directory
-----------------------------------------------------------------
414
0005ffff directory_length 5, crc 65535 (should be 9514)
418
0c0083c0 node capabilities per IEEE 1394
41c
03000a35 vendor
420
8100000b --> descriptor leaf at 44c
424
8d000007 --> eui-64 leaf at 440
428
d1000001 --> unit directory at 42c
unit directory at 42c
-----------------------------------------------------------------
42c
0004ffff directory_length 4, crc 65535 (should be 45134)
430
12000a35 specifier id
434
13000005 version
438
17101800 model
43c
81000008 --> descriptor leaf at 45c
eui-64 leaf at 440
-----------------------------------------------------------------
440
0002ffff leaf_length 2, crc 65535 (should be 60131)
444
000a3504 company_id 000a35 |
448
38077423 device_id
0438077423 | EUI-64
000a350438077423
descriptor leaf at 44c
-----------------------------------------------------------------
44c
0003ffff leaf_length 3, crc 65535 (should be 469)
450
00000000 textual descriptor
454
00000000 minimal ASCII
458
524d4521 "RME!"
descriptor leaf at 45c
-----------------------------------------------------------------
45c
0005ffff leaf_length 5, crc 65535 (should be 10561)
460
00000000 textual descriptor
464
00000000 minimal ASCII
468
46697265 "Fire"
46c
66616365 "face"
470
20383032 " 802"
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20200510074301.116224-6-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>