diff options
| author | Vijendar Mukunda <Vijendar.Mukunda@amd.com> | 2018-03-09 10:43:02 -0500 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2018-03-09 10:45:24 -0500 |
| commit | a37d48e32303d535bdfd554c57952ce31f428b3a (patch) | |
| tree | 9580700d73d85d65ca493ec2aa3db6a774862e74 | |
| parent | 7928b2cbe55b2a410a0f5c1f154610059c57b1b2 (diff) | |
ASoC: amd: 16bit resolution support for i2s sp instance
Moved 16bit resolution condition check for stoney platform
to acp_hw_params.Depending upon substream required register
value need to be programmed rather than enabling 16bit resolution
support all time in acp init.
Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
| -rw-r--r-- | sound/soc/amd/acp-pcm-dma.c | 16 | ||||
| -rw-r--r-- | sound/soc/amd/acp.h | 2 |
2 files changed, 11 insertions, 7 deletions
diff --git a/sound/soc/amd/acp-pcm-dma.c b/sound/soc/amd/acp-pcm-dma.c index c33a512283a4..9fb356db3ab2 100644 --- a/sound/soc/amd/acp-pcm-dma.c +++ b/sound/soc/amd/acp-pcm-dma.c | |||
| @@ -579,13 +579,6 @@ static int acp_init(void __iomem *acp_mmio, u32 asic_type) | |||
| 579 | for (bank = 1; bank < 48; bank++) | 579 | for (bank = 1; bank < 48; bank++) |
| 580 | acp_set_sram_bank_state(acp_mmio, bank, false); | 580 | acp_set_sram_bank_state(acp_mmio, bank, false); |
| 581 | } | 581 | } |
| 582 | |||
| 583 | /* Stoney supports 16bit resolution */ | ||
| 584 | if (asic_type == CHIP_STONEY) { | ||
| 585 | val = acp_reg_read(acp_mmio, mmACP_I2S_16BIT_RESOLUTION_EN); | ||
| 586 | val |= 0x03; | ||
| 587 | acp_reg_write(val, acp_mmio, mmACP_I2S_16BIT_RESOLUTION_EN); | ||
| 588 | } | ||
| 589 | return 0; | 582 | return 0; |
| 590 | } | 583 | } |
| 591 | 584 | ||
| @@ -774,6 +767,7 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream, | |||
| 774 | { | 767 | { |
| 775 | int status; | 768 | int status; |
| 776 | uint64_t size; | 769 | uint64_t size; |
| 770 | u32 val = 0; | ||
| 777 | struct page *pg; | 771 | struct page *pg; |
| 778 | struct snd_pcm_runtime *runtime; | 772 | struct snd_pcm_runtime *runtime; |
| 779 | struct audio_substream_data *rtd; | 773 | struct audio_substream_data *rtd; |
| @@ -786,6 +780,14 @@ static int acp_dma_hw_params(struct snd_pcm_substream *substream, | |||
| 786 | if (WARN_ON(!rtd)) | 780 | if (WARN_ON(!rtd)) |
| 787 | return -EINVAL; | 781 | return -EINVAL; |
| 788 | 782 | ||
| 783 | if (adata->asic_type == CHIP_STONEY) { | ||
| 784 | val = acp_reg_read(adata->acp_mmio, mmACP_I2S_16BIT_RESOLUTION_EN); | ||
| 785 | if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) | ||
| 786 | val |= ACP_I2S_SP_16BIT_RESOLUTION_EN; | ||
| 787 | else | ||
| 788 | val |= ACP_I2S_MIC_16BIT_RESOLUTION_EN; | ||
| 789 | acp_reg_write(val, adata->acp_mmio, mmACP_I2S_16BIT_RESOLUTION_EN); | ||
| 790 | } | ||
| 789 | size = params_buffer_bytes(params); | 791 | size = params_buffer_bytes(params); |
| 790 | status = snd_pcm_lib_malloc_pages(substream, size); | 792 | status = snd_pcm_lib_malloc_pages(substream, size); |
| 791 | if (status < 0) | 793 | if (status < 0) |
diff --git a/sound/soc/amd/acp.h b/sound/soc/amd/acp.h index ecb458935d1e..9293f179f272 100644 --- a/sound/soc/amd/acp.h +++ b/sound/soc/amd/acp.h | |||
| @@ -70,6 +70,8 @@ | |||
| 70 | #define CAPTURE_END_DMA_DESCR_CH15 7 | 70 | #define CAPTURE_END_DMA_DESCR_CH15 7 |
| 71 | 71 | ||
| 72 | #define mmACP_I2S_16BIT_RESOLUTION_EN 0x5209 | 72 | #define mmACP_I2S_16BIT_RESOLUTION_EN 0x5209 |
| 73 | #define ACP_I2S_MIC_16BIT_RESOLUTION_EN 0x01 | ||
| 74 | #define ACP_I2S_SP_16BIT_RESOLUTION_EN 0x02 | ||
| 73 | enum acp_dma_priority_level { | 75 | enum acp_dma_priority_level { |
| 74 | /* 0x0 Specifies the DMA channel is given normal priority */ | 76 | /* 0x0 Specifies the DMA channel is given normal priority */ |
| 75 | ACP_DMA_PRIORITY_LEVEL_NORMAL = 0x0, | 77 | ACP_DMA_PRIORITY_LEVEL_NORMAL = 0x0, |
