diff options
author | Barry Song <21cnbao@gmail.com> | 2010-04-21 05:36:48 -0400 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2010-04-23 11:14:02 -0400 |
commit | d6bdc0f7fe561a4b08b280c2b2add2db3747e64b (patch) | |
tree | a1abfad80ab77d7296677f9718a69b99bf842ecf /sound/soc/codecs/ad193x.c | |
parent | 7add84aa779b4f7ca39484a82a11e01d7acd4dca (diff) |
ASoC: ad193x: fix wrong register setting in ad193x_set_dai_fmt
Signed-off-by: Barry Song <21cnbao@gmail.com>
Acked-by: Liam Girdwood <lrg@slimlogic.co.uk>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Diffstat (limited to 'sound/soc/codecs/ad193x.c')
-rw-r--r-- | sound/soc/codecs/ad193x.c | 48 |
1 files changed, 25 insertions, 23 deletions
diff --git a/sound/soc/codecs/ad193x.c b/sound/soc/codecs/ad193x.c index 7ed787e2e51..45dfc90540b 100644 --- a/sound/soc/codecs/ad193x.c +++ b/sound/soc/codecs/ad193x.c | |||
@@ -163,9 +163,10 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai, | |||
163 | unsigned int fmt) | 163 | unsigned int fmt) |
164 | { | 164 | { |
165 | struct snd_soc_codec *codec = codec_dai->codec; | 165 | struct snd_soc_codec *codec = codec_dai->codec; |
166 | int adc_reg, dac_reg; | 166 | int adc_reg1, adc_reg2, dac_reg; |
167 | 167 | ||
168 | adc_reg = snd_soc_read(codec, AD193X_ADC_CTRL2); | 168 | adc_reg1 = snd_soc_read(codec, AD193X_ADC_CTRL1); |
169 | adc_reg2 = snd_soc_read(codec, AD193X_ADC_CTRL2); | ||
169 | dac_reg = snd_soc_read(codec, AD193X_DAC_CTRL1); | 170 | dac_reg = snd_soc_read(codec, AD193X_DAC_CTRL1); |
170 | 171 | ||
171 | /* At present, the driver only support AUX ADC mode(SND_SOC_DAIFMT_I2S | 172 | /* At present, the driver only support AUX ADC mode(SND_SOC_DAIFMT_I2S |
@@ -173,12 +174,12 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai, | |||
173 | */ | 174 | */ |
174 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { | 175 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { |
175 | case SND_SOC_DAIFMT_I2S: | 176 | case SND_SOC_DAIFMT_I2S: |
176 | adc_reg &= ~AD193X_ADC_SERFMT_MASK; | 177 | adc_reg1 &= ~AD193X_ADC_SERFMT_MASK; |
177 | adc_reg |= AD193X_ADC_SERFMT_TDM; | 178 | adc_reg1 |= AD193X_ADC_SERFMT_TDM; |
178 | break; | 179 | break; |
179 | case SND_SOC_DAIFMT_DSP_A: | 180 | case SND_SOC_DAIFMT_DSP_A: |
180 | adc_reg &= ~AD193X_ADC_SERFMT_MASK; | 181 | adc_reg1 &= ~AD193X_ADC_SERFMT_MASK; |
181 | adc_reg |= AD193X_ADC_SERFMT_AUX; | 182 | adc_reg1 |= AD193X_ADC_SERFMT_AUX; |
182 | break; | 183 | break; |
183 | default: | 184 | default: |
184 | return -EINVAL; | 185 | return -EINVAL; |
@@ -186,27 +187,27 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai, | |||
186 | 187 | ||
187 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { | 188 | switch (fmt & SND_SOC_DAIFMT_INV_MASK) { |
188 | case SND_SOC_DAIFMT_NB_NF: /* normal bit clock + frame */ | 189 | case SND_SOC_DAIFMT_NB_NF: /* normal bit clock + frame */ |
189 | adc_reg &= ~AD193X_ADC_LEFT_HIGH; | 190 | adc_reg2 &= ~AD193X_ADC_LEFT_HIGH; |
190 | adc_reg &= ~AD193X_ADC_BCLK_INV; | 191 | adc_reg2 &= ~AD193X_ADC_BCLK_INV; |
191 | dac_reg &= ~AD193X_DAC_LEFT_HIGH; | 192 | dac_reg &= ~AD193X_DAC_LEFT_HIGH; |
192 | dac_reg &= ~AD193X_DAC_BCLK_INV; | 193 | dac_reg &= ~AD193X_DAC_BCLK_INV; |
193 | break; | 194 | break; |
194 | case SND_SOC_DAIFMT_NB_IF: /* normal bclk + invert frm */ | 195 | case SND_SOC_DAIFMT_NB_IF: /* normal bclk + invert frm */ |
195 | adc_reg |= AD193X_ADC_LEFT_HIGH; | 196 | adc_reg2 |= AD193X_ADC_LEFT_HIGH; |
196 | adc_reg &= ~AD193X_ADC_BCLK_INV; | 197 | adc_reg2 &= ~AD193X_ADC_BCLK_INV; |
197 | dac_reg |= AD193X_DAC_LEFT_HIGH; | 198 | dac_reg |= AD193X_DAC_LEFT_HIGH; |
198 | dac_reg &= ~AD193X_DAC_BCLK_INV; | 199 | dac_reg &= ~AD193X_DAC_BCLK_INV; |
199 | break; | 200 | break; |
200 | case SND_SOC_DAIFMT_IB_NF: /* invert bclk + normal frm */ | 201 | case SND_SOC_DAIFMT_IB_NF: /* invert bclk + normal frm */ |
201 | adc_reg &= ~AD193X_ADC_LEFT_HIGH; | 202 | adc_reg2 &= ~AD193X_ADC_LEFT_HIGH; |
202 | adc_reg |= AD193X_ADC_BCLK_INV; | 203 | adc_reg2 |= AD193X_ADC_BCLK_INV; |
203 | dac_reg &= ~AD193X_DAC_LEFT_HIGH; | 204 | dac_reg &= ~AD193X_DAC_LEFT_HIGH; |
204 | dac_reg |= AD193X_DAC_BCLK_INV; | 205 | dac_reg |= AD193X_DAC_BCLK_INV; |
205 | break; | 206 | break; |
206 | 207 | ||
207 | case SND_SOC_DAIFMT_IB_IF: /* invert bclk + frm */ | 208 | case SND_SOC_DAIFMT_IB_IF: /* invert bclk + frm */ |
208 | adc_reg |= AD193X_ADC_LEFT_HIGH; | 209 | adc_reg2 |= AD193X_ADC_LEFT_HIGH; |
209 | adc_reg |= AD193X_ADC_BCLK_INV; | 210 | adc_reg2 |= AD193X_ADC_BCLK_INV; |
210 | dac_reg |= AD193X_DAC_LEFT_HIGH; | 211 | dac_reg |= AD193X_DAC_LEFT_HIGH; |
211 | dac_reg |= AD193X_DAC_BCLK_INV; | 212 | dac_reg |= AD193X_DAC_BCLK_INV; |
212 | break; | 213 | break; |
@@ -216,26 +217,26 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai, | |||
216 | 217 | ||
217 | switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { | 218 | switch (fmt & SND_SOC_DAIFMT_MASTER_MASK) { |
218 | case SND_SOC_DAIFMT_CBM_CFM: /* codec clk & frm master */ | 219 | case SND_SOC_DAIFMT_CBM_CFM: /* codec clk & frm master */ |
219 | adc_reg |= AD193X_ADC_LCR_MASTER; | 220 | adc_reg2 |= AD193X_ADC_LCR_MASTER; |
220 | adc_reg |= AD193X_ADC_BCLK_MASTER; | 221 | adc_reg2 |= AD193X_ADC_BCLK_MASTER; |
221 | dac_reg |= AD193X_DAC_LCR_MASTER; | 222 | dac_reg |= AD193X_DAC_LCR_MASTER; |
222 | dac_reg |= AD193X_DAC_BCLK_MASTER; | 223 | dac_reg |= AD193X_DAC_BCLK_MASTER; |
223 | break; | 224 | break; |
224 | case SND_SOC_DAIFMT_CBS_CFM: /* codec clk slave & frm master */ | 225 | case SND_SOC_DAIFMT_CBS_CFM: /* codec clk slave & frm master */ |
225 | adc_reg |= AD193X_ADC_LCR_MASTER; | 226 | adc_reg2 |= AD193X_ADC_LCR_MASTER; |
226 | adc_reg &= ~AD193X_ADC_BCLK_MASTER; | 227 | adc_reg2 &= ~AD193X_ADC_BCLK_MASTER; |
227 | dac_reg |= AD193X_DAC_LCR_MASTER; | 228 | dac_reg |= AD193X_DAC_LCR_MASTER; |
228 | dac_reg &= ~AD193X_DAC_BCLK_MASTER; | 229 | dac_reg &= ~AD193X_DAC_BCLK_MASTER; |
229 | break; | 230 | break; |
230 | case SND_SOC_DAIFMT_CBM_CFS: /* codec clk master & frame slave */ | 231 | case SND_SOC_DAIFMT_CBM_CFS: /* codec clk master & frame slave */ |
231 | adc_reg &= ~AD193X_ADC_LCR_MASTER; | 232 | adc_reg2 &= ~AD193X_ADC_LCR_MASTER; |
232 | adc_reg |= AD193X_ADC_BCLK_MASTER; | 233 | adc_reg2 |= AD193X_ADC_BCLK_MASTER; |
233 | dac_reg &= ~AD193X_DAC_LCR_MASTER; | 234 | dac_reg &= ~AD193X_DAC_LCR_MASTER; |
234 | dac_reg |= AD193X_DAC_BCLK_MASTER; | 235 | dac_reg |= AD193X_DAC_BCLK_MASTER; |
235 | break; | 236 | break; |
236 | case SND_SOC_DAIFMT_CBS_CFS: /* codec clk & frm slave */ | 237 | case SND_SOC_DAIFMT_CBS_CFS: /* codec clk & frm slave */ |
237 | adc_reg &= ~AD193X_ADC_LCR_MASTER; | 238 | adc_reg2 &= ~AD193X_ADC_LCR_MASTER; |
238 | adc_reg &= ~AD193X_ADC_BCLK_MASTER; | 239 | adc_reg2 &= ~AD193X_ADC_BCLK_MASTER; |
239 | dac_reg &= ~AD193X_DAC_LCR_MASTER; | 240 | dac_reg &= ~AD193X_DAC_LCR_MASTER; |
240 | dac_reg &= ~AD193X_DAC_BCLK_MASTER; | 241 | dac_reg &= ~AD193X_DAC_BCLK_MASTER; |
241 | break; | 242 | break; |
@@ -243,7 +244,8 @@ static int ad193x_set_dai_fmt(struct snd_soc_dai *codec_dai, | |||
243 | return -EINVAL; | 244 | return -EINVAL; |
244 | } | 245 | } |
245 | 246 | ||
246 | snd_soc_write(codec, AD193X_ADC_CTRL2, adc_reg); | 247 | snd_soc_write(codec, AD193X_ADC_CTRL1, adc_reg1); |
248 | snd_soc_write(codec, AD193X_ADC_CTRL2, adc_reg2); | ||
247 | snd_soc_write(codec, AD193X_DAC_CTRL1, dac_reg); | 249 | snd_soc_write(codec, AD193X_DAC_CTRL1, dac_reg); |
248 | 250 | ||
249 | return 0; | 251 | return 0; |