ASoC: davinci-mcasp: Only disable inactive serializer
authorVishal Thanki <vishalthanki@gmail.com>
Fri, 11 May 2018 12:33:37 +0000 (14:33 +0200)
committerMark Brown <broonie@kernel.org>
Thu, 17 May 2018 06:46:22 +0000 (15:46 +0900)
As a side effect of the following commit, the active TX
serializer may get disabled which may result in distorted
audio output.

ASoC: davinci-mcasp: Add support for multichannel playback
(2952b27e2e463b28d5c0f04000f96b968137ca42)

For example, if a 4 channel I2S playback with two TX serializers
is activated. Later on, if a recording of 2 channels, with only 1 RX
serializer is started, which will also disable one of the TX
serializer because max_active_serializers is only calculated for
RX (recording) stream. This patch fixes this issue.

Signed-off-by: Vishal Thanki <vishalthanki@gmail.com>
Acked-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/davinci/davinci-mcasp.c

index 79fc4aa2fa291068d87e0b07a4dd07712dbbc928..1f96c9dbe9c49c1422561b7bd8b6dbd3c45bc68d 100644 (file)
@@ -789,7 +789,7 @@ static int mcasp_common_hw_param(struct davinci_mcasp *mcasp, int stream,
                                        rx_ser < max_active_serializers) {
                        mcasp_clr_bits(mcasp, DAVINCI_MCASP_PDIR_REG, AXR(i));
                        rx_ser++;
-               } else {
+               } else if (mcasp->serial_dir[i] == INACTIVE_MODE) {
                        mcasp_mod_bits(mcasp, DAVINCI_MCASP_XRSRCTL_REG(i),
                                       SRMOD_INACTIVE, SRMOD_MASK);
                }