aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>2016-05-09 10:15:56 -0400
committerTakashi Iwai <tiwai@suse.de>2016-05-10 11:04:01 -0400
commit62f00e40b0718ebd8bd54fc7a9e89e873524d495 (patch)
treedbe5aa9b9639573711f5d522db448b1f3a2924fe
parent390a1512e6ccda2ec32ea1395814f36cf4d30e48 (diff)
ALSA: firewire-lib: enable the same feature as CIP_SKIP_INIT_DBC_CHECK 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 <o-takashi@sakamocchi.jp> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/firewire/amdtp-stream.c3
-rw-r--r--sound/firewire/amdtp-stream.h7
-rw-r--r--sound/firewire/bebob/bebob_stream.c2
-rw-r--r--sound/firewire/digi00x/amdtp-dot.c2
-rw-r--r--sound/firewire/oxfw/oxfw-stream.c3
5 files changed, 5 insertions, 12 deletions
diff --git a/sound/firewire/amdtp-stream.c b/sound/firewire/amdtp-stream.c
index 6db2a73d7140..830a95c0b0e4 100644
--- a/sound/firewire/amdtp-stream.c
+++ b/sound/firewire/amdtp-stream.c
@@ -723,8 +723,7 @@ int amdtp_stream_start(struct amdtp_stream *s, int channel, int speed)
723 goto err_unlock; 723 goto err_unlock;
724 } 724 }
725 725
726 if (s->direction == AMDTP_IN_STREAM && 726 if (s->direction == AMDTP_IN_STREAM)
727 s->flags & CIP_SKIP_INIT_DBC_CHECK)
728 s->data_block_counter = UINT_MAX; 727 s->data_block_counter = UINT_MAX;
729 else 728 else
730 s->data_block_counter = 0; 729 s->data_block_counter = 0;
diff --git a/sound/firewire/amdtp-stream.h b/sound/firewire/amdtp-stream.h
index da028b0afb48..349c405f3d99 100644
--- a/sound/firewire/amdtp-stream.h
+++ b/sound/firewire/amdtp-stream.h
@@ -24,8 +24,6 @@
24 * The value of data_block_quadlets is used instead of reported value. 24 * The value of data_block_quadlets is used instead of reported value.
25 * @CIP_SKIP_DBC_ZERO_CHECK: Only for in-stream. Packets with zero in dbc is 25 * @CIP_SKIP_DBC_ZERO_CHECK: Only for in-stream. Packets with zero in dbc is
26 * skipped for detecting discontinuity. 26 * skipped for detecting discontinuity.
27 * @CIP_SKIP_INIT_DBC_CHECK: Only for in-stream. The value of dbc in first
28 * packet is not continuous from an initial value.
29 * @CIP_EMPTY_HAS_WRONG_DBC: Only for in-stream. The value of dbc in empty 27 * @CIP_EMPTY_HAS_WRONG_DBC: Only for in-stream. The value of dbc in empty
30 * packet is wrong but the others are correct. 28 * packet is wrong but the others are correct.
31 * @CIP_JUMBO_PAYLOAD: Only for in-stream. The number of data blocks in an 29 * @CIP_JUMBO_PAYLOAD: Only for in-stream. The number of data blocks in an
@@ -39,9 +37,8 @@ enum cip_flags {
39 CIP_DBC_IS_END_EVENT = 0x04, 37 CIP_DBC_IS_END_EVENT = 0x04,
40 CIP_WRONG_DBS = 0x08, 38 CIP_WRONG_DBS = 0x08,
41 CIP_SKIP_DBC_ZERO_CHECK = 0x10, 39 CIP_SKIP_DBC_ZERO_CHECK = 0x10,
42 CIP_SKIP_INIT_DBC_CHECK = 0x20, 40 CIP_EMPTY_HAS_WRONG_DBC = 0x20,
43 CIP_EMPTY_HAS_WRONG_DBC = 0x40, 41 CIP_JUMBO_PAYLOAD = 0x40,
44 CIP_JUMBO_PAYLOAD = 0x80,
45}; 42};
46 43
47/** 44/**
diff --git a/sound/firewire/bebob/bebob_stream.c b/sound/firewire/bebob/bebob_stream.c
index 0141813815b3..4d3034a68bdf 100644
--- a/sound/firewire/bebob/bebob_stream.c
+++ b/sound/firewire/bebob/bebob_stream.c
@@ -526,8 +526,6 @@ int snd_bebob_stream_init_duplex(struct snd_bebob *bebob)
526 goto end; 526 goto end;
527 } 527 }
528 528
529 bebob->tx_stream.flags |= CIP_SKIP_INIT_DBC_CHECK;
530
531 /* 529 /*
532 * BeBoB v3 transfers packets with these qurks: 530 * BeBoB v3 transfers packets with these qurks:
533 * - In the beginning of streaming, the value of dbc is incremented 531 * - In the beginning of streaming, the value of dbc is incremented
diff --git a/sound/firewire/digi00x/amdtp-dot.c b/sound/firewire/digi00x/amdtp-dot.c
index 0ac92aba5bc1..b3cffd01a19f 100644
--- a/sound/firewire/digi00x/amdtp-dot.c
+++ b/sound/firewire/digi00x/amdtp-dot.c
@@ -421,7 +421,7 @@ int amdtp_dot_init(struct amdtp_stream *s, struct fw_unit *unit,
421 421
422 /* Use different mode between incoming/outgoing. */ 422 /* Use different mode between incoming/outgoing. */
423 if (dir == AMDTP_IN_STREAM) { 423 if (dir == AMDTP_IN_STREAM) {
424 flags = CIP_NONBLOCKING | CIP_SKIP_INIT_DBC_CHECK; 424 flags = CIP_NONBLOCKING;
425 process_data_blocks = process_tx_data_blocks; 425 process_data_blocks = process_tx_data_blocks;
426 } else { 426 } else {
427 flags = CIP_BLOCKING; 427 flags = CIP_BLOCKING;
diff --git a/sound/firewire/oxfw/oxfw-stream.c b/sound/firewire/oxfw/oxfw-stream.c
index 7cb5743c073b..d9361f352133 100644
--- a/sound/firewire/oxfw/oxfw-stream.c
+++ b/sound/firewire/oxfw/oxfw-stream.c
@@ -242,8 +242,7 @@ int snd_oxfw_stream_init_simplex(struct snd_oxfw *oxfw,
242 * blocks than IEC 61883-6 defines. 242 * blocks than IEC 61883-6 defines.
243 */ 243 */
244 if (stream == &oxfw->tx_stream) { 244 if (stream == &oxfw->tx_stream) {
245 oxfw->tx_stream.flags |= CIP_SKIP_INIT_DBC_CHECK | 245 oxfw->tx_stream.flags |= CIP_JUMBO_PAYLOAD;
246 CIP_JUMBO_PAYLOAD;
247 if (oxfw->wrong_dbs) 246 if (oxfw->wrong_dbs)
248 oxfw->tx_stream.flags |= CIP_WRONG_DBS; 247 oxfw->tx_stream.flags |= CIP_WRONG_DBS;
249 } 248 }