mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-23 18:07:03 +00:00
ALSA: fireworks/firewire-lib: Add a quirk for empty packet with TAG0
Fireworks has a quirk to transmit empty packets with TAG0. This commit adds handling this quirk for full duplex stream synchronization. Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
315fd41fe9
commit
7ab566453f
@ -815,7 +815,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);
|
||||
|
||||
@ -869,9 +869,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;
|
||||
|
||||
|
@ -18,11 +18,13 @@
|
||||
* the overall sample rate comes out right.
|
||||
* @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_SYNC_TO_DEVICE = 0x02,
|
||||
CIP_EMPTY_WITH_TAG0 = 0x04,
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -194,6 +194,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) {
|
||||
|
Loading…
Reference in New Issue
Block a user