diff options
author | Viorel Suman <viorel.suman@nxp.com> | 2018-09-17 09:35:18 +0300 |
---|---|---|
committer | Dong Aisheng <aisheng.dong@nxp.com> | 2019-11-25 15:50:41 +0800 |
commit | 2e916a466e91aaae9aa9e3d3c80b0102e0c36e41 (patch) | |
tree | 4870939e0224b2e4d429ceb509bed39b90206cbc /sound/soc/fsl/imx-ak4458.c | |
parent | 63464036446afbfcf0eec812a047add50eea55f2 (diff) |
MLK-19573-3: ASoC: imx-ak4458: enable DSD playback
Enable DSD playback.
Signed-off-by: Viorel Suman <viorel.suman@nxp.com>
(cherry picked from commit 351177200e66b980deae67b9d571d378f5b128a2)
Diffstat (limited to 'sound/soc/fsl/imx-ak4458.c')
-rw-r--r-- | sound/soc/fsl/imx-ak4458.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/sound/soc/fsl/imx-ak4458.c b/sound/soc/fsl/imx-ak4458.c index 0dd3e8a15983..f99c9d71229c 100644 --- a/sound/soc/fsl/imx-ak4458.c +++ b/sound/soc/fsl/imx-ak4458.c @@ -24,6 +24,7 @@ #include <sound/soc-dapm.h> #include "fsl_sai.h" +#include "fsl_dsd.h" struct imx_ak4458_data { struct snd_soc_card card; @@ -148,18 +149,24 @@ static int imx_aif_hw_params(struct snd_pcm_substream *substream, unsigned int channels = params_channels(params); unsigned int fmt = SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBS_CFS; unsigned long mclk_freq; + bool is_dsd = fsl_is_dsd(params); int ret, i; - if (data->tdm_mode) { + if (is_dsd) { + channels = 1; + data->slots = 1; + data->slot_width = params_width(params); + fmt |= SND_SOC_DAIFMT_PDM; + } else if (data->tdm_mode) { data->slots = 8; data->slot_width = 32; + fmt |= SND_SOC_DAIFMT_DSP_B; } else { data->slots = 2; data->slot_width = params_physical_width(params); + fmt |= SND_SOC_DAIFMT_I2S; } - fmt |= data->tdm_mode ? SND_SOC_DAIFMT_DSP_B : SND_SOC_DAIFMT_I2S; - ret = snd_soc_dai_set_fmt(cpu_dai, fmt); if (ret) { dev_err(dev, "failed to set cpu dai fmt: %d\n", ret); |