ALSA: firewire-lib/fireface: fix initial value of data block counter for IR context...
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sun, 7 Jul 2019 12:07:54 +0000 (21:07 +0900)
committerTakashi Iwai <tiwai@suse.de>
Mon, 8 Jul 2019 12:50:37 +0000 (14:50 +0200)
For IR context, ALSA IEC 61883-1/6 engine uses initial value of data
block counter as UINT_MAX, to detect first isochronous packet in the
middle of packet streaming.

At present, when CIP_NO_HEADER is used (i.e. for ALSA fireface driver),
the initial value is used for tracepoints event. 0x00 should be
for the event when the initial value is UINT_MAX because isochronous
packets with CIP_NO_HEADER option has no field for data block count.

This commit fixes the bug.

Fixes: 76864868dbab ("ALSA: firewire-lib: cache next data_block_counter after probing tracepoints event for IR context")
Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/amdtp-stream.c

index 427624009de958d5cfc2641b5ec4f272a3ec92fc..b60cf25ee5a819693e19e165ec50544f9d2c5bad 100644 (file)
@@ -646,8 +646,12 @@ static int parse_ir_ctx_header(struct amdtp_stream *s, unsigned int cycle,
                err = 0;
                *data_blocks = *payload_length / sizeof(__be32) /
                               s->data_block_quadlets;
-               *dbc = s->data_block_counter;
                *syt = 0;
+
+               if (s->data_block_counter != UINT_MAX)
+                       *dbc = s->data_block_counter;
+               else
+                       *dbc = 0;
        }
 
        if (err >= 0 && s->flags & CIP_DBC_IS_END_EVENT)