diff options
| -rw-r--r-- | sound/soc/blackfin/bf5xx-tdm-pcm.c | 4 | ||||
| -rw-r--r-- | sound/soc/blackfin/bf5xx-tdm-pcm.h | 2 | ||||
| -rw-r--r-- | sound/soc/blackfin/bf5xx-tdm.h | 2 | ||||
| -rw-r--r-- | sound/soc/codecs/ad1938.c | 50 |
4 files changed, 37 insertions, 21 deletions
diff --git a/sound/soc/blackfin/bf5xx-tdm-pcm.c b/sound/soc/blackfin/bf5xx-tdm-pcm.c index af7fa8d7ff0d..ccb5e823bd18 100644 --- a/sound/soc/blackfin/bf5xx-tdm-pcm.c +++ b/sound/soc/blackfin/bf5xx-tdm-pcm.c | |||
| @@ -276,7 +276,7 @@ static void bf5xx_pcm_free_dma_buffers(struct snd_pcm *pcm) | |||
| 276 | sport_done(sport_handle); | 276 | sport_done(sport_handle); |
| 277 | } | 277 | } |
| 278 | 278 | ||
| 279 | static u64 bf5xx_pcm_dmamask = DMA_32BIT_MASK; | 279 | static u64 bf5xx_pcm_dmamask = DMA_BIT_MASK(32); |
| 280 | 280 | ||
| 281 | static int bf5xx_pcm_tdm_new(struct snd_card *card, struct snd_soc_dai *dai, | 281 | static int bf5xx_pcm_tdm_new(struct snd_card *card, struct snd_soc_dai *dai, |
| 282 | struct snd_pcm *pcm) | 282 | struct snd_pcm *pcm) |
| @@ -286,7 +286,7 @@ static int bf5xx_pcm_tdm_new(struct snd_card *card, struct snd_soc_dai *dai, | |||
| 286 | if (!card->dev->dma_mask) | 286 | if (!card->dev->dma_mask) |
| 287 | card->dev->dma_mask = &bf5xx_pcm_dmamask; | 287 | card->dev->dma_mask = &bf5xx_pcm_dmamask; |
| 288 | if (!card->dev->coherent_dma_mask) | 288 | if (!card->dev->coherent_dma_mask) |
| 289 | card->dev->coherent_dma_mask = DMA_32BIT_MASK; | 289 | card->dev->coherent_dma_mask = DMA_BIT_MASK(32); |
| 290 | 290 | ||
| 291 | if (dai->playback.channels_min) { | 291 | if (dai->playback.channels_min) { |
| 292 | ret = bf5xx_pcm_preallocate_dma_buffer(pcm, | 292 | ret = bf5xx_pcm_preallocate_dma_buffer(pcm, |
diff --git a/sound/soc/blackfin/bf5xx-tdm-pcm.h b/sound/soc/blackfin/bf5xx-tdm-pcm.h index 9e8473d1c389..ddc5047df88c 100644 --- a/sound/soc/blackfin/bf5xx-tdm-pcm.h +++ b/sound/soc/blackfin/bf5xx-tdm-pcm.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/sound/arm/bf5xx-tdm-pcm.h -- ALSA PCM interface for the Blackfin | 2 | * sound/soc/blackfin/bf5xx-tdm-pcm.h -- ALSA PCM interface for the Blackfin |
| 3 | * | 3 | * |
| 4 | * Copyright 2009 Analog Device Inc. | 4 | * Copyright 2009 Analog Device Inc. |
| 5 | * | 5 | * |
diff --git a/sound/soc/blackfin/bf5xx-tdm.h b/sound/soc/blackfin/bf5xx-tdm.h index e5157cd81c5e..618ec3d90cd4 100644 --- a/sound/soc/blackfin/bf5xx-tdm.h +++ b/sound/soc/blackfin/bf5xx-tdm.h | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * linux/sound/arm/bf5xx-i2s.h | 2 | * sound/soc/blackfin/bf5xx-tdm.h |
| 3 | * | 3 | * |
| 4 | * This program is free software; you can redistribute it and/or modify | 4 | * This program is free software; you can redistribute it and/or modify |
| 5 | * it under the terms of the GNU General Public License version 2 as | 5 | * it under the terms of the GNU General Public License version 2 as |
diff --git a/sound/soc/codecs/ad1938.c b/sound/soc/codecs/ad1938.c index ffc97c9b797f..aafda743fc8f 100644 --- a/sound/soc/codecs/ad1938.c +++ b/sound/soc/codecs/ad1938.c | |||
| @@ -72,14 +72,20 @@ static const struct snd_kcontrol_new ad1938_snd_controls[] = { | |||
| 72 | AD1938_DAC_R4_VOL, 0, 0xFF, 1), | 72 | AD1938_DAC_R4_VOL, 0, 0xFF, 1), |
| 73 | 73 | ||
| 74 | /* ADC switch control */ | 74 | /* ADC switch control */ |
| 75 | SOC_DOUBLE("ADC1 Switch", AD1938_ADC_CTRL0, AD1938_ADCL1_MUTE, AD1938_ADCR1_MUTE, 1, 1), | 75 | SOC_DOUBLE("ADC1 Switch", AD1938_ADC_CTRL0, AD1938_ADCL1_MUTE, |
| 76 | SOC_DOUBLE("ADC2 Switch", AD1938_ADC_CTRL0, AD1938_ADCL2_MUTE, AD1938_ADCR2_MUTE, 1, 1), | 76 | AD1938_ADCR1_MUTE, 1, 1), |
| 77 | SOC_DOUBLE("ADC2 Switch", AD1938_ADC_CTRL0, AD1938_ADCL2_MUTE, | ||
| 78 | AD1938_ADCR2_MUTE, 1, 1), | ||
| 77 | 79 | ||
| 78 | /* DAC switch control */ | 80 | /* DAC switch control */ |
| 79 | SOC_DOUBLE("DAC1 Switch", AD1938_DAC_CHNL_MUTE, AD1938_DACL1_MUTE, AD1938_DACR1_MUTE, 1, 1), | 81 | SOC_DOUBLE("DAC1 Switch", AD1938_DAC_CHNL_MUTE, AD1938_DACL1_MUTE, |
| 80 | SOC_DOUBLE("DAC2 Switch", AD1938_DAC_CHNL_MUTE, AD1938_DACL2_MUTE, AD1938_DACR2_MUTE, 1, 1), | 82 | AD1938_DACR1_MUTE, 1, 1), |
| 81 | SOC_DOUBLE("DAC3 Switch", AD1938_DAC_CHNL_MUTE, AD1938_DACL3_MUTE, AD1938_DACR3_MUTE, 1, 1), | 83 | SOC_DOUBLE("DAC2 Switch", AD1938_DAC_CHNL_MUTE, AD1938_DACL2_MUTE, |
| 82 | SOC_DOUBLE("DAC4 Switch", AD1938_DAC_CHNL_MUTE, AD1938_DACL4_MUTE, AD1938_DACR4_MUTE, 1, 1), | 84 | AD1938_DACR2_MUTE, 1, 1), |
| 85 | SOC_DOUBLE("DAC3 Switch", AD1938_DAC_CHNL_MUTE, AD1938_DACL3_MUTE, | ||
| 86 | AD1938_DACR3_MUTE, 1, 1), | ||
| 87 | SOC_DOUBLE("DAC4 Switch", AD1938_DAC_CHNL_MUTE, AD1938_DACL4_MUTE, | ||
| 88 | AD1938_DACR4_MUTE, 1, 1), | ||
| 83 | 89 | ||
| 84 | /* ADC high-pass filter */ | 90 | /* ADC high-pass filter */ |
| 85 | SOC_SINGLE("ADC High Pass Filter Switch", AD1938_ADC_CTRL0, | 91 | SOC_SINGLE("ADC High Pass Filter Switch", AD1938_ADC_CTRL0, |
| @@ -110,7 +116,8 @@ static int ad1938_mute(struct snd_soc_dai *dai, int mute) | |||
| 110 | int reg; | 116 | int reg; |
| 111 | 117 | ||
| 112 | reg = codec->read(codec, AD1938_DAC_CTRL2); | 118 | reg = codec->read(codec, AD1938_DAC_CTRL2); |
| 113 | reg = (mute > 0) ? reg | AD1938_DAC_MASTER_MUTE : reg & (~AD1938_DAC_MASTER_MUTE); | 119 | reg = (mute > 0) ? reg | AD1938_DAC_MASTER_MUTE : reg & |
| 120 | (~AD1938_DAC_MASTER_MUTE); | ||
| 114 | codec->write(codec, AD1938_DAC_CTRL2, reg); | 121 | codec->write(codec, AD1938_DAC_CTRL2, reg); |
| 115 | 122 | ||
| 116 | return 0; | 123 | return 0; |
| @@ -119,7 +126,8 @@ static int ad1938_mute(struct snd_soc_dai *dai, int mute) | |||
| 119 | static inline int ad1938_pll_powerctrl(struct snd_soc_codec *codec, int cmd) | 126 | static inline int ad1938_pll_powerctrl(struct snd_soc_codec *codec, int cmd) |
| 120 | { | 127 | { |
| 121 | int reg = codec->read(codec, AD1938_PLL_CLK_CTRL0); | 128 | int reg = codec->read(codec, AD1938_PLL_CLK_CTRL0); |
| 122 | reg = (cmd > 0) ? reg & (~AD1938_PLL_POWERDOWN) : reg | AD1938_PLL_POWERDOWN; | 129 | reg = (cmd > 0) ? reg & (~AD1938_PLL_POWERDOWN) : reg | |
| 130 | AD1938_PLL_POWERDOWN; | ||
| 123 | codec->write(codec, AD1938_PLL_CLK_CTRL0, reg); | 131 | codec->write(codec, AD1938_PLL_CLK_CTRL0, reg); |
| 124 | 132 | ||
| 125 | return 0; | 133 | return 0; |
| @@ -171,8 +179,8 @@ static int ad1938_set_dai_fmt(struct snd_soc_dai *codec_dai, | |||
| 171 | adc_reg = codec->read(codec, AD1938_ADC_CTRL2); | 179 | adc_reg = codec->read(codec, AD1938_ADC_CTRL2); |
| 172 | dac_reg = codec->read(codec, AD1938_DAC_CTRL1); | 180 | dac_reg = codec->read(codec, AD1938_DAC_CTRL1); |
| 173 | 181 | ||
| 174 | /* At present, the driver only support AUX ADC mode(SND_SOC_DAIFMT_I2S with TDM) | 182 | /* At present, the driver only support AUX ADC mode(SND_SOC_DAIFMT_I2S |
| 175 | * and ADC&DAC TDM mode(SND_SOC_DAIFMT_DSP_A) | 183 | * with TDM) and ADC&DAC TDM mode(SND_SOC_DAIFMT_DSP_A) |
| 176 | */ | 184 | */ |
| 177 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { | 185 | switch (fmt & SND_SOC_DAIFMT_FORMAT_MASK) { |
| 178 | case SND_SOC_DAIFMT_I2S: | 186 | case SND_SOC_DAIFMT_I2S: |
| @@ -363,7 +371,8 @@ static unsigned int ad1938_read_reg_cache(struct snd_soc_codec *codec, | |||
| 363 | * read from the ad1938 register space | 371 | * read from the ad1938 register space |
| 364 | */ | 372 | */ |
| 365 | 373 | ||
| 366 | static unsigned int ad1938_read_reg(struct snd_soc_codec *codec, unsigned int reg) | 374 | static unsigned int ad1938_read_reg(struct snd_soc_codec *codec, |
| 375 | unsigned int reg) | ||
| 367 | { | 376 | { |
| 368 | char w_buf[AD1938_SPI_BUFLEN]; | 377 | char w_buf[AD1938_SPI_BUFLEN]; |
| 369 | char r_buf[AD1938_SPI_BUFLEN]; | 378 | char r_buf[AD1938_SPI_BUFLEN]; |
| @@ -502,12 +511,19 @@ static int ad1938_register(struct ad1938_priv *ad1938) | |||
| 502 | ad1938_codec = codec; | 511 | ad1938_codec = codec; |
| 503 | 512 | ||
| 504 | /* default setting for ad1938 */ | 513 | /* default setting for ad1938 */ |
| 505 | codec->write(codec, AD1938_DAC_CHNL_MUTE, 0x0); /* unmute dac channels */ | 514 | |
| 506 | codec->write(codec, AD1938_DAC_CTRL2, 0x1A); /* de-emphasis: 48kHz, powedown dac */ | 515 | /* unmute dac channels */ |
| 507 | codec->write(codec, AD1938_DAC_CTRL0, 0x21); /* powerdown dac, dac tdm mode */ | 516 | codec->write(codec, AD1938_DAC_CHNL_MUTE, 0x0); |
| 508 | codec->write(codec, AD1938_ADC_CTRL0, 0x3); /* high-pass filter enable */ | 517 | /* de-emphasis: 48kHz, powedown dac */ |
| 509 | codec->write(codec, AD1938_ADC_CTRL1, 0x43); /* sata delay=1, adc aux mode */ | 518 | codec->write(codec, AD1938_DAC_CTRL2, 0x1A); |
| 510 | codec->write(codec, AD1938_PLL_CLK_CTRL0, 0x9D); /* pll input:mclki/xi */ | 519 | /* powerdown dac, dac in tdm mode */ |
| 520 | codec->write(codec, AD1938_DAC_CTRL0, 0x41); | ||
| 521 | /* high-pass filter enable */ | ||
| 522 | codec->write(codec, AD1938_ADC_CTRL0, 0x3); | ||
| 523 | /* sata delay=1, adc aux mode */ | ||
| 524 | codec->write(codec, AD1938_ADC_CTRL1, 0x43); | ||
| 525 | /* pll input: mclki/xi */ | ||
| 526 | codec->write(codec, AD1938_PLL_CLK_CTRL0, 0x9D); | ||
| 511 | codec->write(codec, AD1938_PLL_CLK_CTRL1, 0x04); | 527 | codec->write(codec, AD1938_PLL_CLK_CTRL1, 0x04); |
| 512 | 528 | ||
| 513 | ad1938_fill_cache(codec); | 529 | ad1938_fill_cache(codec); |
