ASoC: Disable automatic volume control in the CS4270 sound driver
authorTimur Tabi <timur@freescale.com>
Thu, 7 Aug 2008 16:22:32 +0000 (11:22 -0500)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Thu, 30 Oct 2008 15:54:11 +0000 (15:54 +0000)
Disable the automatic volume control feature of the CS4270 audio codec.  This
feature, which is enabled by default, causes volume change commands to be
delayed.  Sometimes the volume change happens after playback is started.

Signed-off-by: Timur Tabi <timur@freescale.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
sound/soc/codecs/cs4270.c

index 0bbd94501d7ea45f1aa8b491bf43d275ffb779c9..0ff476d7057c24d45b8dde9a6aefa2c24bb3ee45 100644 (file)
@@ -450,6 +450,19 @@ static int cs4270_hw_params(struct snd_pcm_substream *substream,
                return ret;
        }
 
+       /* Disable automatic volume control.  It's enabled by default, and
+        * it causes volume change commands to be delayed, sometimes until
+        * after playback has started.
+        */
+
+       reg = cs4270_read_reg_cache(codec, CS4270_TRANS);
+       reg &= ~(CS4270_TRANS_SOFT | CS4270_TRANS_ZERO);
+       ret = cs4270_i2c_write(codec, CS4270_TRANS, reg);
+       if (ret < 0) {
+               printk(KERN_ERR "I2C write failed\n");
+               return ret;
+       }
+
        /* Thaw and power-up the codec */
 
        ret = snd_soc_write(codec, CS4270_PWRCTL, 0);