aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/codecs/tlv320dac33.c
diff options
context:
space:
mode:
authorPeter Ujfalusi <peter.ujfalusi@nokia.com>2010-01-20 02:39:36 -0500
committerMark Brown <broonie@opensource.wolfsonmicro.com>2010-01-20 06:47:49 -0500
commit6aceabb459c07a3fb4873c8306de8143c56241b2 (patch)
tree438703a97f5d386618b51256ea9b3e9e4793fd70 /sound/soc/codecs/tlv320dac33.c
parent6cd6cede8c33364d8e1abb5ea35adf627e3781b0 (diff)
ASoC: tlv320dac33: Burst mode BCLK divider configuration
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>
Diffstat (limited to 'sound/soc/codecs/tlv320dac33.c')
-rw-r--r--sound/soc/codecs/tlv320dac33.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/sound/soc/codecs/tlv320dac33.c b/sound/soc/codecs/tlv320dac33.c
index e1aa66ff7f1c..1b35d0cf3364 100644
--- a/sound/soc/codecs/tlv320dac33.c
+++ b/sound/soc/codecs/tlv320dac33.c
@@ -91,6 +91,7 @@ struct tlv320dac33_priv {
91 * this */ 91 * this */
92 enum dac33_fifo_modes fifo_mode;/* FIFO mode selection */ 92 enum dac33_fifo_modes fifo_mode;/* FIFO mode selection */
93 unsigned int nsample; /* burst read amount from host */ 93 unsigned int nsample; /* burst read amount from host */
94 u8 burst_bclkdiv; /* BCLK divider value in burst mode */
94 95
95 enum dac33_state state; 96 enum dac33_state state;
96}; 97};
@@ -845,9 +846,18 @@ static int dac33_prepare_chip(struct snd_pcm_substream *substream)
845 dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_A, aictrl_a); 846 dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_A, aictrl_a);
846 dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_B, aictrl_b); 847 dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_B, aictrl_b);
847 848
848 /* BCLK divide ratio */ 849 /*
850 * BCLK divide ratio
851 * 0: 1.5
852 * 1: 1
853 * 2: 2
854 * ...
855 * 254: 254
856 * 255: 255
857 */
849 if (dac33->fifo_mode) 858 if (dac33->fifo_mode)
850 dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_C, 3); 859 dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_C,
860 dac33->burst_bclkdiv);
851 else 861 else
852 dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_C, 32); 862 dac33_write(codec, DAC33_SER_AUDIOIF_CTRL_C, 32);
853 863
@@ -1239,6 +1249,7 @@ static int __devinit dac33_i2c_probe(struct i2c_client *client,
1239 i2c_set_clientdata(client, dac33); 1249 i2c_set_clientdata(client, dac33);
1240 1250
1241 dac33->power_gpio = pdata->power_gpio; 1251 dac33->power_gpio = pdata->power_gpio;
1252 dac33->burst_bclkdiv = pdata->burst_bclkdiv;
1242 dac33->irq = client->irq; 1253 dac33->irq = client->irq;
1243 dac33->nsample = NSAMPLE_MAX; 1254 dac33->nsample = NSAMPLE_MAX;
1244 /* Disable FIFO use by default */ 1255 /* Disable FIFO use by default */