Skip to content

Commit

Permalink
ALSA: firewire-lib: add syt_override member for some protocols
Browse files Browse the repository at this point in the history
Some protocols don't use syt field of CIP header to represent
presentation timestamp. For such protocol, ALSA IEC 61883-1/6
packet streaming engine uses a pointer into local variable for
the value of syt to call data block processing layer. However,
it can decide the value when initializing packet streaming
layer.

This commit adds 'syt_override' member for packet streaming
layer.

Signed-off-by: Takashi Sakamoto <[email protected]>
Signed-off-by: Takashi Iwai <[email protected]>
  • Loading branch information
takaswie authored and tiwai committed Jul 22, 2019
1 parent a35463d commit 3baf305
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 3 deletions.
6 changes: 6 additions & 0 deletions sound/firewire/amdtp-stream.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,9 @@ int amdtp_stream_init(struct amdtp_stream *s, struct fw_unit *unit,
s->fmt = fmt;
s->process_data_blocks = process_data_blocks;

if (dir == AMDTP_OUT_STREAM)
s->ctx_data.rx.syt_override = -1;

return 0;
}
EXPORT_SYMBOL(amdtp_stream_init);
Expand Down Expand Up @@ -717,6 +720,9 @@ static void out_stream_callback(struct fw_iso_context *context, u32 tstamp,
if (s->flags & CIP_DBC_IS_END_EVENT)
dbc = (dbc + data_blocks) & 0xff;

if (s->ctx_data.rx.syt_override >= 0)
syt = s->ctx_data.rx.syt_override;

build_it_pkt_header(s, cycle, &template.params, data_blocks,
dbc, syt, i);

Expand Down
1 change: 1 addition & 0 deletions sound/firewire/amdtp-stream.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ struct amdtp_stream {

// To generate CIP header.
unsigned int fdf;
int syt_override;
} rx;
} ctx_data;

Expand Down
8 changes: 7 additions & 1 deletion sound/firewire/motu/amdtp-motu.c
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,13 @@ int amdtp_motu_init(struct amdtp_stream *s, struct fw_unit *unit,
return err;

s->sph = 1;
s->ctx_data.rx.fdf = MOTU_FDF_AM824;

if (dir == AMDTP_OUT_STREAM) {
// Use fixed value for FDF field.
s->ctx_data.rx.fdf = MOTU_FDF_AM824;
// Not used.
s->ctx_data.rx.syt_override = 0xffff;
}

return 0;
}
8 changes: 6 additions & 2 deletions sound/firewire/tascam/amdtp-tascam.c
Original file line number Diff line number Diff line change
Expand Up @@ -220,8 +220,12 @@ int amdtp_tscm_init(struct amdtp_stream *s, struct fw_unit *unit,
if (err < 0)
return 0;

/* Use fixed value for FDF field. */
s->ctx_data.rx.fdf = 0x00;
if (dir == AMDTP_OUT_STREAM) {
// Use fixed value for FDF field.
s->ctx_data.rx.fdf = 0x00;
// Not used.
s->ctx_data.rx.syt_override = 0x0000;
}

/* This protocol uses fixed number of data channels for PCM samples. */
p = s->protocol;
Expand Down

0 comments on commit 3baf305

Please sign in to comment.