• Takashi Sakamoto's avatar
    ALSA: firewire-motu: refine parser for meter information in register DSP models · 0f166e12
    Takashi Sakamoto authored
    After further investigation, I realize that the total number of elements
    in array is not enough to store all of related messages from device.
    This commit refines meter array and message parser.
    
    In terms of channel identifier, register DSP models are classified to
    two categories:
    
    1. the target of output is selectable
    
    828mk2, 896hd, and Traveler are in the category. They transfer messages
    with channel identifier between 0x00 and 0x13 for input meters,
    therefore 20 elements are needed to store.
    
    On the other hand, they transfer messages with channel identifier for one
    pair of output meters. The selection is done by asynchronous write
    transaction to offset 0x'ffff'f000'0b2c. The table for relationship
    between written value and available identifiers is below:
    
    =============  ===============
    written value  identifier pair
    =============  ===============
    0x00000b00     0x80/0x81
    0x00000b01     0x82/0x83
    ...            ...
    0x00000b0b     0x96/0x97
    ...            ...
    0x00000b10     0xa0/0xa1
    ...            ...
    0x00000b3f     0xfe/0xff
    ...            ...
    greater        0xfe/0xff
    =============  ===============
    
    Actually in the above three models, 0x96/0x97 pair is the maximum. Thus
    the number of available output meter is 24.
    
    2. all of output is available
    
    8 pre, Ultralite, Audio Express, and 4 pre are in the category. They
    transfer messages for output meters without any selection. The table for
    available identifier for each direction is below:
    
    ==============  =========  ==========
    model           input      output
    ==============  =========  ==========
    8 pre           0x00-0x0f  0x82-0x8d
    Ultralite       0x00-0x09  0x82-0x8f
    Audio Express   0x00-0x09  0x80-0x8d
    4 pre           0x00-0x09  0x80-0x8d
    ==============  =========  ==========
    
    Some of available identifiers might not be used for actual output meters.
    
    Anyway, 24 plus 24 elements accommodate the input/output meters.
    
    I note that isochronous packet from V3HD/V4HD deliver no message.
    Notification by asynchronous transaction to registered address seems to be
    used for the purpose as well as for change of mixer parameter.
    Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Link: https://lore.kernel.org/r/20211027125529.54295-3-o-takashi@sakamocchi.jpSigned-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    0f166e12
firewire.h 9.88 KB