Skip to content

Commit

Permalink
ALSA: firewire-lib: enable the same feature as CIP_SKIP_INIT_DBC_CHEC…
Browse files Browse the repository at this point in the history
…K flag

In former commit, drivers in ALSA firewire stack always starts IT context
before IR context. If IR context starts after packets are transmitted by
peer unit, packet discontinuity may be detected because the context starts
in the middle of packet streaming. This situation is rare because IT
context usually starts immediately. However, it's better to solve this
issue. This is suppressed with CIP_SKIP_INIT_DBC_CHECK flag.

This commit enables the same feature as CIP_SKIP_INIT_DBC_CHECK.

Signed-off-by: Takashi Sakamoto <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
takaswie authored and tiwai committed May 10, 2016
1 parent 390a151 commit 62f00e4
Show file tree
Hide file tree
Showing 5 changed files with 5 additions and 12 deletions.
3 changes: 1 addition & 2 deletions sound/firewire/amdtp-stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -723,8 +723,7 @@ int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed)
goto err_unlock;
}

if (s->direction == AMDTP_IN_STREAM &&
s->flags & CIP_SKIP_INIT_DBC_CHECK)
if (s->direction == AMDTP_IN_STREAM)
s->data_block_counter = UINT_MAX;
else
s->data_block_counter = 0;
Expand Down
7 changes: 2 additions & 5 deletions sound/firewire/amdtp-stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@
* 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
* skipped for detecting discontinuity.
* @CIP_SKIP_INIT_DBC_CHECK: Only for in-stream. The value of dbc in first
* packet is not continuous from an initial value.
* @CIP_EMPTY_HAS_WRONG_DBC: Only for in-stream. The value of dbc in empty
* packet is wrong but the others are correct.
* @CIP_JUMBO_PAYLOAD: Only for in-stream. The number of data blocks in an
Expand All @@ -39,9 +37,8 @@ enum cip_flags {
CIP_DBC_IS_END_EVENT = 0x04,
CIP_WRONG_DBS = 0x08,
CIP_SKIP_DBC_ZERO_CHECK = 0x10,
CIP_SKIP_INIT_DBC_CHECK = 0x20,
CIP_EMPTY_HAS_WRONG_DBC = 0x40,
CIP_JUMBO_PAYLOAD = 0x80,
CIP_EMPTY_HAS_WRONG_DBC = 0x20,
CIP_JUMBO_PAYLOAD = 0x40,
};

/**
Expand Down
2 changes: 0 additions & 2 deletions sound/firewire/bebob/bebob_stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -526,8 +526,6 @@ int snd_bebob_stream_init_duplex(struct snd_bebob *bebob)
goto end;
}

bebob->tx_stream.flags |= CIP_SKIP_INIT_DBC_CHECK;

/*
* BeBoB v3 transfers packets with these qurks:
* - In the beginning of streaming, the value of dbc is incremented
Expand Down
2 changes: 1 addition & 1 deletion sound/firewire/digi00x/amdtp-dot.c
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,7 @@ int amdtp_dot_init(struct amdtp_stream *s, struct fw_unit *unit,

/* Use different mode between incoming/outgoing. */
if (dir == AMDTP_IN_STREAM) {
flags = CIP_NONBLOCKING | CIP_SKIP_INIT_DBC_CHECK;
flags = CIP_NONBLOCKING;
process_data_blocks = process_tx_data_blocks;
} else {
flags = CIP_BLOCKING;
Expand Down
3 changes: 1 addition & 2 deletions sound/firewire/oxfw/oxfw-stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -242,8 +242,7 @@ int snd_oxfw_stream_init_simplex(struct snd_oxfw *oxfw,
* blocks than IEC 61883-6 defines.
*/
if (stream == &oxfw->tx_stream) {
oxfw->tx_stream.flags |= CIP_SKIP_INIT_DBC_CHECK |
CIP_JUMBO_PAYLOAD;
oxfw->tx_stream.flags |= CIP_JUMBO_PAYLOAD;
if (oxfw->wrong_dbs)
oxfw->tx_stream.flags |= CIP_WRONG_DBS;
}
Expand Down

0 comments on commit 62f00e4

Please sign in to comment.