summaryrefslogtreecommitdiffstats
path: root/sound/firewire
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2019-07-07 21:07:55 +0900
committerTakashi Iwai <tiwai@suse.de>2019-07-08 14:50:38 +0200
commit4ece7f6fd830d71bbb185434bf081b1f47701a67 (patch)
treee5685167c69b5c5f777a3c7340d7193d537c1b65 /sound/firewire
parent7fbf909668d69d7ab4428f6f55cb53fe4451b9b1 (diff)
downloadlinux-4ece7f6fd830d71bbb185434bf081b1f47701a67.tar.bz2
ALSA: firewire-lib: fix initial value of data block count for IR context without CIP_DBC_IS_END_EVENT
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_DBC_IS_END_EVENT is not used (i.e. for drivers except for ALSA fireworks driver), the initial value is used as is for tracepoints event. However, the engine can detect the value of dbc field in the payload of first isochronous packet and the value should be assigned to the event. 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>
Diffstat (limited to 'sound/firewire')
-rw-r--r--sound/firewire/amdtp-stream.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
index b60cf25ee5a8..3d410057eaa4 100644
--- a/sound/firewire/amdtp-stream.c
+++ b/sound/firewire/amdtp-stream.c
@@ -654,8 +654,10 @@ static int parse_ir_ctx_header(struct amdtp_stream *s, unsigned int cycle,
*dbc = 0;
}
- if (err >= 0 && s->flags & CIP_DBC_IS_END_EVENT)
- s->data_block_counter = *dbc;
+ if (err < 0)
+ return err;
+
+ s->data_block_counter = *dbc;
trace_amdtp_packet(s, cycle, cip_header, *payload_length, *data_blocks,
index);