[alsa-devel] [PATCH 19/44] fireworks/firewire-lib: Add a quirk for empty packet with TAG0
Takashi Sakamoto
o-takashi at sakamocchi.jp
Fri Mar 21 12:10:04 CET 2014
Fireworks has a quirk to tranmit empty packets with TAG0. This commit
adds handling this quirk for full duplex stream synchronization.
Signed-off-by: Takashi Sakamoto <o-takashi at sakamocchi.jp>
---
sound/firewire/amdtp.c | 9 ++++++---
sound/firewire/amdtp.h | 2 ++
sound/firewire/fireworks/fireworks_stream.c | 2 ++
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/sound/firewire/amdtp.c b/sound/firewire/amdtp.c
index ef43b93..820f7c7 100644
--- a/sound/firewire/amdtp.c
+++ b/sound/firewire/amdtp.c
@@ -890,7 +890,7 @@ int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed)
};
unsigned int header_size;
enum dma_data_direction dir;
- int type, err;
+ int type, tag, err;
mutex_lock(&s->mutex);
@@ -944,9 +944,12 @@ int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed)
} while (s->packet_index > 0);
/* NOTE: TAG1 matches CIP. This just affects in stream. */
+ tag = FW_ISO_CONTEXT_MATCH_TAG1;
+ if (s->flags & CIP_EMPTY_WITH_TAG0)
+ tag |= FW_ISO_CONTEXT_MATCH_TAG0;
+
s->callbacked = false;
- err = fw_iso_context_start(s->context, -1, 0,
- FW_ISO_CONTEXT_MATCH_TAG1);
+ err = fw_iso_context_start(s->context, -1, 0, tag);
if (err < 0)
goto err_context;
diff --git a/sound/firewire/amdtp.h b/sound/firewire/amdtp.h
index 67c2f97..523883c 100644
--- a/sound/firewire/amdtp.h
+++ b/sound/firewire/amdtp.h
@@ -22,12 +22,14 @@
* Requires blocking mode and SYT_INTERVAL-aligned PCM buffer size.
* @CIP_SYNC_TO_DEVICE: In sync to device mode, time stamp in out packets is
* generated by in packets. Defaultly this driver generates timestamp.
+ * @CIP_EMPTY_WITH_TAG0: Only for in-stream. Empty in-packets have TAG0.
*/
enum cip_flags {
CIP_NONBLOCKING = 0x00,
CIP_BLOCKING = 0x01,
CIP_HI_DUALWIRE = 0x02,
CIP_SYNC_TO_DEVICE = 0x04,
+ CIP_EMPTY_WITH_TAG0 = 0x08,
};
/**
diff --git a/sound/firewire/fireworks/fireworks_stream.c b/sound/firewire/fireworks/fireworks_stream.c
index f41aee4..15b8a8b 100644
--- a/sound/firewire/fireworks/fireworks_stream.c
+++ b/sound/firewire/fireworks/fireworks_stream.c
@@ -181,6 +181,8 @@ int snd_efw_stream_init_duplex(struct snd_efw *efw)
err = init_stream(efw, &efw->tx_stream);
if (err < 0)
goto end;
+ /* Fireworks transmits NODATA packets with TAG0. */
+ efw->tx_stream.flags |= CIP_EMPTY_WITH_TAG0;
err = init_stream(efw, &efw->rx_stream);
if (err < 0)
--
1.8.3.2
More information about the Alsa-devel
mailing list