Wiki

Differences

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

Link to this comparison view

Both sides previous revision Previous revision
Next revision Both sides next revision
resources:tools-software:linux-drivers:sound:adau1373 [29 Aug 2011 14:58]
mhennerich [ADAU1373 driver]
resources:tools-software:linux-drivers:sound:adau1373 [30 Aug 2011 03:06]
larsc [DAI sysclk] typo
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 larsc