summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2019-07-26 00:50:19 -0400
committerMark Brown <broonie@kernel.org>2019-08-05 11:18:57 -0400
commit245c539a1206d74e8508a07550fb7c99d0817b8c (patch)
treeaba4092dbe5a3bba94a19e1f4f4542ba7b6ece27
parent6d53723380ed73a2ced648d6e92774b39e5af1bd (diff)
ASoC: soc-component: add snd_soc_component_hw_params()
Current ALSA SoC is directly using component->driver->ops->xxx, thus, it is deep nested, and makes code difficult to read, and is not good for encapsulation. This patch adds new snd_soc_component_hw_params() and use it. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/87blxh5rnf.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r--include/sound/soc-component.h3
-rw-r--r--sound/soc/soc-component.c11
-rw-r--r--sound/soc/soc-pcm.c6
3 files changed, 15 insertions, 5 deletions
diff --git a/include/sound/soc-component.h b/include/sound/soc-component.h
index ff8233014444..778a6e7d352d 100644
--- a/include/sound/soc-component.h
+++ b/include/sound/soc-component.h
@@ -345,5 +345,8 @@ int snd_soc_component_close(struct snd_soc_component *component,
345 struct snd_pcm_substream *substream); 345 struct snd_pcm_substream *substream);
346int snd_soc_component_prepare(struct snd_soc_component *component, 346int snd_soc_component_prepare(struct snd_soc_component *component,
347 struct snd_pcm_substream *substream); 347 struct snd_pcm_substream *substream);
348int snd_soc_component_hw_params(struct snd_soc_component *component,
349 struct snd_pcm_substream *substream,
350 struct snd_pcm_hw_params *params);
348 351
349#endif /* __SOC_COMPONENT_H */ 352#endif /* __SOC_COMPONENT_H */
diff --git a/sound/soc/soc-component.c b/sound/soc/soc-component.c
index 733d7139d875..7b6456370da5 100644
--- a/sound/soc/soc-component.c
+++ b/sound/soc/soc-component.c
@@ -315,3 +315,14 @@ int snd_soc_component_prepare(struct snd_soc_component *component,
315 315
316 return 0; 316 return 0;
317} 317}
318
319int snd_soc_component_hw_params(struct snd_soc_component *component,
320 struct snd_pcm_substream *substream,
321 struct snd_pcm_hw_params *params)
322{
323 if (component->driver->ops &&
324 component->driver->ops->hw_params)
325 return component->driver->ops->hw_params(substream, params);
326
327 return 0;
328}
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index c7fee67bc0dc..8be1d22dc87a 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -951,11 +951,7 @@ static int soc_pcm_hw_params(struct snd_pcm_substream *substream,
951 for_each_rtdcom(rtd, rtdcom) { 951 for_each_rtdcom(rtd, rtdcom) {
952 component = rtdcom->component; 952 component = rtdcom->component;
953 953
954 if (!component->driver->ops || 954 ret = snd_soc_component_hw_params(component, substream, params);
955 !component->driver->ops->hw_params)
956 continue;
957
958 ret = component->driver->ops->hw_params(substream, params);
959 if (ret < 0) { 955 if (ret < 0) {
960 dev_err(component->dev, 956 dev_err(component->dev,
961 "ASoC: %s hw params failed: %d\n", 957 "ASoC: %s hw params failed: %d\n",