| From foo@baz Mon Sep 17 12:37:52 CEST 2018 |
| From: Akshu Agrawal <akshu.agrawal@amd.com> |
| Date: Wed, 1 Aug 2018 15:37:33 +0530 |
| Subject: ASoC: soc-pcm: Use delay set in component pointer function |
| |
| From: Akshu Agrawal <akshu.agrawal@amd.com> |
| |
| [ Upstream commit 9fb4c2bf130b922c77c16a8368732699799c40de ] |
| |
| Take into account the base delay set in pointer callback. |
| |
| There are cases where a pointer function populates |
| runtime->delay, such as: |
| ./sound/pci/hda/hda_controller.c |
| ./sound/soc/intel/atom/sst-mfld-platform-pcm.c |
| |
| This delay was getting lost and was overwritten by delays |
| from codec or cpu dai delay function if exposed. |
| |
| Now, |
| Total delay = base delay + cpu_dai delay + codec_dai delay |
| |
| Signed-off-by: Akshu Agrawal <akshu.agrawal@amd.com> |
| Reviewed-by: Takashi Iwai <tiwai@suse.de> |
| Signed-off-by: Mark Brown <broonie@kernel.org> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| sound/soc/soc-pcm.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/sound/soc/soc-pcm.c |
| +++ b/sound/soc/soc-pcm.c |
| @@ -1165,6 +1165,9 @@ static snd_pcm_uframes_t soc_pcm_pointer |
| snd_pcm_sframes_t codec_delay = 0; |
| int i; |
| |
| + /* clearing the previous total delay */ |
| + runtime->delay = 0; |
| + |
| for_each_rtdcom(rtd, rtdcom) { |
| component = rtdcom->component; |
| |
| @@ -1176,6 +1179,8 @@ static snd_pcm_uframes_t soc_pcm_pointer |
| offset = component->driver->ops->pointer(substream); |
| break; |
| } |
| + /* base delay if assigned in pointer callback */ |
| + delay = runtime->delay; |
| |
| if (cpu_dai->driver->ops->delay) |
| delay += cpu_dai->driver->ops->delay(substream, cpu_dai); |