Wiki

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
resources:tools-software:linux-drivers:sound:adau1373 [26 Aug 2011 03:04] – basic driver description Lars-Peter Clausenresources:tools-software:linux-drivers:sound:adau1373 [30 Aug 2011 03:06] – [DAI sysclk] typo Lars-Peter Clausen
Line 1: Line 1:
-====== ADAU1373 driver ======+====== ADAU1373 Sound CODEC Linux Driver ======
  
 ===== Supported Devices ===== ===== Supported Devices =====
  
-This driver supports the+This driver supports the\\
 [[adi>ADAU1373]] [[adi>ADAU1373]]
  
-===== Source =====+====== Source Code ======
  
 ==== Status ==== ==== Status ====
Line 20: Line 20:
 | include | [[git.linux.org>include/sound/adau1373.h]] | | include | [[git.linux.org>include/sound/adau1373.h]] |
  
-===== Example device initialization =====+====== Example device initialization ======
  
 {{page>software/linux/docs/platform_and_bus_model#Platform Data&noheader&firstseconly&noeditbtn}} {{page>software/linux/docs/platform_and_bus_model#Platform Data&noheader&firstseconly&noeditbtn}}
Line 80: Line 80:
 ===== ALSA Controls ===== ===== ALSA Controls =====
  
-^ Name ^  Description ^ Configuration ^ +^ Name ^ Description ^ Configuration ^ 
-| AIF1 Capture Volume | | | +| AIF1 Capture Volume | Digital Audio Interface A Recording Volume | | 
-| AIF2 Capture Volume | | | +| AIF2 Capture Volume | Digital Audio Interface B Recording Volume | | 
-| AIF3 Capture Volume | | | +| AIF3 Capture Volume | Digital Audio Interface C Recording Volume | | 
-| ADC Capture Volume  | | | +| ADC Capture Volume | ADC Recording Volume | | 
-| DMIC Capture Volume  | | | +| DMIC Capture Volume | DMIC Recording Volume | | 
-AIF1 Playback Volume  | | | +Input 1 Capture Volume | Input 1 Gain | | 
-AIF2 Playback Volume  | | | +Input 2 Capture Volume | Input 2 Gain | | 
-AIF3 Playback Volume  | | | +Input 3 Capture Volume | Input 3 Gain | | 
-DAC1 Playback Volume  | | | +Input 4 Capture Volume | Input 4 Gain | | 
-DAC2 Playback Volume  | | | +Input 1 Boost Capture Volume | Input 1 ADC Boost (+20dB) | | 
-Lineout1 Playback Volume  | | | +Input 2 Boost Capture Volume | Input 2 ADC Boost (+20dB) | | 
-Speaker Playback Volume  | | | +Input 3 Boost Capture Volume | Input 3 ADC Boost (+20dB) | | 
-Headphone Playback Volume | | | +Input 4 Boost Capture Volume | Input 4 ADC Boost (+20dB) | | 
-Input 1 Capture Volume | | | +| AIF1 Playback Volume | Digital Audio Interface A Playback Datapath Volume | | 
-Input 2 Capture Volume | | | +AIF2 Playback Volume | Digital Audio Interface B Playback Datapath Volume | | 
-Input 3 Capture Volume | | | +AIF3 Playback Volume | Digital Audio Interface C Playback Datapath Volume | | 
-Input 4 Capture Volume | | | +DAC1 Playback Volume | DAC1 Playback Volume | | 
-Earpiece Playback Volume | | | +DAC2 Playback Volume | DAC2 Playback Volume | | 
-AIF3 Boost Playback Volume | | | +Lineout1 Playback Volume | Lineout 1 Volume | | 
-AIF2 Boost Playback Volume | | | +Lineout2 Playback Volume | Lineout 1 Volume Single-ended lineout 
-AIF1 Boost Playback Volume | | | +Speaker Playback Volume  Speaker Out Volume | | 
-AIF3 Boost Capture Volume | | | +Headphone Playback Volume | Heaphone Out Volume| | 
-AIF2 Boost Capture Volume | | | +Earpiece Playback Volume | Earpiece Amplifier Gain | | 
-AIF1 Boost Capture Volume | | | +AIF1 Boost Playback Volume | Digital Audio Interface A Playback Gain (+6dB) | | 
-DMIC Boost Capture Volume | | | +AIF2 Boost Playback Volume | Digital Audio Interface B Playback Gain (+6dB) | | 
-ADC Boost Capture Volume | | | +AIF3 Boost Playback Volume | Digital Audio Interface C Playback Gain (+6dB) | | 
-DAC2 Boost Playback Volume | | | +AIF1 Boost Capture Volume | Digital Audio Interface C Recording Gain (+6dB) | | 
-DAC1 Boost Playback Volume | | | +AIF2 Boost Capture Volume | Digital Audio Interface C Recording Gain (+6dB) | | 
-Input 1 Boost Capture Volume | | | +AIF3 Boost Capture Volume | Digital Audio Interface C Recording Gain (+6dB) | | 
-Input 2 Boost Capture Volume | | | +ADC Boost Capture Volume | ADC Recording Gain (+6dB) | | 
-Input 3 Boost Capture Volume | | | +DMIC Boost Capture Volume | DMIC Recording Gain (+6dB) | | 
-Input 4 Boost Capture Volume | | | +DAC1 Boost Playback Volume | DAC1 Playback Gain (+6dB) | | 
-| Speaker Boost Playback Volume | | | +DAC2 Boost Playback Volume | DAC1 Playback Gain (+6dB) | | 
-| Lineout1 LR Mux | | | +| Speaker Boost Playback Volume | Speaker Output Gain  | | 
-| Speaker LR Mux | | | +| Lineout1 LR Mux | Lineout1 Left-Right Mux (Mono Stereo Control)\\ Valid values: "Mute", "Right Channel (L+R)", "Left Channel (L+R)", "Stereo" 
-| HPF Cutoff | | | +| Lineout2 LR Mux  | Lineout2 Left-Right Mux (Mono Stereo Control)\\ Valid values: "Mute", "Right Channel (L+R)", "Left Channel (L+R)", "Stereo" | Single-ended lineout 
-| HPF Switch | | | +| Speaker LR Mux | Speaker Left-Right Mux (Mono Stereo Control)\\ Valid values: "Mute", "Right Channel (L+R)", "Left Channel (L+R)", "Stereo" | | 
-| HPF Channel | | | +| HPF Cutoff | High-pass-filter cutoff frequency.\\ Valid values: "3.7Hz", "50Hz", "100Hz", ... steps of 50Hz ..., "800Hz" | | 
-| Bass HPF Cutoff | | | +| HPF Switch | Enable/Disable High-pass-filter | | 
-| Bass Clip Level Threshold | | | +| HPF Channel | Hight-pass-filter channel.\\ Valid values: "Channel1", "Channel2", "Channel3", "Channel4", "Channel5" | | 
-| Bass LPF Cutoff | | | +| Bass HPF Cutoff | Bass High-pass-filter cutoff frequency.\\ Valid values:  "158Hz", "232Hz", "347Hz", "520Hz" | | 
-| Bass Playback Switch | | | +| Bass Clip Level Threshold | Signal Extend Density (Clip Level). Overdrive level for bass enhancement. \\ Valid values: "0.125", "0.250", "0.370", "0.500", "0.625", "0.750", "0.875" | | 
-| Bass Playback Volume | | | +| Bass LPF Cutoff | Bass Low-pass-filter cutoff frequency.\\ Valid values: "801Hz", "1001Hz" | | 
-| Bass Channel | | | +| Bass Playback Switch | Enable/Disable Bass Enhancement | | 
-| 3D Freq | +| Bass Playback Volume | Bass Enhancement Gain | | 
-| 3D Level | | | +| Bass Channel | Bass Enhancement Channel.\\ Valid values: "Channel1", "Channel2", "Channel3", "Channel4", "Channel5"  | | 
-| 3D Playback Switch | | | +| 3D Freq | 3D Enhancement cutoff frequency (relative to the sampling rate).\\ Valid values: "No 3D", "0.03125 fs", "0.04583 fs", "0.075 fs", "0.11458 fs", "0.16875 fs", "0.27083 fs" 
-| 3D Playback Volume | | | +| 3D Level | 3D Enhancement effect level. \\ Valid values: "0%", "6.67%", "13.33%", "20%", "26.67%", "33.33%", "40%", "46.67%", "53.33%", \\ "60%", "66.67%", "73.33%", "80%", "86.67", "93.33%", "100%" | | 
-| 3D Channel | | | +| 3D Playback Switch | Enable/Disable 3D Enhancement | | 
-| Zero Cross Switch | | | +| 3D Playback Volume | 3D Enhancement Gain | | 
-| Lineout2 Playback Volume | | Single-ended lineout | +| 3D Channel | 3D Enhancement Channel.\\ Valid values: "Channel1", "Channel2", "Channel3", "Channel4", "Channel5" | | 
-| Lineout2 LR Mux  | | Single-ended lineout +| Zero Cross Switch | Enable/Disable Zero-Cross-Detection for volume updates | | 
-| DRC1 Channel | | | +| DRC1 Channel | Dynamic Range Control 1 Channel.\\ Valid values: "Channel1", "Channel2", "Channel3", "Channel4", "Channel5" | | 
-| DRC2 Channel | | | +| DRC2 Channel | Dynamic Range Control 2 Channel.\\ Valid values: "Channel1", "Channel2", "Channel3", "Channel4", "Channel5" | | 
-| DRC3 Channel | | |+| DRC3 Channel | Dynamic Range Control 3 Channel.\\ Valid values: "Channel1", "Channel2", "Channel3", "Channel4", "Channel5" | |
  
-===== Supported DAI formats =====+===== PLL Configuration ====== 
 + 
 +The ADAU1373 features two PLLs: 
 + 
 +<code c> 
 +enum adau1373_pll { 
 +    ADAU1373_PLL1 = 0, 
 +    ADAU1373_PLL2 = 1, 
 +}; 
 +</code> 
 + 
 +Each PLLs input frequency can be selected from a variety of signals:  
 +<code c> 
 +enum adau1373_pll_src { 
 +    ADAU1373_PLL_SRC_MCLK1 = 0, 
 +    ADAU1373_PLL_SRC_BCLK1 = 1, 
 +    ADAU1373_PLL_SRC_BCLK2 = 2, 
 +    ADAU1373_PLL_SRC_BCLK3 = 3, 
 +    ADAU1373_PLL_SRC_LRCLK1 = 4, 
 +    ADAU1373_PLL_SRC_LRCLK2 = 5, 
 +    ADAU1373_PLL_SRC_LRCLK3 = 6, 
 +    ADAU1373_PLL_SRC_GPIO1 = 7, 
 +    ADAU1373_PLL_SRC_GPIO2 = 8, 
 +    ADAU1373_PLL_SRC_GPIO3 = 9, 
 +    ADAU1373_PLL_SRC_GPIO4 = 10, 
 +    ADAU1373_PLL_SRC_MCLK2 = 11, 
 +}; 
 +</code> 
 + 
 +The input frequency must configured to be between 7813 and 27000000 Hz. The output frequency must be configured to be between 45158000 and 49152000. Configuring the PLL with other input or output frequency will fail. 
 + 
 +The PLL runs at 1024 times the base sample rate. So for a 48000 Hz based sample rate you'd normally choose 49152000 Hz for the PLL output frequncey and for a 44100 Hz based sample rate 45158400 Hz. 
 + 
 +===== DAI configuration ===== 
 + 
 +The codec driver registers three DAIs: 
 +  * "adau1373-aif1" (Digital Audio Interface A) 
 +  * "adau1373-aif2" (Digital Audio Interface B) 
 +  * "adau1373-aif3" (Digital Audio Interface C) 
 + 
 +==== Supported DAI formats ====
  
 ^ Name ^ Supported by driver ^ Description ^ ^ Name ^ Supported by driver ^ Description ^
Line 158: Line 198:
 | SND_SOC_DAIFMT_CBS_CFS | yes | Codec bit- and frameclock slave | | SND_SOC_DAIFMT_CBS_CFS | yes | Codec bit- and frameclock slave |
  
 +==== DAI sysclk ====
 +
 +The DAIs can either use PLL1 or PLL2 as source. When configuring a DAI its rate should be set to the rate of the source PLL.
 +
 +<code c>
 +enum adau1373_clk_src {
 +    ADAU1373_CLK_SRC_PLL1 = 0,
 +    ADAU1373_CLK_SRC_PLL2 = 1,
 +};
 +</code>
 +
 +==== Example DAI configuration ====
 +
 +<code c>
 +static int bfin_eval_adau1373_hw_params(struct snd_pcm_substream *substream,
 + struct snd_pcm_hw_params *params)
 +{
 + struct snd_soc_pcm_runtime *rtd = substream->private_data;
 + struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
 + struct snd_soc_dai *codec_dai = rtd->codec_dai;
 + int ret;
 + int pll_rate;
 +
 + ret = snd_soc_dai_set_fmt(cpu_dai, SND_SOC_DAIFMT_I2S |
 + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
 + if (ret)
 + return ret;
 +
 + ret = snd_soc_dai_set_fmt(codec_dai, SND_SOC_DAIFMT_I2S |
 + SND_SOC_DAIFMT_NB_NF | SND_SOC_DAIFMT_CBM_CFM);
 + if (ret)
 + return ret;
 +
 + switch (params_rate(params)) {
 + case 48000:
 + case 8000:
 + case 12000:
 + case 16000:
 + case 24000:
 + case 32000:
 + pll_rate = 48000 * 1024;
 + break;
 + case 44100:
 + case 7350:
 + case 11025:
 + case 14700:
 + case 22050:
 + case 29400:
 + pll_rate = 44100 * 1024;
 + break;
 + default:
 + return -EINVAL;
 + }
 +
 + ret = snd_soc_dai_set_pll(codec_dai, ADAU1373_PLL1,
 + ADAU1373_PLL_SRC_MCLK1, 12288000, pll_rate);
 + if (ret)
 + return ret;
 +
 + ret = snd_soc_dai_set_sysclk(codec_dai, ADAU1373_CLK_SRC_PLL1, pll_rate,
 + SND_SOC_CLOCK_IN);
 +
 + return ret;
 +}
 +
 +static int bfin_eval_adau1373_codec_init(struct snd_soc_pcm_runtime *rtd)
 +{
 + struct snd_soc_dai *codec_dai = rtd->codec_dai;
 + unsigned int pll_rate = 48000 * 1024;
 + int ret;
 +
 + ret = snd_soc_dai_set_pll(codec_dai, ADAU1373_PLL1,
 + ADAU1373_PLL_SRC_MCLK1, 12288000, pll_rate);
 + if (ret)
 + return ret;
 +
 + ret = snd_soc_dai_set_sysclk(codec_dai, ADAU1373_CLK_SRC_PLL1, pll_rate,
 + SND_SOC_CLOCK_IN);
 +
 + return ret;
 +}
 +static struct snd_soc_ops bfin_eval_adau1373_ops = {
 + .hw_params = bfin_eval_adau1373_hw_params,
 +};
 +
 +static struct snd_soc_dai_link bfin_eval_adau1373_dai = {
 + .name = "adau1373",
 + .stream_name = "adau1373",
 + .cpu_dai_name = "bfin-i2s.0",
 + .codec_dai_name = "adau1373-aif1",
 + .platform_name = "bfin-i2s-pcm-audio",
 + .codec_name = "adau1373.0-001a",
 + .ops = &bfin_eval_adau1373_ops,
 + .init = bfin_eval_adau1373_codec_init,
 +};
 +</code>
  
 ====== ADAU1373 evaluation board driver ====== ====== ADAU1373 evaluation board driver ======
resources/tools-software/linux-drivers/sound/adau1373.txt · Last modified: 23 Feb 2017 12:47 by Lars-Peter Clausen