]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
ASoC: soc-dai: add snd_soc_dai_startup()
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Mon, 22 Jul 2019 01:33:32 +0000 (10:33 +0900)
committerMark Brown <broonie@kernel.org>
Tue, 23 Jul 2019 17:14:16 +0000 (18:14 +0100)
Current ALSA SoC is directly using dai->driver->ops->xxx,
thus, it has deep nested bracket, and it makes code unreadable.
This patch adds new snd_soc_dai_startup() and use it.

Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Link: https://lore.kernel.org/r/87wogahn4i.wl-kuninori.morimoto.gx@renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc-dai.h
sound/soc/soc-dai.c
sound/soc/soc-dapm.c
sound/soc/soc-pcm.c

index 5222b6a758f2d58360ad5c6998b84e6bd15d7a8b..0d16c5bb20bb727bb21c04ff103bf20b2c15f970 100644 (file)
@@ -150,6 +150,8 @@ int snd_soc_dai_hw_params(struct snd_soc_dai *dai,
                          struct snd_pcm_hw_params *params);
 void snd_soc_dai_hw_free(struct snd_soc_dai *dai,
                         struct snd_pcm_substream *substream);
+int snd_soc_dai_startup(struct snd_soc_dai *dai,
+                       struct snd_pcm_substream *substream);
 
 struct snd_soc_dai_ops {
        /*
index 39a685e6acd5b95dfc2c8104c8cb9f3c07d5ee67..6e196636e42fa3b3926d4b226805aa3ad6a263ae 100644 (file)
@@ -289,3 +289,14 @@ void snd_soc_dai_hw_free(struct snd_soc_dai *dai,
        if (dai->driver->ops->hw_free)
                dai->driver->ops->hw_free(substream, dai);
 }
+
+int snd_soc_dai_startup(struct snd_soc_dai *dai,
+                       struct snd_pcm_substream *substream)
+{
+       int ret = 0;
+
+       if (dai->driver->ops->startup)
+               ret = dai->driver->ops->startup(substream, dai);
+
+       return ret;
+}
index 0783b05133adc77ddebeff03b1888d3aad35d159..71bfd049480ae913f2139914c2b77c2355d0a142 100644 (file)
@@ -3828,15 +3828,11 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
                snd_soc_dapm_widget_for_each_source_path(w, path) {
                        source = path->source->priv;
 
-                       if (source->driver->ops->startup) {
-                               ret = source->driver->ops->startup(&substream,
-                                                                  source);
-                               if (ret < 0) {
-                                       dev_err(source->dev,
-                                               "ASoC: startup() failed: %d\n",
-                                               ret);
-                                       goto out;
-                               }
+                       ret = snd_soc_dai_startup(source, &substream);
+                       if (ret < 0) {
+                               dev_err(source->dev,
+                                       "ASoC: startup() failed: %d\n", ret);
+                               goto out;
                        }
                        source->active++;
                        ret = snd_soc_dai_hw_params(source, &substream, params);
@@ -3850,15 +3846,11 @@ static int snd_soc_dai_link_event(struct snd_soc_dapm_widget *w,
                snd_soc_dapm_widget_for_each_sink_path(w, path) {
                        sink = path->sink->priv;
 
-                       if (sink->driver->ops->startup) {
-                               ret = sink->driver->ops->startup(&substream,
-                                                                sink);
-                               if (ret < 0) {
-                                       dev_err(sink->dev,
-                                               "ASoC: startup() failed: %d\n",
-                                               ret);
-                                       goto out;
-                               }
+                       ret = snd_soc_dai_startup(sink, &substream);
+                       if (ret < 0) {
+                               dev_err(sink->dev,
+                                       "ASoC: startup() failed: %d\n", ret);
+                               goto out;
                        }
                        sink->active++;
                        ret = snd_soc_dai_hw_params(sink, &substream, params);
index 58fc4e98ab59c4c6026ab6054b02d7694ff5f4be..9c8713a3eef190039d05803bd5bf77675bac35a1 100644 (file)
@@ -535,13 +535,11 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
        mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass);
 
        /* startup the audio subsystem */
-       if (cpu_dai->driver->ops->startup) {
-               ret = cpu_dai->driver->ops->startup(substream, cpu_dai);
-               if (ret < 0) {
-                       dev_err(cpu_dai->dev, "ASoC: can't open interface"
-                               " %s: %d\n", cpu_dai->name, ret);
-                       goto out;
-               }
+       ret = snd_soc_dai_startup(cpu_dai, substream);
+       if (ret < 0) {
+               dev_err(cpu_dai->dev, "ASoC: can't open interface %s: %d\n",
+                       cpu_dai->name, ret);
+               goto out;
        }
 
        ret = soc_pcm_components_open(substream, &component);
@@ -549,15 +547,12 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
                goto component_err;
 
        for_each_rtd_codec_dai(rtd, i, codec_dai) {
-               if (codec_dai->driver->ops->startup) {
-                       ret = codec_dai->driver->ops->startup(substream,
-                                                             codec_dai);
-                       if (ret < 0) {
-                               dev_err(codec_dai->dev,
-                                       "ASoC: can't open codec %s: %d\n",
-                                       codec_dai->name, ret);
-                               goto codec_dai_err;
-                       }
+               ret = snd_soc_dai_startup(codec_dai, substream);
+               if (ret < 0) {
+                       dev_err(codec_dai->dev,
+                               "ASoC: can't open codec %s: %d\n",
+                               codec_dai->name, ret);
+                       goto codec_dai_err;
                }
 
                if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)