• Takashi Sakamoto's avatar
    ALSA: fireface: add support for RME FireFace 802 · 062bb452
    Takashi Sakamoto authored
    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: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://lore.kernel.org/r/20200510074301.116224-6-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    062bb452
ff.c 6.65 KB