summaryrefslogtreecommitdiffstats
path: root/sound/soc/soc-pcm.c
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2017-08-08 02:18:10 -0400
committerMark Brown <broonie@kernel.org>2017-08-10 11:39:48 -0400
commit90be711e23f7c7ee7b3d6a6e5aa7ee9bab321f2e (patch)
tree12a3626aeaed3629553a6ceccac24a9be415daa0 /sound/soc/soc-pcm.c
parenta0ac441152238c9b474bafa46940511d9b2e9c7e (diff)
ASoC: use snd_soc_rtdcom_add() and convert to consistent operation
Basically, current ALSA SoC framework is based on CPU/Codec/Platform, but its operation doesn't have consistent. Thus, source code was unreadable, and difficult to understand. This patch connects each component (= CPU/Codec/Platform) to rtd by using snd_soc_rtdcom_add(), and convert uneven operations to consistent operation. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Tested-by: Arnaud Pouliquen <arnaud.pouliquen@st.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/soc-pcm.c')
-rw-r--r--sound/soc/soc-pcm.c38
1 files changed, 19 insertions, 19 deletions
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
index dcc5ece08668..aa4c02de9c61 100644
--- a/sound/soc/soc-pcm.c
+++ b/sound/soc/soc-pcm.c
@@ -450,6 +450,8 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
450 struct snd_soc_pcm_runtime *rtd = substream->private_data; 450 struct snd_soc_pcm_runtime *rtd = substream->private_data;
451 struct snd_pcm_runtime *runtime = substream->runtime; 451 struct snd_pcm_runtime *runtime = substream->runtime;
452 struct snd_soc_platform *platform = rtd->platform; 452 struct snd_soc_platform *platform = rtd->platform;
453 struct snd_soc_component *component;
454 struct snd_soc_rtdcom_list *rtdcom;
453 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 455 struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
454 struct snd_soc_dai *codec_dai; 456 struct snd_soc_dai *codec_dai;
455 const char *codec_dai_name = "multicodec"; 457 const char *codec_dai_name = "multicodec";
@@ -458,10 +460,12 @@ static int soc_pcm_open(struct snd_pcm_substream *substream)
458 pinctrl_pm_select_default_state(cpu_dai->dev); 460 pinctrl_pm_select_default_state(cpu_dai->dev);
459 for (i = 0; i < rtd->num_codecs; i++) 461 for (i = 0; i < rtd->num_codecs; i++)
460 pinctrl_pm_select_default_state(rtd->codec_dais[i]->dev); 462 pinctrl_pm_select_default_state(rtd->codec_dais[i]->dev);
461 pm_runtime_get_sync(cpu_dai->dev); 463
462 for (i = 0; i < rtd->num_codecs; i++) 464 for_each_rtdcom(rtd, rtdcom) {
463 pm_runtime_get_sync(rtd->codec_dais[i]->dev); 465 component = rtdcom->component;
464 pm_runtime_get_sync(platform->dev); 466
467 pm_runtime_get_sync(component->dev);
468 }
465 469
466 mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass); 470 mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass);
467 471
@@ -599,15 +603,13 @@ platform_err:
599out: 603out:
600 mutex_unlock(&rtd->pcm_mutex); 604 mutex_unlock(&rtd->pcm_mutex);
601 605
602 pm_runtime_mark_last_busy(platform->dev); 606 for_each_rtdcom(rtd, rtdcom) {
603 pm_runtime_put_autosuspend(platform->dev); 607 component = rtdcom->component;
604 for (i = 0; i < rtd->num_codecs; i++) { 608
605 pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev); 609 pm_runtime_mark_last_busy(component->dev);
606 pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev); 610 pm_runtime_put_autosuspend(component->dev);
607 } 611 }
608 612
609 pm_runtime_mark_last_busy(cpu_dai->dev);
610 pm_runtime_put_autosuspend(cpu_dai->dev);
611 for (i = 0; i < rtd->num_codecs; i++) { 613 for (i = 0; i < rtd->num_codecs; i++) {
612 if (!rtd->codec_dais[i]->active) 614 if (!rtd->codec_dais[i]->active)
613 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); 615 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev);
@@ -655,6 +657,8 @@ static int soc_pcm_close(struct snd_pcm_substream *substream)
655{ 657{
656 struct snd_soc_pcm_runtime *rtd = substream->private_data; 658 struct snd_soc_pcm_runtime *rtd = substream->private_data;
657 struct snd_soc_platform *platform = rtd->platform; 659 struct snd_soc_platform *platform = rtd->platform;
660 struct snd_soc_component *component;
661 struct snd_soc_rtdcom_list *rtdcom;
658 struct snd_soc_dai *cpu_dai = rtd->cpu_dai; 662 struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
659 struct snd_soc_dai *codec_dai; 663 struct snd_soc_dai *codec_dai;
660 int i; 664 int i;
@@ -711,17 +715,13 @@ static int soc_pcm_close(struct snd_pcm_substream *substream)
711 715
712 mutex_unlock(&rtd->pcm_mutex); 716 mutex_unlock(&rtd->pcm_mutex);
713 717
714 pm_runtime_mark_last_busy(platform->dev); 718 for_each_rtdcom(rtd, rtdcom) {
715 pm_runtime_put_autosuspend(platform->dev); 719 component = rtdcom->component;
716 720
717 for (i = 0; i < rtd->num_codecs; i++) { 721 pm_runtime_mark_last_busy(component->dev);
718 pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev); 722 pm_runtime_put_autosuspend(component->dev);
719 pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev);
720 } 723 }
721 724
722 pm_runtime_mark_last_busy(cpu_dai->dev);
723 pm_runtime_put_autosuspend(cpu_dai->dev);
724
725 for (i = 0; i < rtd->num_codecs; i++) { 725 for (i = 0; i < rtd->num_codecs; i++) {
726 if (!rtd->codec_dais[i]->active) 726 if (!rtd->codec_dais[i]->active)
727 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); 727 pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev);