ALSA: firewire-lib: simplify function to calculate the number of data blocks
authorTakashi Sakamoto <o-takashi@sakamocchi.jp>
Fri, 22 May 2015 14:00:51 +0000 (23:00 +0900)
committerTakashi Iwai <tiwai@suse.de>
Sat, 23 May 2015 07:13:19 +0000 (09:13 +0200)
This function is called according to conditions between the value of
syt and streaming mode(blocking or non-blocking).

To simplify caller's work, this commit push these conditions to the
function.

Signed-off-by: Takashi Sakamoto <o-takashi@sakamocchi.jp>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/firewire/amdtp.c

index a397004..d9af99b 100644 (file)
@@ -321,17 +321,25 @@ void amdtp_stream_pcm_prepare(struct amdtp_stream *s)
 }
 EXPORT_SYMBOL(amdtp_stream_pcm_prepare);
 
-static unsigned int calculate_data_blocks(struct amdtp_stream *s)
+static unsigned int calculate_data_blocks(struct amdtp_stream *s,
+                                         unsigned int syt)
 {
        unsigned int phase, data_blocks;
 
-       if (s->flags & CIP_BLOCKING)
-               data_blocks = s->syt_interval;
-       else if (!cip_sfc_is_base_44100(s->sfc)) {
-               /* Sample_rate / 8000 is an integer, and precomputed. */
-               data_blocks = s->data_block_state;
+       /* Blocking mode. */
+       if (s->flags & CIP_BLOCKING) {
+               /* This module generate empty packet for 'no data'. */
+               if (syt == CIP_SYT_NO_INFO)
+                       data_blocks = 0;
+               else
+                       data_blocks = s->syt_interval;
+       /* Non-blocking mode. */
        } else {
-               phase = s->data_block_state;
+               if (!cip_sfc_is_base_44100(s->sfc)) {
+                       /* Sample_rate / 8000 is an integer, and precomputed. */
+                       data_blocks = s->data_block_state;
+               } else {
+                       phase = s->data_block_state;
 
                /*
                 * This calculates the number of data blocks per packet so that
@@ -341,16 +349,17 @@ static unsigned int calculate_data_blocks(struct amdtp_stream *s)
                 *    as possible in the sequence (to prevent underruns of the
                 *    device's buffer).
                 */
-               if (s->sfc == CIP_SFC_44100)
-                       /* 6 6 5 6 5 6 5 ... */
-                       data_blocks = 5 + ((phase & 1) ^
-                                          (phase == 0 || phase >= 40));
-               else
-                       /* 12 11 11 11 11 ... or 23 22 22 22 22 ... */
-                       data_blocks = 11 * (s->sfc >> 1) + (phase == 0);
-               if (++phase >= (80 >> (s->sfc >> 1)))
-                       phase = 0;
-               s->data_block_state = phase;
+                       if (s->sfc == CIP_SFC_44100)
+                               /* 6 6 5 6 5 6 5 ... */
+                               data_blocks = 5 + ((phase & 1) ^
+                                                  (phase == 0 || phase >= 40));
+                       else
+                               /* 12 11 11 11 11 ... or 23 22 22 22 22 ... */
+                               data_blocks = 11 * (s->sfc >> 1) + (phase == 0);
+                       if (++phase >= (80 >> (s->sfc >> 1)))
+                               phase = 0;
+                       s->data_block_state = phase;
+               }
        }
 
        return data_blocks;
@@ -647,11 +656,7 @@ static void handle_out_packet(struct amdtp_stream *s, unsigned int syt)
        if (s->packet_index < 0)
                return;
 
-       /* this module generate empty packet for 'no data' */
-       if (!(s->flags & CIP_BLOCKING) || (syt != CIP_SYT_NO_INFO))
-               data_blocks = calculate_data_blocks(s);
-       else
-               data_blocks = 0;
+       data_blocks = calculate_data_blocks(s, syt);
 
        buffer = s->buffer.packets[s->packet_index].buffer;
        buffer[0] = cpu_to_be32(ACCESS_ONCE(s->source_node_id_field) |