From 086dcbc6a9db16bc6378ce09c0f172522f1eaf1d Mon Sep 17 00:00:00 2001 From: Viorel Suman Date: Mon, 29 Jan 2018 16:04:44 +0200 Subject: MLK-16224-6: ASoC: fsl_sai: fix DSD suspend/resume With the existing implementation the SAI pinctrl state is restored to default after resume - this breaks DSD playback after resume. Restore DSD pinctrl state in snd_soc_dai_driver resume callback. Signed-off-by: Viorel Suman Reviewed-by: Shengjiu Wang --- sound/soc/fsl/fsl_sai.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'sound/soc/fsl/fsl_sai.c') diff --git a/sound/soc/fsl/fsl_sai.c b/sound/soc/fsl/fsl_sai.c index 0d25ebdfdeee..a7133452720c 100644 --- a/sound/soc/fsl/fsl_sai.c +++ b/sound/soc/fsl/fsl_sai.c @@ -893,6 +893,23 @@ static int fsl_sai_dai_probe(struct snd_soc_dai *cpu_dai) return 0; } +static int fsl_sai_dai_resume(struct snd_soc_dai *cpu_dai) +{ + struct fsl_sai *sai = snd_soc_dai_get_drvdata(cpu_dai); + int ret; + + if (sai->is_dsd && !IS_ERR_OR_NULL(sai->pins_dsd)) { + ret = pinctrl_select_state(sai->pinctrl, sai->pins_dsd); + if (ret) { + dev_err(cpu_dai->dev, + "failed to set proper pins state: %d\n", ret); + return ret; + } + } + + return 0; +} + static struct snd_soc_dai_driver fsl_sai_dai = { .probe = fsl_sai_dai_probe, .playback = { @@ -913,6 +930,7 @@ static struct snd_soc_dai_driver fsl_sai_dai = { .rates = SNDRV_PCM_RATE_KNOT, .formats = FSL_SAI_FORMATS, }, + .resume = fsl_sai_dai_resume, .ops = &fsl_sai_pcm_dai_ops, }; -- cgit v1.2.3