diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2017-08-08 02:18:10 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-08-10 11:39:48 -0400 |
commit | 90be711e23f7c7ee7b3d6a6e5aa7ee9bab321f2e (patch) | |
tree | 12a3626aeaed3629553a6ceccac24a9be415daa0 /sound/soc/soc-pcm.c | |
parent | a0ac441152238c9b474bafa46940511d9b2e9c7e (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.c | 38 |
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: | |||
599 | out: | 603 | out: |
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); |