ASoC: Mediatek: add memory interface data align
authorShunli Wang <shunli.wang@mediatek.com>
Thu, 16 May 2019 09:54:37 +0000 (17:54 +0800)
committerMark Brown <broonie@kernel.org>
Thu, 16 May 2019 10:13:14 +0000 (11:13 +0100)
This supports two data align settings. One is S32_LE and
other is S24_LE.

Signed-off-by: Shunli Wang <shunli.wang@mediatek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/mediatek/common/mtk-afe-fe-dai.c
sound/soc/mediatek/common/mtk-base-afe.h

index fded11d..19048c3 100644 (file)
@@ -241,6 +241,7 @@ int mtk_afe_fe_prepare(struct snd_pcm_substream *substream,
        struct mtk_base_afe *afe = snd_soc_dai_get_drvdata(dai);
        struct mtk_base_afe_memif *memif = &afe->memif[rtd->cpu_dai->id];
        int hd_audio = 0;
+       int hd_align = 1;
 
        /* set hd mode */
        switch (substream->runtime->format) {
@@ -249,9 +250,11 @@ int mtk_afe_fe_prepare(struct snd_pcm_substream *substream,
                break;
        case SNDRV_PCM_FORMAT_S32_LE:
                hd_audio = 1;
+               hd_align = 1;
                break;
        case SNDRV_PCM_FORMAT_S24_LE:
                hd_audio = 1;
+               hd_align = 0;
                break;
        default:
                dev_err(afe->dev, "%s() error: unsupported format %d\n",
@@ -262,6 +265,10 @@ int mtk_afe_fe_prepare(struct snd_pcm_substream *substream,
        mtk_regmap_update_bits(afe->regmap, memif->data->hd_reg,
                               1, hd_audio, memif->data->hd_shift);
 
+       mtk_regmap_update_bits(afe->regmap, memif->data->hd_align_reg,
+                              memif->data->hd_align_mshift,
+                              hd_align ? memif->data->hd_align_mshift : 0);
+
        return 0;
 }
 EXPORT_SYMBOL_GPL(mtk_afe_fe_prepare);
index bd8d5e0..60cb609 100644 (file)
@@ -24,7 +24,9 @@ struct mtk_base_memif_data {
        int enable_reg;
        int enable_shift;
        int hd_reg;
+       int hd_align_reg;
        int hd_shift;
+       int hd_align_mshift;
        int msb_reg;
        int msb_shift;
        int agent_disable_reg;