Message ID | 1606539559-4277-3-git-send-email-srivasam@codeaurora.org |
---|---|
State | Superseded |
Headers | show |
Series | Platform driver update to support playback recover after resume | expand |
On 28/11/2020 04:59, Srinivasa Rao Mandadapu wrote: > To support playback continuation after hard suspend(bypass powerd) > and resume add component driver ops and do regcache sync. > > Signed-off-by: V Sujith Kumar Reddy <vsujithk@codeaurora.org> > Signed-off-by: Srinivasa Rao Mandadapu <srivasam@codeaurora.org> LGTM, Reviewed-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org> > --- > sound/soc/qcom/lpass-platform.c | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c > index 0e71899..12764a8 100644 > --- a/sound/soc/qcom/lpass-platform.c > +++ b/sound/soc/qcom/lpass-platform.c > @@ -827,6 +827,39 @@ static void lpass_platform_pcm_free(struct snd_soc_component *component, > } > } > > +static int lpass_platform_pcmops_suspend(struct snd_soc_component *component) > +{ > + struct lpass_data *drvdata = snd_soc_component_get_drvdata(component); > + struct regmap *map; > + unsigned int dai_id = component->id; > + > + if (dai_id == LPASS_DP_RX) > + map = drvdata->hdmiif_map; > + else > + map = drvdata->lpaif_map; > + > + regcache_cache_only(map, true); > + regcache_mark_dirty(map); > + > + return 0; > +} > + > +static int lpass_platform_pcmops_resume(struct snd_soc_component *component) > +{ > + struct lpass_data *drvdata = snd_soc_component_get_drvdata(component); > + struct regmap *map; > + unsigned int dai_id = component->id; > + > + if (dai_id == LPASS_DP_RX) > + map = drvdata->hdmiif_map; > + else > + map = drvdata->lpaif_map; > + > + regcache_cache_only(map, false); > + return regcache_sync(map); > +} > + > + > static const struct snd_soc_component_driver lpass_component_driver = { > .name = DRV_NAME, > .open = lpass_platform_pcmops_open, > @@ -839,6 +872,8 @@ static const struct snd_soc_component_driver lpass_component_driver = { > .mmap = lpass_platform_pcmops_mmap, > .pcm_construct = lpass_platform_pcm_new, > .pcm_destruct = lpass_platform_pcm_free, > + .suspend = lpass_platform_pcmops_suspend, > + .resume = lpass_platform_pcmops_resume, > > }; > >
diff --git a/sound/soc/qcom/lpass-platform.c b/sound/soc/qcom/lpass-platform.c index 0e71899..12764a8 100644 --- a/sound/soc/qcom/lpass-platform.c +++ b/sound/soc/qcom/lpass-platform.c @@ -827,6 +827,39 @@ static void lpass_platform_pcm_free(struct snd_soc_component *component, } } +static int lpass_platform_pcmops_suspend(struct snd_soc_component *component) +{ + struct lpass_data *drvdata = snd_soc_component_get_drvdata(component); + struct regmap *map; + unsigned int dai_id = component->id; + + if (dai_id == LPASS_DP_RX) + map = drvdata->hdmiif_map; + else + map = drvdata->lpaif_map; + + regcache_cache_only(map, true); + regcache_mark_dirty(map); + + return 0; +} + +static int lpass_platform_pcmops_resume(struct snd_soc_component *component) +{ + struct lpass_data *drvdata = snd_soc_component_get_drvdata(component); + struct regmap *map; + unsigned int dai_id = component->id; + + if (dai_id == LPASS_DP_RX) + map = drvdata->hdmiif_map; + else + map = drvdata->lpaif_map; + + regcache_cache_only(map, false); + return regcache_sync(map); +} + + static const struct snd_soc_component_driver lpass_component_driver = { .name = DRV_NAME, .open = lpass_platform_pcmops_open, @@ -839,6 +872,8 @@ static const struct snd_soc_component_driver lpass_component_driver = { .mmap = lpass_platform_pcmops_mmap, .pcm_construct = lpass_platform_pcm_new, .pcm_destruct = lpass_platform_pcm_free, + .suspend = lpass_platform_pcmops_suspend, + .resume = lpass_platform_pcmops_resume, };