• Takashi Sakamoto's avatar
    ALSA: firewire-motu: add support MOTU 8pre FireWire · 35033d8c
    Takashi Sakamoto authored
    This commit adds support for MOTU 8pre FireWire, which was shipped 2007
    and nowadays already discontinued. Userspace applications can transmit
    and receive PCM frames and MIDI messages for this model via ALSA PCM
    interface and RawMidi/Sequencer interfaces.
    
    Like the other models of MOTU FireWire series, this model has many
    quirks in its CIP.
    
    At first, data channels for two pairs of optical interfaces. At lower
    sampling transmission frequency, i.e. 44.1 and 48.0 kHz, one pair is
    available for ADAT data, thus 8 data chunks are transferred by CIP.
    At middle sampling transmission frequency, i.e.  88.2 and 96.0 kHz,
    two pairs are available to keep 8 chunks for ADAT data, thus CIP
    still includes 8 data chunks.
    
    Apart from data chunks for optical interface, CIP includes fixed number
    of data chunks. In tx stream, two chunks for status message, eight
    chunks for samples from analog 1-8 input, two chunks for mix-return.
    In rx stream, two chunks for control message, two chunks for main 1-2
    output, two chunks for phone 1-2 output, two chunks for dummy 1-2.
    
    CIP header in tx stream includes quirks for its dbs and dbc fields.
    The value of dbs field is fixed to 0x13, against its actual size.
    The value of dbc field is firstly updated to 0x07 from zero, then
    it's incremented continuously according to actual number of data h
    blocks.
    
    Finally, the model has own bits to disable frame fetch.
    
    This commit uses several options to absorb the above quirks.
    
    $ python2 crpp < /sys/bus/firewire/devices/fw1/config_rom
                   ROM header and bus information block
                   -----------------------------------------------------------------
    400  0410b57d  bus_info_length 4, crc_length 16, crc 46461
    404  31333934  bus_name "1394"
    408  20001000  irmc 0, cmc 0, isc 1, bmc 0, cyc_clk_acc 0, max_rec 1 (4)
    40c  0001f200  company_id 0001f2     |
    410  00083dfb  device_id 0000083dfb  | EUI-64 0001f20000083dfb
    
                   root directory
                   -----------------------------------------------------------------
    414  0004c65c  directory_length 4, crc 50780
    418  030001f2  vendor
    41c  0c0083c0  node capabilities per IEEE 1394
    420  8d000006  --> eui-64 leaf at 438
    424  d1000001  --> unit directory at 428
    
                   unit directory at 428
                   -----------------------------------------------------------------
    428  0003991c  directory_length 3, crc 39196
    42c  120001f2  specifier id
    430  1300000f  version
    434  17103800  model
    
                   eui-64 leaf at 438
                   -----------------------------------------------------------------
    438  00022681  leaf_length 2, crc 9857
    43c  0001f200  company_id 0001f2     |
    440  00083dfb  device_id 0000083dfb  | EUI-64 0001f20000083dfb
    Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    35033d8c
motu.c 7.47 KB