ASoC: Add support for DA7217 and DA7218 audio codecs
Subsystems (4)
v2 cover ASoC: Add support for DA7217 and DA7218 audio codecs
This patch set adds DT and ASoC codec driver support for DA7217 and DA7218.
Changes are based against v4.3 kernel version.
Changes in v2:
- Removed Internal LDO voltage selection from DT
- BiQuad filter coefficients removed from DT, no programmed using mixer controls.
- ALC calibration no longer bypasses regmap cache and instead saves & restores registers around procedure, to avoid issues with concurrent regmap access.
- Removed all unnecessary default settings for mixers in probe.
- Reporting of mic level detection event to user-space, through input VOICECOMMAND key event, removed as not intended for this purpose. Alternative solution required as follow up. Event masked off until solution in place.
- Additional error checking & loggin around mclk usage, in sysclk and bias_level functions.
Adam Thomson (2):
ASoC: da7218: Add bindings documentation for DA7218 audio codec
ASoC: codecs: Add da7218 codec driver
Documentation/devicetree/bindings/sound/da7218.txt | 106 + include/sound/da7218.h | 109 + sound/soc/codecs/da7218.c | 3305 ++++++++++++++++++++ sound/soc/codecs/da7218.h | 1415 +++++++++ 4 files changed, 4935 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/da7218.txt create mode 100644 include/sound/da7218.h create mode 100644 sound/soc/codecs/da7218.c create mode 100644 sound/soc/codecs/da7218.h
--
1.9.3
PATCH v2 1/2 ASoC: da7218: Add bindings documentation for DA7218 audio codec
--- Documentation/devicetree/bindings/sound/da7218.txt | 106 +++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/da7218.txt
Documentation/devicetree/bindings/sound/da7218.txt new file +106 -0
@@ -0,0 +1,106 @@ +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 : Voltage (mV) for Mic Bias 1 + [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>] +- dlg,micbias2-lvl : 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 : 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 : 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 : 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 : 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,ldo-lvl = <1200>; + + dlg,micbias1-lvl = <2600>; + dlg,micbias2-lvl = <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 = <3000000>; + dlg,dmic2-data-sel = "lrise_rfall"; + dlg,dmic2-samplephase = "on_clkedge"; + dlg,dmic2-clkrate = <3000000>; + + da7218_hpldet { + dlg,jack-rate = <40>; + dlg,jack-debounce = <2>; + dlg,jack-threshold = <84>; + dlg,hyst; + }; + };
--
1.9.3
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Rob Herring
maintainerRe: [PATCH v2 1/2] ASoC: da7218: Add bindings documentation for DA7218 audio codec
Quoted 35 lines · Adam Thomson
Signed-off-by Adam Thomson <[email protected]>--- Documentation/devicetree/bindings/sound/da7218.txt | 106 +++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/da7218.txtDocumentation/devicetree/bindings/sound/da7218.txt new file +23
-0@@ -0,0 +1,106 @@ +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
Documentation/devicetree/bindings/sound/da7218.txt line 33
Quoted 10 lines
Documentation/devicetree/bindings/sound/da7218.txt new file +10
-0+ 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 : Voltage (mV) for Mic Bias 1 + [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>] +- dlg,micbias2-lvl : Voltage (mV) for Mic Bias 2 + [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>]
Units please (-microvolt).
Quoted 16 lines
Documentation/devicetree/bindings/sound/da7218.txt new file +16
-0+- 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 : 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 : DMic2 clock frequency (Hz). + [<1500000>, <3000000>]
Documentation/devicetree/bindings/sound/da7218.txt line 59
Quoted 10 lines
Documentation/devicetree/bindings/sound/da7218.txt new file +10
-0+- 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 : Time between jack detect measurements (us) + [<5>, <10>, <20>, <40>, <80>, <160>, <320>, <640>]
Units
Rob
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
RE: [PATCH v2 1/2] ASoC: da7218: Add bindings documentation for DA7218 audio codec
Quoted 8 lines · Rob Herring
Review
Quoted 2 lines
+- dlg,micbias1-lvl : Voltage (mV) for Mic Bias 1
(quoted diff) +1
-0+ [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>,<3000>]
Review
Quoted 2 lines
+- dlg,micbias2-lvl : Voltage (mV) for Mic Bias 2
(quoted diff) +1
-0+ [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>,<3000>]
Units please (-microvolt).
I refer back to our previous discussion (https://lkml.org/lkml/2015/10/8/661).
This doesn't add anything and makes the binding name unnecessarily long. Why is this being enforced? Whoever uses the binding will have to look at the documentation to understand which values are valid anyway, so this seems like cruft.
Quoted 5 lines
Documentation/devicetree/bindings/sound/da7218.txt line 59
Quoted 3 lines
Documentation/devicetree/bindings/sound/da7218.txt new file +3
-0+Optional properties: +- dlg,jack-rate : Time between jack detect measurements (us) + [<5>, <10>, <20>, <40>, <80>, <160>, <320>, <640>]Units
ditto.
Rob Herring
maintainerRe: [PATCH v2 1/2] ASoC: da7218: Add bindings documentation for DA7218 audio codec
Quoted 9 lines · Opensource [Adam Thomson]
Quoted 7 lines · Rob Herring
Quoted 2 lines
+- dlg,micbias1-lvl : Voltage (mV) for Mic Bias 1 + [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>,<3000>]
Quoted 2 lines
+- dlg,micbias2-lvl : Voltage (mV) for Mic Bias 2 + [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>,<3000>]
Quoted 7 lines
Quoted 1 line
Units please (-microvolt).
I refer back to our previous discussion (https://lkml.org/lkml/2015/10/8/661).
This doesn't add anything and makes the binding name unnecessarily long. Why is this being enforced? Whoever uses the binding will have to look at the documentation to understand which values are valid anyway, so this seems like cruft.
It is simply standard, best practice for new bindings. Certainly there are examples that don't follow this, but they are either old or escaped review.
Drop the 'lvl' part if you are so concerned about length.
Rob
RE: [PATCH v2 1/2] ASoC: da7218: Add bindings documentation for DA7218 audio codec
Quoted 15 lines · Rob Herring
Quoted 7 lines
Quoted 7 lines
Quoted 2 lines
+- dlg,micbias1-lvl : Voltage (mV) for Mic Bias 1 + [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>,<3000>]
Quoted 2 lines
+- dlg,micbias2-lvl : Voltage (mV) for Mic Bias 2 + [<1200>, <1600>, <1800>, <2000>, <2200>, <2400>, <2600>, <2800>,<3000>]
Quoted 7 lines
Quoted 1 line
Units please (-microvolt).
I refer back to our previous discussion (https://lkml.org/lkml/2015/10/8/661).
This doesn't add anything and makes the binding name unnecessarily long. Why is this being enforced? Whoever uses the binding will have to look at the documentation to understand which values are valid anyway, so this seems like cruft.
Quoted 5 lines
It is simply standard, best practice for new bindings. Certainly there are examples that don't follow this, but they are either old or escaped review.
Drop the 'lvl' part if you are so concerned about length.
If this is a standard, then maybe this should be explicitly documented and pushed to all other maintainers so it isn't escaping review? Otherwise you're left with a disparity which suggests it isn't standard at all. Personally I stand by that for device specific bindings this shouldn't apply as it gains nothing except achieving an overly long binding, or you end up cutting down the descriptive part of the name to accommodate units at the end.
PATCH v2 2/2 ASoC: codecs: Add da7218 codec driver
In reply to Adam ThomsonThis adds support for DA7217 and DA7218 audio codecs.
--- include/sound/da7218.h | 109 ++ sound/soc/codecs/da7218.c | 3305 +++++++++++++++++++++++++++++++++++++++++++++ sound/soc/codecs/da7218.h | 1415 +++++++++++++++++++ 3 files changed, 4829 insertions(+) create mode 100644 include/sound/da7218.h create mode 100644 sound/soc/codecs/da7218.c create mode 100644 sound/soc/codecs/da7218.h
include/sound/da7218.h new file +109 -0
@@ -0,0 +1,109 @@ +/* +* da7218.h - DA7218 ASoC Codec Driver Platform Data +* +* Copyright (c) 2015 Dialog Semiconductor +* +* Author: Adam Thomson <[email protected]> +* +* 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/codecs/da7218.c new file +3305 -0
2,891 lines not on this page · raw message
sound/soc/codecs/da7218.h new file +1415 -0
1,415 lines not on this page · raw message
The rest of this diff is not shown. View the raw message.
--
1.9.3
Part of the diff is not shown here. View the raw message.