• Takashi Sakamoto's avatar
    ALSA: bebob/firewire-lib: Add a quirk for discontinuity at bus reset · b6bc8123
    Takashi Sakamoto authored
    Normal BeBoB firmware has a quirk. When receiving bus reset, it transmits
    packets with discontinuous value in dbc field.
    
    This causes two situation, one is to abort streaming by firewire-lib as a
    result of detecting the discontinuity. Another is to call driver's .update()
    because of bus reset. These two is generated independently. (The former
    depends on isochronous stream and the latter depends on IEEE1394 bus driver.)
    
    When BeBoB driver works with XRUN-recoverable applications, this situation
    looks like stream_start_duplex() call followed by stream_update_duplex() call
    because applications will call snd_pcm_prepare() immediately at XRUN.
    
    To update connections and streams at first, this commit use completion. When
    queueing error occurs, stream_start_duplex() is forced to wait maximum
    1000msec. During this, when .update() is called, the completion is waken and
    stream_start_duplex() is processed without breaking connections.
    
    At bus reset, stream_start_duplex() shouldn't break/establish connections and
    stream_update_duplex() should update connections because a caller of
    fw_iso_resources_allocate() is responsible for calling
    fw_iso_resources_update() on bus reset.
    
    This commit also adds a flag, which has an effect to skip checking continuity
    for first packet. This flag is useful for BeBoB quirk to start handling packets
    during streaming.
    Signed-off-by: default avatarTakashi Sakamoto <o-takashi@sakamocchi.jp>
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    b6bc8123
amdtp.c 26.8 KB