]> Pileus Git - ~andy/linux/commitdiff
ASoC: tlv320aic32x4: Fix mono playback
authorMarkus Pargmann <mpa@pengutronix.de>
Mon, 27 Jan 2014 12:03:05 +0000 (13:03 +0100)
committerMark Brown <broonie@linaro.org>
Mon, 27 Jan 2014 18:13:40 +0000 (18:13 +0000)
Playback of a mono stream should output the same stream on both
channels. At the moment only the left analog signal is valid, the right
one is just noise.

This patch maps the left digital channel onto both DACs when receiving a
mono stream.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/codecs/tlv320aic32x4.c
sound/soc/codecs/tlv320aic32x4.h

index 385dec16eb8a18150a7d6005f310af8c44001938..ee9ad05f9137026a5a2fa02fcf28e582b681b7fe 100644 (file)
@@ -450,6 +450,17 @@ static int aic32x4_hw_params(struct snd_pcm_substream *substream,
        }
        snd_soc_write(codec, AIC32X4_IFACE1, data);
 
+       if (params_channels(params) == 1) {
+               data = AIC32X4_RDAC2LCHN | AIC32X4_LDAC2LCHN;
+       } else {
+               if (aic32x4->swapdacs)
+                       data = AIC32X4_RDAC2LCHN | AIC32X4_LDAC2RCHN;
+               else
+                       data = AIC32X4_LDAC2LCHN | AIC32X4_RDAC2RCHN;
+       }
+       snd_soc_update_bits(codec, AIC32X4_DACSETUP, AIC32X4_DAC_CHAN_MASK,
+                       data);
+
        return 0;
 }
 
@@ -606,13 +617,6 @@ static int aic32x4_probe(struct snd_soc_codec *codec)
        }
        snd_soc_write(codec, AIC32X4_CMMODE, tmp_reg);
 
-       /* Do DACs need to be swapped? */
-       if (aic32x4->swapdacs) {
-               snd_soc_write(codec, AIC32X4_DACSETUP, AIC32X4_LDAC2RCHN | AIC32X4_RDAC2LCHN);
-       } else {
-               snd_soc_write(codec, AIC32X4_DACSETUP, AIC32X4_LDAC2LCHN | AIC32X4_RDAC2RCHN);
-       }
-
        /* Mic PGA routing */
        if (aic32x4->micpga_routing & AIC32X4_MICPGA_ROUTE_LMIC_IN2R_10K) {
                snd_soc_write(codec, AIC32X4_LMICPGANIN, AIC32X4_LMICPGANIN_IN2R_10K);
index 35774223fd91f2a03c4ce4ed56c45df3f3ff2a3d..83795af8c75f5ee8b562c53aff4627f2fc5bab03 100644 (file)
 #define AIC32X4_LDAC2RCHN              (0x02 << 4)
 #define AIC32X4_LDAC2LCHN              (0x01 << 4)
 #define AIC32X4_RDAC2RCHN              (0x01 << 2)
+#define AIC32X4_DAC_CHAN_MASK          0x3c
 
 #define AIC32X4_SSTEP2WCLK             0x01
 #define AIC32X4_MUTEON                 0x0C