diff mbox

[1/2] ASoC: da7218: Add bindings documentation for DA7218 audio codec

Message ID b7132781a4a41a20549e13b1835bb7f808f6be82.1446718490.git.Adam.Thomson.Opensource@diasemi.com (mailing list archive)
State New, archived
Headers show

Commit Message

Adam Thomson Nov. 5, 2015, 10:43 a.m. UTC
Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
---
 Documentation/devicetree/bindings/sound/da7218.txt | 116 +++++++++++++++++++++
 1 file changed, 116 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/da7218.txt

Comments

Mark Brown Nov. 5, 2015, 2:58 p.m. UTC | #1
On Thu, Nov 05, 2015 at 10:43:15AM +0000, Adam Thomson wrote:

> +- dlg,ldo-lvl : Required internal LDO voltage (mV) level
> +	[<1050>, <1100>, <1200>, <1400>]

Why would this ever be anything other than the minimum voltage, and
might we not want to vary it at runtime?

> +- dlg,biquad-cfg : List of data & address pairs to configure BiQuad filters
> +	[ < {data1} {addr1} {data2} {addr2} ... >; ]
> +- dlg,st-biquad-cfg : List of data & address pairs to configure Sidetone
> +		      BiQuad filters
> +	[ < {data1} {addr1} {data2} {addr2} ... >; ]

These look like DSP coefficients which I would therefore expect to be
configurable at runtime via a binary control rather than specified in
the DT - why are they in the DT?
Adam Thomson Nov. 5, 2015, 5:59 p.m. UTC | #2
On November 05, 2015 14:59, Mark Brown wrote:

> > +- dlg,ldo-lvl : Required internal LDO voltage (mV) level
> > +	[<1050>, <1100>, <1200>, <1400>]
> 
> Why would this ever be anything other than the minimum voltage, and
> might we not want to vary it at runtime?

Normally you are correct and you'll want minimum voltage for the digital engine
but there may be the possibility for certain platform scenarios that to meet
timings a higher voltage is required. Would prefer to leave this in in case it
is required in the future. As a side, the default setting is the lowest voltage,
if this binding is not provided.

> 
> > +- dlg,biquad-cfg : List of data & address pairs to configure BiQuad filters
> > +	[ < {data1} {addr1} {data2} {addr2} ... >; ]
> > +- dlg,st-biquad-cfg : List of data & address pairs to configure Sidetone
> > +		      BiQuad filters
> > +	[ < {data1} {addr1} {data2} {addr2} ... >; ]
> 
> These look like DSP coefficients which I would therefore expect to be
> configurable at runtime via a binary control rather than specified in
> the DT - why are they in the DT?

The expectation was these would be set once and left for a platform, which is
why I added them to the DT. However there's no reason they couldn't be moved
to binary control. Having looked at other codecs, I assume SND_SOC_BYTES* would
be the preferred method for setting this kind of data?
Mark Brown Nov. 6, 2015, 10:30 a.m. UTC | #3
On Thu, Nov 05, 2015 at 05:59:29PM +0000, Opensource [Adam Thomson] wrote:
> On November 05, 2015 14:59, Mark Brown wrote:

> > > +- dlg,ldo-lvl : Required internal LDO voltage (mV) level
> > > +	[<1050>, <1100>, <1200>, <1400>]

> > Why would this ever be anything other than the minimum voltage, and
> > might we not want to vary it at runtime?

> Normally you are correct and you'll want minimum voltage for the digital engine
> but there may be the possibility for certain platform scenarios that to meet
> timings a higher voltage is required. Would prefer to leave this in in case it
> is required in the future. As a side, the default setting is the lowest voltage,
> if this binding is not provided.

That doesn't make a huge degree of sense - your non-specific "certain
platform scenarios" are almost certainly going to be DVFS things where
you need to boost the voltage of the LDO when the device needs to
operate at particularly high frequencies in which case the driver really
ought to just manage the voltage appropriately as required (ideally only
boosting it at the times where the extra load exists).

Unless you can be more specific about what the intended use is this just
doesn't seem like something we should be specifying in DT.

> > These look like DSP coefficients which I would therefore expect to be
> > configurable at runtime via a binary control rather than specified in
> > the DT - why are they in the DT?

> The expectation was these would be set once and left for a platform, which is
> why I added them to the DT. However there's no reason they couldn't be moved
> to binary control. Having looked at other codecs, I assume SND_SOC_BYTES* would
> be the preferred method for setting this kind of data?

Yes.
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/sound/da7218.txt b/Documentation/devicetree/bindings/sound/da7218.txt
new file mode 100644
index 0000000..ae7053d
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/da7218.txt
@@ -0,0 +1,116 @@ 
+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,ldo-lvl : Required internal LDO voltage (mV) level
+	[<1050>, <1100>, <1200>, <1400>]
+- 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,biquad-cfg : List of data & address pairs to configure BiQuad filters
+	[ < {data1} {addr1} {data2} {addr2} ... >; ]
+- dlg,st-biquad-cfg : List of data & address pairs to configure Sidetone
+		      BiQuad filters
+	[ < {data1} {addr1} {data2} {addr2} ... >; ]
+- 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 = <&reg_audio>;
+		VDDMIC-supply = <&reg_audio>;
+		VDDIO-supply = <&reg_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>;
+
+		dlg,biquad-cfg = <0x9c 0x00 0x40 0x01 0xd0 0x02 0x81 0x03>;
+		dlg,st-biquad-cfg = <0x00 0x00 0x40 0x01 0x00 0x02 0x00 0x03>;
+
+		da7218_hpldet {
+			dlg,jack-rate = <40>;
+			dlg,jack-debounce = <2>;
+			dlg,jack-threshold = <84>;
+			dlg,hyst;
+		};
+	};