diff options
author | Mark Brown <broonie@kernel.org> | 2017-09-01 07:12:18 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-09-01 07:12:18 -0400 |
commit | 39e0a0ae6957a7eafcd3245f45f40bf822e49812 (patch) | |
tree | bac0168f535ba57ea0a9804b458665d664581d0e /sound/soc/soc-pcm.c | |
parent | 0314f6947c5132c63413855c34d8cff22e95ae2b (diff) | |
parent | 88c27465dc7e3f11c43de295f623c44f593a0912 (diff) |
Merge remote-tracking branch 'asoc/topic/core' into asoc-next
Diffstat (limited to 'sound/soc/soc-pcm.c')
-rw-r--r-- | sound/soc/soc-pcm.c | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c index 7d3859e1a7b9..94b88b897c3b 100644 --- a/sound/soc/soc-pcm.c +++ b/sound/soc/soc-pcm.c | |||
@@ -454,6 +454,8 @@ static int soc_pcm_open(struct snd_pcm_substream *substream) | |||
454 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 454 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
455 | struct snd_pcm_runtime *runtime = substream->runtime; | 455 | struct snd_pcm_runtime *runtime = substream->runtime; |
456 | struct snd_soc_platform *platform = rtd->platform; | 456 | struct snd_soc_platform *platform = rtd->platform; |
457 | struct snd_soc_component *component; | ||
458 | struct snd_soc_rtdcom_list *rtdcom; | ||
457 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 459 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
458 | struct snd_soc_dai *codec_dai; | 460 | struct snd_soc_dai *codec_dai; |
459 | const char *codec_dai_name = "multicodec"; | 461 | const char *codec_dai_name = "multicodec"; |
@@ -462,10 +464,12 @@ static int soc_pcm_open(struct snd_pcm_substream *substream) | |||
462 | pinctrl_pm_select_default_state(cpu_dai->dev); | 464 | pinctrl_pm_select_default_state(cpu_dai->dev); |
463 | for (i = 0; i < rtd->num_codecs; i++) | 465 | for (i = 0; i < rtd->num_codecs; i++) |
464 | pinctrl_pm_select_default_state(rtd->codec_dais[i]->dev); | 466 | pinctrl_pm_select_default_state(rtd->codec_dais[i]->dev); |
465 | pm_runtime_get_sync(cpu_dai->dev); | 467 | |
466 | for (i = 0; i < rtd->num_codecs; i++) | 468 | for_each_rtdcom(rtd, rtdcom) { |
467 | pm_runtime_get_sync(rtd->codec_dais[i]->dev); | 469 | component = rtdcom->component; |
468 | pm_runtime_get_sync(platform->dev); | 470 | |
471 | pm_runtime_get_sync(component->dev); | ||
472 | } | ||
469 | 473 | ||
470 | mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass); | 474 | mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass); |
471 | 475 | ||
@@ -603,15 +607,13 @@ platform_err: | |||
603 | out: | 607 | out: |
604 | mutex_unlock(&rtd->pcm_mutex); | 608 | mutex_unlock(&rtd->pcm_mutex); |
605 | 609 | ||
606 | pm_runtime_mark_last_busy(platform->dev); | 610 | for_each_rtdcom(rtd, rtdcom) { |
607 | pm_runtime_put_autosuspend(platform->dev); | 611 | component = rtdcom->component; |
608 | for (i = 0; i < rtd->num_codecs; i++) { | 612 | |
609 | pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev); | 613 | pm_runtime_mark_last_busy(component->dev); |
610 | pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev); | 614 | pm_runtime_put_autosuspend(component->dev); |
611 | } | 615 | } |
612 | 616 | ||
613 | pm_runtime_mark_last_busy(cpu_dai->dev); | ||
614 | pm_runtime_put_autosuspend(cpu_dai->dev); | ||
615 | for (i = 0; i < rtd->num_codecs; i++) { | 617 | for (i = 0; i < rtd->num_codecs; i++) { |
616 | if (!rtd->codec_dais[i]->active) | 618 | if (!rtd->codec_dais[i]->active) |
617 | pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); | 619 | pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); |
@@ -659,6 +661,8 @@ static int soc_pcm_close(struct snd_pcm_substream *substream) | |||
659 | { | 661 | { |
660 | struct snd_soc_pcm_runtime *rtd = substream->private_data; | 662 | struct snd_soc_pcm_runtime *rtd = substream->private_data; |
661 | struct snd_soc_platform *platform = rtd->platform; | 663 | struct snd_soc_platform *platform = rtd->platform; |
664 | struct snd_soc_component *component; | ||
665 | struct snd_soc_rtdcom_list *rtdcom; | ||
662 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; | 666 | struct snd_soc_dai *cpu_dai = rtd->cpu_dai; |
663 | struct snd_soc_dai *codec_dai; | 667 | struct snd_soc_dai *codec_dai; |
664 | int i; | 668 | int i; |
@@ -715,17 +719,13 @@ static int soc_pcm_close(struct snd_pcm_substream *substream) | |||
715 | 719 | ||
716 | mutex_unlock(&rtd->pcm_mutex); | 720 | mutex_unlock(&rtd->pcm_mutex); |
717 | 721 | ||
718 | pm_runtime_mark_last_busy(platform->dev); | 722 | for_each_rtdcom(rtd, rtdcom) { |
719 | pm_runtime_put_autosuspend(platform->dev); | 723 | component = rtdcom->component; |
720 | 724 | ||
721 | for (i = 0; i < rtd->num_codecs; i++) { | 725 | pm_runtime_mark_last_busy(component->dev); |
722 | pm_runtime_mark_last_busy(rtd->codec_dais[i]->dev); | 726 | pm_runtime_put_autosuspend(component->dev); |
723 | pm_runtime_put_autosuspend(rtd->codec_dais[i]->dev); | ||
724 | } | 727 | } |
725 | 728 | ||
726 | pm_runtime_mark_last_busy(cpu_dai->dev); | ||
727 | pm_runtime_put_autosuspend(cpu_dai->dev); | ||
728 | |||
729 | for (i = 0; i < rtd->num_codecs; i++) { | 729 | for (i = 0; i < rtd->num_codecs; i++) { |
730 | if (!rtd->codec_dais[i]->active) | 730 | if (!rtd->codec_dais[i]->active) |
731 | pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); | 731 | pinctrl_pm_select_sleep_state(rtd->codec_dais[i]->dev); |
@@ -3000,8 +3000,7 @@ void soc_dpcm_debugfs_add(struct snd_soc_pcm_runtime *rtd) | |||
3000 | return; | 3000 | return; |
3001 | } | 3001 | } |
3002 | 3002 | ||
3003 | rtd->debugfs_dpcm_state = debugfs_create_file("state", 0444, | 3003 | debugfs_create_file("state", 0444, rtd->debugfs_dpcm_root, |
3004 | rtd->debugfs_dpcm_root, | 3004 | rtd, &dpcm_state_fops); |
3005 | rtd, &dpcm_state_fops); | ||
3006 | } | 3005 | } |
3007 | #endif | 3006 | #endif |