ASoC: fsi: reduce runtime calculation by using pre-setting
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Fri, 3 Feb 2012 08:50:09 +0000 (00:50 -0800)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Fri, 3 Feb 2012 11:55:38 +0000 (11:55 +0000)
Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/sh/fsi.c

index 3241e5bdd54bd6f6210b0fb074d2078318296684..0d78740d0a6b3209f3696f448c0e1b3690d544ec 100644 (file)
@@ -167,6 +167,7 @@ struct fsi_stream {
        int buff_sample_pos;    /* sample position of ALSA buffer */
        int period_samples;     /* sample number / 1 period */
        int period_pos;         /* current period position */
+       int sample_width;       /* sample width */
 
        int uerr_num;
        int oerr_num;
@@ -406,6 +407,7 @@ static void fsi_stream_push(struct fsi_priv *fsi,
        io->buff_sample_pos     = 0;
        io->period_samples      = fsi_frame2sample(fsi, runtime->period_size);
        io->period_pos          = 0;
+       io->sample_width        = samples_to_bytes(runtime, 1);
        io->oerr_num    = -1; /* ignore 1st err */
        io->uerr_num    = -1; /* ignore 1st err */
        spin_unlock_irqrestore(&master->lock, flags);
@@ -431,6 +433,7 @@ static void fsi_stream_pop(struct fsi_priv *fsi, int is_play)
        io->buff_sample_pos     = 0;
        io->period_samples      = 0;
        io->period_pos          = 0;
+       io->sample_width        = 0;
        io->oerr_num    = 0;
        io->uerr_num    = 0;
        spin_unlock_irqrestore(&master->lock, flags);
@@ -752,7 +755,6 @@ static int fsi_fifo_data_ctrl(struct fsi_priv *fsi, int stream)
        int is_play = fsi_stream_is_play(stream);
        struct fsi_stream *io = fsi_get_stream(fsi, is_play);
        int sample_residues;
-       int sample_width;
        int samples;
        int samples_max;
        int over_period;
@@ -780,9 +782,6 @@ static int fsi_fifo_data_ctrl(struct fsi_priv *fsi, int stream)
                        io->buff_sample_pos = 0;
        }
 
-       /* get 1 sample data width */
-       sample_width = samples_to_bytes(runtime, 1);
-
        /* get number of residue samples */
        sample_residues = io->buff_sample_capa - io->buff_sample_pos;
 
@@ -798,7 +797,7 @@ static int fsi_fifo_data_ctrl(struct fsi_priv *fsi, int stream)
 
                samples = sample_residues;
 
-               switch (sample_width) {
+               switch (io->sample_width) {
                case 2:
                        fn = fsi_dma_soft_push16;
                        break;
@@ -818,7 +817,7 @@ static int fsi_fifo_data_ctrl(struct fsi_priv *fsi, int stream)
                samples_max = sample_residues;
                samples     = fsi_get_current_fifo_samples(fsi, is_play);
 
-               switch (sample_width) {
+               switch (io->sample_width) {
                case 2:
                        fn = fsi_dma_soft_pop16;
                        break;