Fireworks has a quirk to reset data block counter at bus reset.
This commit adds a flag of CIP_SKIP_DBC_ZERO_CHECK. This flag has an effect
to skip checking dbc continuity when dbc is zero.
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
 
        /* Check data block counter continuity */
        data_block_counter = cip_header[0] & AMDTP_DBC_MASK;
-       if (!(s->flags & CIP_DBC_IS_END_EVENT)) {
+       if ((s->flags & CIP_SKIP_DBC_ZERO_CHECK) && data_block_counter == 0) {
+               lost = false;
+       } else if (!(s->flags & CIP_DBC_IS_END_EVENT)) {
                lost = data_block_counter != s->data_block_counter;
        } else {
                if ((data_blocks > 0) && (s->tx_dbc_interval > 0))
 
  *     corresponds to the end of event in the packet. Out of IEC 61883.
  * @CIP_WRONG_DBS: Only for in-stream. The value of dbs is wrong in in-packets.
  *     The value of data_block_quadlets is used instead of reported value.
+ * @SKIP_DBC_ZERO_CHECK: Only for in-stream.  Packets with zero in dbc is
+ *     skipped for detecting discontinuity.
  */
 enum cip_flags {
        CIP_NONBLOCKING         = 0x00,
        CIP_EMPTY_WITH_TAG0     = 0x04,
        CIP_DBC_IS_END_EVENT    = 0x08,
        CIP_WRONG_DBS           = 0x10,
+       CIP_SKIP_DBC_ZERO_CHECK = 0x20,
 };
 
 /**
 
        efw->tx_stream.flags |= CIP_EMPTY_WITH_TAG0;
        /* Fireworks has its own meaning for dbc. */
        efw->tx_stream.flags |= CIP_DBC_IS_END_EVENT;
+       /* Fireworks reset dbc at bus reset. */
+       efw->tx_stream.flags |= CIP_SKIP_DBC_ZERO_CHECK;
        /* AudioFire9 always reports wrong dbs. */
        if (efw->is_af9)
                efw->tx_stream.flags |= CIP_WRONG_DBS;