summaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-pcm.c
diff options
context:
space:
mode:
authorBenoit Cousson <bcousson@baylibre.com>2014-07-01 09:47:55 +0200
committerMark Brown <broonie@linaro.org>2014-07-01 18:20:07 +0100
commitc8dd1fec47d0b1875f292c40bed381b343e38b40 (patch)
tree1ae3ea4a2057e10fa8cb2a31404ce467b2f953e4 /sound/soc/soc-pcm.c
parent3f901a028feb916d17d6c01b9010f3f56f675d26 (diff)
downloadlinux-c8dd1fec47d0b1875f292c40bed381b343e38b40.tar.bz2
ASoC: pcm: Refactor soc_pcm_apply_msb for multicodecs
Refactor the function to facilitate the migration to multiple codecs. Fix a trailing space in the header as well. No functional change. Signed-off-by: Benoit Cousson <bcousson@baylibre.com> Signed-off-by: Mark Brown <broonie@linaro.org>
Diffstat (limited to 'sound/soc/soc-pcm.c')
-rw-r--r--sound/soc/soc-pcm.c35
1 files changed, 24 insertions, 11 deletions
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index 54d18f22a33e..320a904b6b69 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -7,7 +7,7 @@
* Copyright (C) 2010 Texas Instruments Inc.
*
* Authors: Liam Girdwood <lrg@ti.com>
- * Mark Brown <broonie@opensource.wolfsonmicro.com>
+ * Mark Brown <broonie@opensource.wolfsonmicro.com>
*
* This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the
@@ -284,15 +284,10 @@ static int sample_sizes[] = {
24, 32,
};
-static void soc_pcm_apply_msb(struct snd_pcm_substream *substream,
- struct snd_soc_dai *dai)
+static void soc_pcm_set_msb(struct snd_pcm_substream *substream,
+ struct snd_soc_dai *dai, int bits)
{
- int ret, i, bits;
-
- if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
- bits = dai->driver->playback.sig_bits;
- else
- bits = dai->driver->capture.sig_bits;
+ int ret, i;
if (!bits)
return;
@@ -310,6 +305,25 @@ static void soc_pcm_apply_msb(struct snd_pcm_substream *substream,
}
}
+static void soc_pcm_apply_msb(struct snd_pcm_substream *substream)
+{
+ struct snd_soc_pcm_runtime *rtd = substream->private_data;
+ struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
+ struct snd_soc_dai *codec_dai = rtd->codec_dai;
+ unsigned int bits = 0, cpu_bits;
+
+ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
+ bits = codec_dai->driver->playback.sig_bits;
+ cpu_bits = cpu_dai->driver->playback.sig_bits;
+ } else {
+ bits = codec_dai->driver->capture.sig_bits;
+ cpu_bits = cpu_dai->driver->capture.sig_bits;
+ }
+
+ soc_pcm_set_msb(substream, codec_dai, bits);
+ soc_pcm_set_msb(substream, cpu_dai, cpu_bits);
+}
+
static void soc_pcm_init_runtime_hw(struct snd_pcm_runtime *runtime,
struct snd_soc_pcm_stream *codec_stream,
struct snd_soc_pcm_stream *cpu_stream)
@@ -433,8 +447,7 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
goto config_err;
}
- soc_pcm_apply_msb(substream, codec_dai);
- soc_pcm_apply_msb(substream, cpu_dai);
+ soc_pcm_apply_msb(substream);
/* Symmetry only applies if we've already got an active stream. */
if (cpu_dai->active) {