OSDN Git Service

ALSA: firewire-lib: code refactoring for transfer delay
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Sat, 22 May 2021 01:33:03 +0000 (10:33 +0900)
committerTakashi Iwai <tiwai@suse.de>
Sat, 22 May 2021 06:48:06 +0000 (08:48 +0200)
In later commit, transfer delay is used in both IR and IT contexts. This
commit refactors regardless of transfer delay.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Link: https://lore.kernel.org/r/20210522013303.49596-7-o-takashi@sakamocchi.jp
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/amdtp-stream.c
sound/firewire/amdtp-stream.h

index 2620951..6dceb8c 100644 (file)
@@ -294,17 +294,11 @@ int amdtp_stream_set_parameters(struct amdtp_stream *s, unsigned int rate,
        s->syt_interval = amdtp_syt_intervals[sfc];
 
        // default buffering in the device.
-       if (s->direction == AMDTP_OUT_STREAM) {
-               s->ctx_data.rx.transfer_delay =
-                                       TRANSFER_DELAY_TICKS - TICKS_PER_CYCLE;
-
-               if (s->flags & CIP_BLOCKING) {
-                       // additional buffering needed to adjust for no-data
-                       // packets.
-                       s->ctx_data.rx.transfer_delay +=
-                               TICKS_PER_SECOND * s->syt_interval / rate;
-               }
-       }
+       s->transfer_delay = TRANSFER_DELAY_TICKS - TICKS_PER_CYCLE;
+
+       // additional buffering needed to adjust for no-data packets.
+       if (s->flags & CIP_BLOCKING)
+               s->transfer_delay += TICKS_PER_SECOND * s->syt_interval / rate;
 
        return 0;
 }
@@ -897,12 +891,10 @@ static void generate_pkt_descs(struct amdtp_stream *s, const __be32 *ctx_header,
 
                desc->cycle = compute_ohci_it_cycle(*ctx_header, s->queue_size);
 
-               if (aware_syt && seq->syt_offset != CIP_SYT_NO_INFO) {
-                       desc->syt = compute_syt(seq->syt_offset, desc->cycle,
-                                               s->ctx_data.rx.transfer_delay);
-               } else {
+               if (aware_syt && seq->syt_offset != CIP_SYT_NO_INFO)
+                       desc->syt = compute_syt(seq->syt_offset, desc->cycle, s->transfer_delay);
+               else
                        desc->syt = CIP_SYT_NO_INFO;
-               }
 
                desc->data_blocks = seq->data_blocks;
 
index fc653fe..467d502 100644 (file)
@@ -140,15 +140,13 @@ struct amdtp_stream {
                        unsigned int dbc_interval;
                } tx;
                struct {
-                       // To calculate CIP data blocks and tstamp.
-                       unsigned int transfer_delay;
-
                        // To generate CIP header.
                        unsigned int fdf;
 
                        // To generate constant hardware IRQ.
                        unsigned int event_count;
 
+                       // To calculate CIP data blocks and tstamp.
                        struct {
                                struct seq_desc *descs;
                                unsigned int size;
@@ -169,7 +167,8 @@ struct amdtp_stream {
        unsigned int sph;
        unsigned int fmt;
 
-       /* Internal flags. */
+       // Internal flags.
+       unsigned int transfer_delay;
        enum cip_sfc sfc;
        unsigned int syt_interval;