ALSA: firewire-lib: enable CIP_DBC_IS_END_EVENT for both directions of stream
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Wed, 22 Mar 2017 12:30:17 +0000 (21:30 +0900)
committerTakashi Iwai <tiwai@suse.de>
Tue, 28 Mar 2017 10:33:28 +0000 (12:33 +0200)
Commit c8bdf49b9935("ALSA: fireworks/firewire-lib: Add a quirk for the
meaning of dbc") adds CIP_DBC_IS_END_EVENT flag just for tx packets.
However, MOTU FireWire series has this quirk for rx packets.

This commit allows both directions with the flag.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/amdtp-stream.c
sound/firewire/amdtp-stream.h

index 65c5ed7488a36cf1ebf6f0a9a6ee01eb031da238..f9d12f4544836ba3c0566bcffca8e77b1d4bb96c 100644 (file)
@@ -426,6 +426,10 @@ static int handle_out_packet(struct amdtp_stream *s, unsigned int cycle,
        data_blocks = calculate_data_blocks(s, syt);
        pcm_frames = s->process_data_blocks(s, buffer + 2, data_blocks, &syt);
 
+       if (s->flags & CIP_DBC_IS_END_EVENT)
+               s->data_block_counter =
+                               (s->data_block_counter + data_blocks) & 0xff;
+
        buffer[0] = cpu_to_be32(ACCESS_ONCE(s->source_node_id_field) |
                                (s->data_block_quadlets << CIP_DBS_SHIFT) |
                                ((s->sph << CIP_SPH_SHIFT) & CIP_SPH_MASK) |
@@ -435,7 +439,9 @@ static int handle_out_packet(struct amdtp_stream *s, unsigned int cycle,
                                ((s->fdf << CIP_FDF_SHIFT) & CIP_FDF_MASK) |
                                (syt & CIP_SYT_MASK));
 
-       s->data_block_counter = (s->data_block_counter + data_blocks) & 0xff;
+       if (!(s->flags & CIP_DBC_IS_END_EVENT))
+               s->data_block_counter =
+                               (s->data_block_counter + data_blocks) & 0xff;
        payload_length = 8 + data_blocks * 4 * s->data_block_quadlets;
 
        trace_out_packet(s, cycle, buffer, payload_length, index);
index 679053d9c28f673f4d58549418d7ed118313b578..d2a3163097047a45bdf64a24bb3573f81e485f91 100644 (file)
@@ -18,8 +18,8 @@
  *     SYT_INTERVAL samples, with these two types alternating so that
  *     the overall sample rate comes out right.
  * @CIP_EMPTY_WITH_TAG0: Only for in-stream. Empty in-packets have TAG0.
- * @CIP_DBC_IS_END_EVENT: Only for in-stream. The value of dbc in an in-packet
- *     corresponds to the end of event in the packet. Out of IEC 61883.
+ * @CIP_DBC_IS_END_EVENT: The value of dbc in an packet 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.
  * @CIP_SKIP_DBC_ZERO_CHECK: Only for in-stream.  Packets with zero in dbc is