ASoC: tlv320dac33: Burst mode BCLK divider configuration
authorPeter Ujfalusi <peter.ujfalusi@nokia.com>
Wed, 20 Jan 2010 07:39:36 +0000 (09:39 +0200)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Wed, 20 Jan 2010 11:47:49 +0000 (11:47 +0000)
Add possibility to configure the burst mode BCLK divider through platform
data structure.
The BCLK divider changes the actual speed of the serial bus in burst mode,
which is faster than the sampling frequency of the running stream.
In this way platforms can experiment with the optimal burst speed without
the need to modify the codec driver itself.

Signed-off-by: Peter Ujfalusi <peter.ujfalusi@nokia.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
include/sound/tlv320dac33-plat.h
sound/soc/codecs/tlv320dac33.c

index 5858d06a7ffa88c7ab2e2081d0cec8df925b1d57..ac0665264bdf1dcef855a45e54a586947fcbb09c 100644 (file)
@@ -15,6 +15,7 @@
 
 struct tlv320dac33_platform_data {
        int power_gpio;
+       u8 burst_bclkdiv;
 };
 
 #endif /* __TLV320DAC33_PLAT_H */
index e1aa66ff7f1c2fe8d97fc8ea37a95cafdaa90404..1b35d0cf33649fac74cab25a6c90c7c0707a46b9 100644 (file)
@@ -91,6 +91,7 @@ struct tlv320dac33_priv {
                                         * this */
        enum dac33_fifo_modes fifo_mode;/* FIFO mode selection */
        unsigned int nsample;           /* burst read amount from host */
+       u8 burst_bclkdiv;               /* BCLK divider value in burst mode */
 
        enum dac33_state state;
 };
@@ -845,9 +846,18 @@ static int dac33_prepare_chip(struct snd_pcm_substream *substream)
        dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_A, aictrl_a);
        dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_B, aictrl_b);
 
-       /* BCLK divide ratio */
+       /*
+        * BCLK divide ratio
+        * 0: 1.5
+        * 1: 1
+        * 2: 2
+        * ...
+        * 254: 254
+        * 255: 255
+        */
        if (dac33->fifo_mode)
-               dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_C, 3);
+               dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_C,
+                                                       dac33->burst_bclkdiv);
        else
                dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_C, 32);
 
@@ -1239,6 +1249,7 @@ static int __devinit dac33_i2c_probe(struct i2c_client *client,
        i2c_set_clientdata(client, dac33);
 
        dac33->power_gpio = pdata->power_gpio;
+       dac33->burst_bclkdiv = pdata->burst_bclkdiv;
        dac33->irq = client->irq;
        dac33->nsample = NSAMPLE_MAX;
        /* Disable FIFO use by default */