Loading Documentation/devicetree/bindings/sound/atmel-classd.txt +6 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ Required properties: Required elements: "pclk", "gclk" and "aclk". - clocks Please refer to clock-bindings.txt. - assigned-clocks Should be <&classd_gclk>. - assigned-clock-parents Should be <&audio_pll_pmc>. Optional properties: - pinctrl-names, pinctrl-0 Loading Loading @@ -43,6 +47,8 @@ classd: classd@fc048000 { dma-names = "tx"; clocks = <&classd_clk>, <&classd_gclk>, <&audio_pll_pmc>; clock-names = "pclk", "gclk", "aclk"; assigned-clocks = <&classd_gclk>; assigned-clock-parents = <&audio_pll_pmc>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_classd_default>; Loading Documentation/devicetree/bindings/sound/da7218.txt 0 → 100644 +104 −0 Original line number Diff line number Diff line Dialog Semiconductor DA7218 Audio Codec bindings DA7218 is an audio codec with HP detect feature. ====== Required properties: - compatible : Should be "dlg,da7217" or "dlg,da7218" - reg: Specifies the I2C slave address - VDD-supply: VDD power supply for the device - VDDMIC-supply: VDDMIC power supply for the device - VDDIO-supply: VDDIO power supply for the device (See Documentation/devicetree/bindings/regulator/regulator.txt for further information relating to regulators) Optional properties: - interrupt-parent: Specifies the phandle of the interrupt controller to which the IRQs from DA7218 are delivered to. - interrupts: IRQ line info for DA7218 chip. (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for further information relating to interrupt properties) - interrupt-names : Name associated with interrupt line. Should be "wakeup" if interrupt is to be used to wake system, otherwise "irq" should be used. - wakeup-source: Flag to indicate this device can wake system (suspend/resume). - clocks : phandle and clock specifier for codec MCLK. - clock-names : Clock name string for 'clocks' attribute, should be "mclk". - dlg,micbias1-lvl-millivolt : Voltage (mV) for Mic Bias 1 [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>] - dlg,micbias2-lvl-millivolt : Voltage (mV) for Mic Bias 2 [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>] - dlg,mic1-amp-in-sel : Mic1 input source type ["diff", "se_p", "se_n"] - dlg,mic2-amp-in-sel : Mic2 input source type ["diff", "se_p", "se_n"] - dlg,dmic1-data-sel : DMIC1 channel select based on clock edge. ["lrise_rfall", "lfall_rrise"] - dlg,dmic1-samplephase : When to sample audio from DMIC1. ["on_clkedge", "between_clkedge"] - dlg,dmic1-clkrate-hz : DMic1 clock frequency (Hz). [<1500000>, <3000000>] - dlg,dmic2-data-sel : DMic2 channel select based on clock edge. ["lrise_rfall", "lfall_rrise"] - dlg,dmic2-samplephase : When to sample audio from DMic2. ["on_clkedge", "between_clkedge"] - dlg,dmic2-clkrate-hz : DMic2 clock frequency (Hz). [<1500000>, <3000000>] - dlg,hp-diff-single-supply : Boolean flag, use single supply for HP (DA7217 only) ====== Optional Child node - 'da7218_hpldet' (DA7218 only): Optional properties: - dlg,jack-rate-us : Time between jack detect measurements (us) [<5>, <10>, <20>, <40>, <80>, <160>, <320>, <640>] - dlg,jack-debounce : Number of debounce measurements taken for jack detect [<0>, <2>, <3>, <4>] - dlg,jack-threshold-pct : Threshold level for jack detection (% of VDD) [<84>, <88>, <92>, <96>] - dlg,comp-inv : Boolean flag, invert comparator output - dlg,hyst : Boolean flag, enable hysteresis - dlg,discharge : Boolean flag, auto discharge of Mic Bias on jack removal ====== Example: codec: da7218@1a { compatible = "dlg,da7218"; reg = <0x1a>; interrupt-parent = <&gpio6>; interrupts = <11 IRQ_TYPE_LEVEL_HIGH>; wakeup-source; VDD-supply = <®_audio>; VDDMIC-supply = <®_audio>; VDDIO-supply = <®_audio>; clocks = <&clks 201>; clock-names = "mclk"; dlg,micbias1-lvl-millivolt = <2600>; dlg,micbias2-lvl-millivolt = <2600>; dlg,mic1-amp-in-sel = "diff"; dlg,mic2-amp-in-sel = "diff"; dlg,dmic1-data-sel = "lrise_rfall"; dlg,dmic1-samplephase = "on_clkedge"; dlg,dmic1-clkrate-hz = <3000000>; dlg,dmic2-data-sel = "lrise_rfall"; dlg,dmic2-samplephase = "on_clkedge"; dlg,dmic2-clkrate-hz = <3000000>; da7218_hpldet { dlg,jack-rate-us = <40>; dlg,jack-debounce = <2>; dlg,jack-threshold-pct = <84>; dlg,hyst; }; }; include/sound/da7218.h 0 → 100644 +109 −0 Original line number Diff line number Diff line /* * da7218.h - DA7218 ASoC Codec Driver Platform Data * * Copyright (c) 2015 Dialog Semiconductor * * Author: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. */ #ifndef _DA7218_PDATA_H #define _DA7218_PDATA_H /* Mic Bias */ enum da7218_micbias_voltage { DA7218_MICBIAS_1_2V = -1, DA7218_MICBIAS_1_6V, DA7218_MICBIAS_1_8V, DA7218_MICBIAS_2_0V, DA7218_MICBIAS_2_2V, DA7218_MICBIAS_2_4V, DA7218_MICBIAS_2_6V, DA7218_MICBIAS_2_8V, DA7218_MICBIAS_3_0V, }; enum da7218_mic_amp_in_sel { DA7218_MIC_AMP_IN_SEL_DIFF = 0, DA7218_MIC_AMP_IN_SEL_SE_P, DA7218_MIC_AMP_IN_SEL_SE_N, }; /* DMIC */ enum da7218_dmic_data_sel { DA7218_DMIC_DATA_LRISE_RFALL = 0, DA7218_DMIC_DATA_LFALL_RRISE, }; enum da7218_dmic_samplephase { DA7218_DMIC_SAMPLE_ON_CLKEDGE = 0, DA7218_DMIC_SAMPLE_BETWEEN_CLKEDGE, }; enum da7218_dmic_clk_rate { DA7218_DMIC_CLK_3_0MHZ = 0, DA7218_DMIC_CLK_1_5MHZ, }; /* Headphone Detect */ enum da7218_hpldet_jack_rate { DA7218_HPLDET_JACK_RATE_5US = 0, DA7218_HPLDET_JACK_RATE_10US, DA7218_HPLDET_JACK_RATE_20US, DA7218_HPLDET_JACK_RATE_40US, DA7218_HPLDET_JACK_RATE_80US, DA7218_HPLDET_JACK_RATE_160US, DA7218_HPLDET_JACK_RATE_320US, DA7218_HPLDET_JACK_RATE_640US, }; enum da7218_hpldet_jack_debounce { DA7218_HPLDET_JACK_DEBOUNCE_OFF = 0, DA7218_HPLDET_JACK_DEBOUNCE_2, DA7218_HPLDET_JACK_DEBOUNCE_3, DA7218_HPLDET_JACK_DEBOUNCE_4, }; enum da7218_hpldet_jack_thr { DA7218_HPLDET_JACK_THR_84PCT = 0, DA7218_HPLDET_JACK_THR_88PCT, DA7218_HPLDET_JACK_THR_92PCT, DA7218_HPLDET_JACK_THR_96PCT, }; struct da7218_hpldet_pdata { enum da7218_hpldet_jack_rate jack_rate; enum da7218_hpldet_jack_debounce jack_debounce; enum da7218_hpldet_jack_thr jack_thr; bool comp_inv; bool hyst; bool discharge; }; struct da7218_pdata { /* Mic */ enum da7218_micbias_voltage micbias1_lvl; enum da7218_micbias_voltage micbias2_lvl; enum da7218_mic_amp_in_sel mic1_amp_in_sel; enum da7218_mic_amp_in_sel mic2_amp_in_sel; /* DMIC */ enum da7218_dmic_data_sel dmic1_data_sel; enum da7218_dmic_data_sel dmic2_data_sel; enum da7218_dmic_samplephase dmic1_samplephase; enum da7218_dmic_samplephase dmic2_samplephase; enum da7218_dmic_clk_rate dmic1_clk_rate; enum da7218_dmic_clk_rate dmic2_clk_rate; /* HP Diff Supply - DA7217 only */ bool hp_diff_single_supply; /* HP Detect - DA7218 only */ struct da7218_hpldet_pdata *hpldet_pdata; }; #endif /* _DA7218_PDATA_H */ sound/soc/atmel/atmel-classd.c +8 −4 Original line number Diff line number Diff line Loading @@ -106,7 +106,7 @@ static const struct snd_pcm_hardware atmel_classd_hw = { .rates = ATMEL_CLASSD_RATES, .rate_min = 8000, .rate_max = 96000, .channels_min = 2, .channels_min = 1, .channels_max = 2, .buffer_bytes_max = 64 * 1024, .period_bytes_min = 256, Loading Loading @@ -145,7 +145,7 @@ static const struct snd_soc_dai_ops atmel_classd_cpu_dai_ops = { static struct snd_soc_dai_driver atmel_classd_cpu_dai = { .playback = { .channels_min = 2, .channels_min = 1, .channels_max = 2, .rates = ATMEL_CLASSD_RATES, .formats = SNDRV_PCM_FMTBIT_S16_LE,}, Loading @@ -171,9 +171,13 @@ atmel_classd_platform_configure_dma(struct snd_pcm_substream *substream, return -EINVAL; } if (params_channels(params) == 1) slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES; else slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; slave_config->direction = DMA_MEM_TO_DEV; slave_config->dst_addr = dd->phy_base + CLASSD_THR; slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; slave_config->dst_maxburst = 1; slave_config->src_maxburst = 1; slave_config->device_fc = false; Loading Loading @@ -486,7 +490,7 @@ static struct snd_soc_dai_driver atmel_classd_codec_dai = { .name = ATMEL_CLASSD_CODEC_DAI_NAME, .playback = { .stream_name = "Playback", .channels_min = 2, .channels_min = 1, .channels_max = 2, .rates = ATMEL_CLASSD_RATES, .formats = SNDRV_PCM_FMTBIT_S16_LE, Loading sound/soc/codecs/Kconfig +4 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ config SND_SOC_ALL_CODECS select SND_SOC_CX20442 if TTY select SND_SOC_DA7210 if SND_SOC_I2C_AND_SPI select SND_SOC_DA7213 if I2C select SND_SOC_DA7218 if I2C select SND_SOC_DA7219 if I2C select SND_SOC_DA732X if I2C select SND_SOC_DA9055 if I2C Loading Loading @@ -450,6 +451,9 @@ config SND_SOC_DA7210 config SND_SOC_DA7213 tristate config SND_SOC_DA7218 tristate config SND_SOC_DA7219 tristate Loading Loading
Documentation/devicetree/bindings/sound/atmel-classd.txt +6 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ Required properties: Required elements: "pclk", "gclk" and "aclk". - clocks Please refer to clock-bindings.txt. - assigned-clocks Should be <&classd_gclk>. - assigned-clock-parents Should be <&audio_pll_pmc>. Optional properties: - pinctrl-names, pinctrl-0 Loading Loading @@ -43,6 +47,8 @@ classd: classd@fc048000 { dma-names = "tx"; clocks = <&classd_clk>, <&classd_gclk>, <&audio_pll_pmc>; clock-names = "pclk", "gclk", "aclk"; assigned-clocks = <&classd_gclk>; assigned-clock-parents = <&audio_pll_pmc>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_classd_default>; Loading
Documentation/devicetree/bindings/sound/da7218.txt 0 → 100644 +104 −0 Original line number Diff line number Diff line Dialog Semiconductor DA7218 Audio Codec bindings DA7218 is an audio codec with HP detect feature. ====== Required properties: - compatible : Should be "dlg,da7217" or "dlg,da7218" - reg: Specifies the I2C slave address - VDD-supply: VDD power supply for the device - VDDMIC-supply: VDDMIC power supply for the device - VDDIO-supply: VDDIO power supply for the device (See Documentation/devicetree/bindings/regulator/regulator.txt for further information relating to regulators) Optional properties: - interrupt-parent: Specifies the phandle of the interrupt controller to which the IRQs from DA7218 are delivered to. - interrupts: IRQ line info for DA7218 chip. (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for further information relating to interrupt properties) - interrupt-names : Name associated with interrupt line. Should be "wakeup" if interrupt is to be used to wake system, otherwise "irq" should be used. - wakeup-source: Flag to indicate this device can wake system (suspend/resume). - clocks : phandle and clock specifier for codec MCLK. - clock-names : Clock name string for 'clocks' attribute, should be "mclk". - dlg,micbias1-lvl-millivolt : Voltage (mV) for Mic Bias 1 [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>] - dlg,micbias2-lvl-millivolt : Voltage (mV) for Mic Bias 2 [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>] - dlg,mic1-amp-in-sel : Mic1 input source type ["diff", "se_p", "se_n"] - dlg,mic2-amp-in-sel : Mic2 input source type ["diff", "se_p", "se_n"] - dlg,dmic1-data-sel : DMIC1 channel select based on clock edge. ["lrise_rfall", "lfall_rrise"] - dlg,dmic1-samplephase : When to sample audio from DMIC1. ["on_clkedge", "between_clkedge"] - dlg,dmic1-clkrate-hz : DMic1 clock frequency (Hz). [<1500000>, <3000000>] - dlg,dmic2-data-sel : DMic2 channel select based on clock edge. ["lrise_rfall", "lfall_rrise"] - dlg,dmic2-samplephase : When to sample audio from DMic2. ["on_clkedge", "between_clkedge"] - dlg,dmic2-clkrate-hz : DMic2 clock frequency (Hz). [<1500000>, <3000000>] - dlg,hp-diff-single-supply : Boolean flag, use single supply for HP (DA7217 only) ====== Optional Child node - 'da7218_hpldet' (DA7218 only): Optional properties: - dlg,jack-rate-us : Time between jack detect measurements (us) [<5>, <10>, <20>, <40>, <80>, <160>, <320>, <640>] - dlg,jack-debounce : Number of debounce measurements taken for jack detect [<0>, <2>, <3>, <4>] - dlg,jack-threshold-pct : Threshold level for jack detection (% of VDD) [<84>, <88>, <92>, <96>] - dlg,comp-inv : Boolean flag, invert comparator output - dlg,hyst : Boolean flag, enable hysteresis - dlg,discharge : Boolean flag, auto discharge of Mic Bias on jack removal ====== Example: codec: da7218@1a { compatible = "dlg,da7218"; reg = <0x1a>; interrupt-parent = <&gpio6>; interrupts = <11 IRQ_TYPE_LEVEL_HIGH>; wakeup-source; VDD-supply = <®_audio>; VDDMIC-supply = <®_audio>; VDDIO-supply = <®_audio>; clocks = <&clks 201>; clock-names = "mclk"; dlg,micbias1-lvl-millivolt = <2600>; dlg,micbias2-lvl-millivolt = <2600>; dlg,mic1-amp-in-sel = "diff"; dlg,mic2-amp-in-sel = "diff"; dlg,dmic1-data-sel = "lrise_rfall"; dlg,dmic1-samplephase = "on_clkedge"; dlg,dmic1-clkrate-hz = <3000000>; dlg,dmic2-data-sel = "lrise_rfall"; dlg,dmic2-samplephase = "on_clkedge"; dlg,dmic2-clkrate-hz = <3000000>; da7218_hpldet { dlg,jack-rate-us = <40>; dlg,jack-debounce = <2>; dlg,jack-threshold-pct = <84>; dlg,hyst; }; };
include/sound/da7218.h 0 → 100644 +109 −0 Original line number Diff line number Diff line /* * da7218.h - DA7218 ASoC Codec Driver Platform Data * * Copyright (c) 2015 Dialog Semiconductor * * Author: Adam Thomson <Adam.Thomson.Opensource@diasemi.com> * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. */ #ifndef _DA7218_PDATA_H #define _DA7218_PDATA_H /* Mic Bias */ enum da7218_micbias_voltage { DA7218_MICBIAS_1_2V = -1, DA7218_MICBIAS_1_6V, DA7218_MICBIAS_1_8V, DA7218_MICBIAS_2_0V, DA7218_MICBIAS_2_2V, DA7218_MICBIAS_2_4V, DA7218_MICBIAS_2_6V, DA7218_MICBIAS_2_8V, DA7218_MICBIAS_3_0V, }; enum da7218_mic_amp_in_sel { DA7218_MIC_AMP_IN_SEL_DIFF = 0, DA7218_MIC_AMP_IN_SEL_SE_P, DA7218_MIC_AMP_IN_SEL_SE_N, }; /* DMIC */ enum da7218_dmic_data_sel { DA7218_DMIC_DATA_LRISE_RFALL = 0, DA7218_DMIC_DATA_LFALL_RRISE, }; enum da7218_dmic_samplephase { DA7218_DMIC_SAMPLE_ON_CLKEDGE = 0, DA7218_DMIC_SAMPLE_BETWEEN_CLKEDGE, }; enum da7218_dmic_clk_rate { DA7218_DMIC_CLK_3_0MHZ = 0, DA7218_DMIC_CLK_1_5MHZ, }; /* Headphone Detect */ enum da7218_hpldet_jack_rate { DA7218_HPLDET_JACK_RATE_5US = 0, DA7218_HPLDET_JACK_RATE_10US, DA7218_HPLDET_JACK_RATE_20US, DA7218_HPLDET_JACK_RATE_40US, DA7218_HPLDET_JACK_RATE_80US, DA7218_HPLDET_JACK_RATE_160US, DA7218_HPLDET_JACK_RATE_320US, DA7218_HPLDET_JACK_RATE_640US, }; enum da7218_hpldet_jack_debounce { DA7218_HPLDET_JACK_DEBOUNCE_OFF = 0, DA7218_HPLDET_JACK_DEBOUNCE_2, DA7218_HPLDET_JACK_DEBOUNCE_3, DA7218_HPLDET_JACK_DEBOUNCE_4, }; enum da7218_hpldet_jack_thr { DA7218_HPLDET_JACK_THR_84PCT = 0, DA7218_HPLDET_JACK_THR_88PCT, DA7218_HPLDET_JACK_THR_92PCT, DA7218_HPLDET_JACK_THR_96PCT, }; struct da7218_hpldet_pdata { enum da7218_hpldet_jack_rate jack_rate; enum da7218_hpldet_jack_debounce jack_debounce; enum da7218_hpldet_jack_thr jack_thr; bool comp_inv; bool hyst; bool discharge; }; struct da7218_pdata { /* Mic */ enum da7218_micbias_voltage micbias1_lvl; enum da7218_micbias_voltage micbias2_lvl; enum da7218_mic_amp_in_sel mic1_amp_in_sel; enum da7218_mic_amp_in_sel mic2_amp_in_sel; /* DMIC */ enum da7218_dmic_data_sel dmic1_data_sel; enum da7218_dmic_data_sel dmic2_data_sel; enum da7218_dmic_samplephase dmic1_samplephase; enum da7218_dmic_samplephase dmic2_samplephase; enum da7218_dmic_clk_rate dmic1_clk_rate; enum da7218_dmic_clk_rate dmic2_clk_rate; /* HP Diff Supply - DA7217 only */ bool hp_diff_single_supply; /* HP Detect - DA7218 only */ struct da7218_hpldet_pdata *hpldet_pdata; }; #endif /* _DA7218_PDATA_H */
sound/soc/atmel/atmel-classd.c +8 −4 Original line number Diff line number Diff line Loading @@ -106,7 +106,7 @@ static const struct snd_pcm_hardware atmel_classd_hw = { .rates = ATMEL_CLASSD_RATES, .rate_min = 8000, .rate_max = 96000, .channels_min = 2, .channels_min = 1, .channels_max = 2, .buffer_bytes_max = 64 * 1024, .period_bytes_min = 256, Loading Loading @@ -145,7 +145,7 @@ static const struct snd_soc_dai_ops atmel_classd_cpu_dai_ops = { static struct snd_soc_dai_driver atmel_classd_cpu_dai = { .playback = { .channels_min = 2, .channels_min = 1, .channels_max = 2, .rates = ATMEL_CLASSD_RATES, .formats = SNDRV_PCM_FMTBIT_S16_LE,}, Loading @@ -171,9 +171,13 @@ atmel_classd_platform_configure_dma(struct snd_pcm_substream *substream, return -EINVAL; } if (params_channels(params) == 1) slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_2_BYTES; else slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; slave_config->direction = DMA_MEM_TO_DEV; slave_config->dst_addr = dd->phy_base + CLASSD_THR; slave_config->dst_addr_width = DMA_SLAVE_BUSWIDTH_4_BYTES; slave_config->dst_maxburst = 1; slave_config->src_maxburst = 1; slave_config->device_fc = false; Loading Loading @@ -486,7 +490,7 @@ static struct snd_soc_dai_driver atmel_classd_codec_dai = { .name = ATMEL_CLASSD_CODEC_DAI_NAME, .playback = { .stream_name = "Playback", .channels_min = 2, .channels_min = 1, .channels_max = 2, .rates = ATMEL_CLASSD_RATES, .formats = SNDRV_PCM_FMTBIT_S16_LE, Loading
sound/soc/codecs/Kconfig +4 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ config SND_SOC_ALL_CODECS select SND_SOC_CX20442 if TTY select SND_SOC_DA7210 if SND_SOC_I2C_AND_SPI select SND_SOC_DA7213 if I2C select SND_SOC_DA7218 if I2C select SND_SOC_DA7219 if I2C select SND_SOC_DA732X if I2C select SND_SOC_DA9055 if I2C Loading Loading @@ -450,6 +451,9 @@ config SND_SOC_DA7210 config SND_SOC_DA7213 tristate config SND_SOC_DA7218 tristate config SND_SOC_DA7219 tristate Loading