diff options
author | olivier moysan <olivier.moysan@st.com> | 2017-11-06 10:18:52 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2017-11-06 10:45:36 -0500 |
commit | 9036e4acc81700a51e5f42820ba4570bea9b6f48 (patch) | |
tree | 59b3f8202dd6e57ec7dd5ee0c55b3f03251fe2f5 | |
parent | 7e751e375ae7218f8b49f0b47e855cf9bbbdbcf9 (diff) |
ASoC: stm32: spdifrx: fix 16 bits capture
Change DMA bus width to manage properly 16 bits packed format.
Signed-off-by: Olivier Moysan <olivier.moysan@st.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | sound/soc/stm/stm32_spdifrx.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/sound/soc/stm/stm32_spdifrx.c b/sound/soc/stm/stm32_spdifrx.c index 84cc5678beba..d7dbe84d5eeb 100644 --- a/sound/soc/stm/stm32_spdifrx.c +++ b/sound/soc/stm/stm32_spdifrx.c | |||
@@ -750,17 +750,21 @@ static int stm32_spdifrx_hw_params(struct snd_pcm_substream *substream, | |||
750 | switch (data_size) { | 750 | switch (data_size) { |
751 | case 16: | 751 | case 16: |
752 | fmt = SPDIFRX_DRFMT_PACKED; | 752 | fmt = SPDIFRX_DRFMT_PACKED; |
753 | spdifrx->dma_params.addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES; | ||
754 | break; | 753 | break; |
755 | case 32: | 754 | case 32: |
756 | fmt = SPDIFRX_DRFMT_LEFT; | 755 | fmt = SPDIFRX_DRFMT_LEFT; |
757 | spdifrx->dma_params.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; | ||
758 | break; | 756 | break; |
759 | default: | 757 | default: |
760 | dev_err(&spdifrx->pdev->dev, "Unexpected data format\n"); | 758 | dev_err(&spdifrx->pdev->dev, "Unexpected data format\n"); |
761 | return -EINVAL; | 759 | return -EINVAL; |
762 | } | 760 | } |
763 | 761 | ||
762 | /* | ||
763 | * Set buswidth to 4 bytes for all data formats. | ||
764 | * Packed format: transfer 2 x 2 bytes samples | ||
765 | * Left format: transfer 1 x 3 bytes samples + 1 dummy byte | ||
766 | */ | ||
767 | spdifrx->dma_params.addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; | ||
764 | snd_soc_dai_init_dma_data(cpu_dai, NULL, &spdifrx->dma_params); | 768 | snd_soc_dai_init_dma_data(cpu_dai, NULL, &spdifrx->dma_params); |
765 | 769 | ||
766 | return regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR, | 770 | return regmap_update_bits(spdifrx->regmap, STM32_SPDIFRX_CR, |