diff mbox

[2/3] ASoC: da7219: Add bindings documentation for DA7219 audio codec

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

Commit Message

Adam Thomson Sept. 17, 2015, 4:01 p.m. UTC
Signed-off-by: Adam Thomson <Adam.Thomson.Opensource@diasemi.com>
---
 Documentation/devicetree/bindings/sound/da7219.txt | 106 +++++++++++++++++++++
 1 file changed, 106 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/sound/da7219.txt

Comments

Mark Brown Sept. 19, 2015, 5:10 p.m. UTC | #1
On Thu, Sep 17, 2015 at 05:01:16PM +0100, Adam Thomson wrote:

> +- dlg,io-lvl : Expected voltage level range for digital IO
> +	["2.5V_3.6V", "1.2V_2.8V"]

If the driver needs to read or set the voltage a supply is at it should
do that via the regulator API.

> +- dlg,cp-mchange : Charge pump voltage tracking mode
> +	["largest_vol", "dac_vol", "sig_mag"]
> +- dlg,cp-vol-thresh : Charge pump volume threshold value (6-bit value)
> +	[ 0 - 0x3F ]

Why are these in the device tree rather than runtime parameters?

> +Child node - 'da7219_aad':
> +
> +Required properties:
> +- interrupt-parent : Specifies the phandle of the interrupt controller to which
> +  the IRQs from DA7219 AAD block are delivered to.
> +- interrupts : IRQ line info for DA7219 AAD block.
> +  (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for
> +   further information relating to interrupt properties)

Why is this not specified at the device level (the device does not
appear to support other interrupts)?
Adam Thomson Sept. 21, 2015, 10:36 a.m. UTC | #2
On September 19, 2015 18:10, Mark Brown wrote:

> > +- dlg,io-lvl : Expected voltage level range for digital IO
> > +	["2.5V_3.6V", "1.2V_2.8V"]
> 
> If the driver needs to read or set the voltage a supply is at it should
> do that via the regulator API.

This would just be a read for the driver. However it's a fair point, so I'll
look to add passing of the regulator information for VDDIO, so i can set this
based on read voltage.

> 
> > +- dlg,cp-mchange : Charge pump voltage tracking mode
> > +	["largest_vol", "dac_vol", "sig_mag"]
> > +- dlg,cp-vol-thresh : Charge pump volume threshold value (6-bit value)
> > +	[ 0 - 0x3F ]
> 
> Why are these in the device tree rather than runtime parameters?
> 

From previous internal discussions, these seemed to be fire and forget
parameters, hence their inclusion in the DT binding, rather than as controls.
Personally didn't see either needing runtime updates.

> > +Child node - 'da7219_aad':
> > +
> > +Required properties:
> > +- interrupt-parent : Specifies the phandle of the interrupt controller to which
> > +  the IRQs from DA7219 AAD block are delivered to.
> > +- interrupts : IRQ line info for DA7219 AAD block.
> > +  (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for
> > +   further information relating to interrupt properties)
> 
> Why is this not specified at the device level (the device does not
> appear to support other interrupts)?

Given the way that the driver code was structured, and that the IRQ is only used
for accessory detection, I added it to the child node. The other option would
be to flatten out bindings, and remove the child node. Felt like keeping the
accessory detect items separate though was a sensible approach. What is your
feeling on this?
Mark Brown Sept. 21, 2015, 4:40 p.m. UTC | #3
On Mon, Sep 21, 2015 at 10:36:04AM +0000, Opensource [Adam Thomson] wrote:
> On September 19, 2015 18:10, Mark Brown wrote:

> > > +- dlg,cp-mchange : Charge pump voltage tracking mode
> > > +	["largest_vol", "dac_vol", "sig_mag"]
> > > +- dlg,cp-vol-thresh : Charge pump volume threshold value (6-bit value)
> > > +	[ 0 - 0x3F ]

> > Why are these in the device tree rather than runtime parameters?

> From previous internal discussions, these seemed to be fire and forget
> parameters, hence their inclusion in the DT binding, rather than as controls.
> Personally didn't see either needing runtime updates.

Make them runtime configurable.  People can do an at boot runtime
configuration if they like.

> 
> > > +Required properties:
> > > +- interrupt-parent : Specifies the phandle of the interrupt controller to which
> > > +  the IRQs from DA7219 AAD block are delivered to.
> > > +- interrupts : IRQ line info for DA7219 AAD block.
> > > +  (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for
> > > +   further information relating to interrupt properties)

> > Why is this not specified at the device level (the device does not
> > appear to support other interrupts)?

> Given the way that the driver code was structured, and that the IRQ is only used
> for accessory detection, I added it to the child node. The other option would
> be to flatten out bindings, and remove the child node. Felt like keeping the
> accessory detect items separate though was a sensible approach. What is your
> feeling on this?

The child node is fine for collecting the parameters but the chip
interrupt line should be at the chip level.
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/sound/da7219.txt b/Documentation/devicetree/bindings/sound/da7219.txt
new file mode 100644
index 0000000..b29fe2e
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/da7219.txt
@@ -0,0 +1,106 @@ 
+Dialog Semiconductor DA7219 Audio Codec bindings
+
+DA7219 is an audio codec with advanced accessory detect features.
+
+======
+
+Required properties:
+- compatible : Should be "dlg,da7219"
+- reg: Specifies the I2C slave address
+
+Optional properties:
+- 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,io-lvl : Expected voltage level range for digital IO
+	["2.5V_3.6V", "1.2V_2.8V"]
+- dlg,ldo-lvl : Required internal LDO voltage (mV) level
+	[<1050>, <1100>, <1200>, <1400>]
+- dlg,micbias-lvl : Voltage (mV) for Mic Bias
+	[<1800>, <2000>, <2200>, <2400>, <2600>, <2800>, <3000>]
+- dlg,mic-amp-in-sel : Mic input source type
+	["diff", "se_p", "se_n"]
+- dlg,cp-mchange : Charge pump voltage tracking mode
+	["largest_vol", "dac_vol", "sig_mag"]
+- dlg,cp-vol-thresh : Charge pump volume threshold value (6-bit value)
+	[ 0 - 0x3F ]
+
+======
+
+Child node - 'da7219_aad':
+
+Required properties:
+- interrupt-parent : Specifies the phandle of the interrupt controller to which
+  the IRQs from DA7219 AAD block are delivered to.
+- interrupts : IRQ line info for DA7219 AAD block.
+  (See Documentation/devicetree/bindings/interrupt-controller/interrupts.txt for
+   further information relating to interrupt properties)
+
+Optional properties:
+- dlg,micbias-pulse-lvl : Mic bias higher voltage pulse level (mV).
+	[<2800>, <2900>]
+- dlg,micbias-pulse-time : Mic bias higher voltage pulse duration (ms)
+- dlg,btn-cfg : Periodic button press measurements for 4-pole jack (ms)
+	[<2>, <5>, <10>, <50>, <100>, <200>, <500>]
+- dlg,mic-det-thr : Impedance threshold for mic detection measurement (Ohms)
+	[<200>, <500>, <750>, <1000>]
+- dlg,jack-ins-deb : Debounce time for jack insertion (ms)
+	[<5>, <10>, <20>, <50>, <100>, <200>, <500>, <1000>]
+- dlg,jack-det-rate: Jack type detection latency (3/4 pole)
+	["32ms_64ms", "64ms_128ms", "128ms_256ms", "256ms_512ms"]
+- dlg,jack-rem-deb : Debounce time for jack removal (ms)
+	[<1>, <5>, <10>, <20>]
+- dlg,a-d-btn-thr : Impedance threshold between buttons A and D
+	[0x0 - 0xFF]
+- dlg,d-b-btn-thr : Impedance threshold between buttons D and B
+	[0x0 - 0xFF]
+- dlg,b-c-btn-thr : Impedance threshold between buttons B and C
+	[0x0 - 0xFF]
+- dlg,c-mic-btn-thr : Impedance threshold between button C and Mic
+	[0x0 - 0xFF]
+- dlg,btn-avg : Number of 8-bit readings for averaged button measurement
+	[<1>, <2>, <4>, <8>]
+- dlg,adc-1bit-rpt : Repeat count for 1-bit button measurement
+	[<1>, <2>, <4>, <8>]
+
+======
+
+Example:
+
+	codec: da7219@1a {
+		compatible = "dlg,da7219";
+		reg = <0x1a>;
+
+		clocks = <&clks 201>;
+		clock-names = "mclk";
+
+		dlg,io-lvl = "1.2V_2.8V";
+		dlg,ldo-lvl = <1200>;
+
+		dlg,micbias-lvl = <2600>;
+		dlg,mic-amp-in-sel = "diff";
+
+		dlg,cp-mchange = "sig_mag";
+		dlg,cp-vol-thresh = <0x34>;
+
+		da7219_aad {
+			interrupt-parent = <&gpio6>;
+			interrupts = <11 IRQ_TYPE_LEVEL_HIGH>;
+
+			dlg,btn-cfg = <50>;
+			dlg,mic-det-thr = <500>;
+			dlg,jack-ins-deb = <20>;
+			dlg,jack-det-rate = "32ms_64ms";
+			dlg,jack-rem-deb = <1>;
+
+			dlg,a-d-btn-thr = <0xa>;
+			dlg,d-b-btn-thr = <0x16>;
+			dlg,b-c-btn-thr = <0x21>;
+			dlg,c-mic-btn-thr = <0x3E>;
+
+			dlg,btn-avg = <4>;
+			dlg,adc-1bit-rpt = <1>;
+		};
+	};