[alsa-devel] [PATCH 0/3] ASoC: Add support for DA7219 audio codec
This patch set adds support for the DA7219 audio codec with built-in advanced accessory detection functionality. Patch set includes codec driver, associated DT bindings documentation and MAINTAINERS file updates to cover new bindings.
Adam Thomson (3): ASoC: codecs: Add da7219 codec driver ASoC: da7219: Add bindings documentation for DA7219 audio codec MAINTAINERS: da7219: Add entry to cover DA7219 bindings document
Documentation/devicetree/bindings/sound/da7219.txt | 106 ++ MAINTAINERS | 1 + include/sound/da7219-aad.h | 99 ++ include/sound/da7219.h | 76 + sound/soc/codecs/Kconfig | 4 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/da7219-aad.c | 800 +++++++++ sound/soc/codecs/da7219-aad.h | 209 +++ sound/soc/codecs/da7219.c | 1877 ++++++++++++++++++++ sound/soc/codecs/da7219.h | 807 +++++++++ 10 files changed, 3981 insertions(+) create mode 100644 Documentation/devicetree/bindings/sound/da7219.txt create mode 100644 include/sound/da7219-aad.h create mode 100644 include/sound/da7219.h create mode 100644 sound/soc/codecs/da7219-aad.c create mode 100644 sound/soc/codecs/da7219-aad.h create mode 100644 sound/soc/codecs/da7219.c create mode 100644 sound/soc/codecs/da7219.h
-- 1.9.3
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
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>; + }; + };
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)?
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?
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.
This adds an entry to indicate the DA7219 bindings document (and other Dialog codecs bindings documents) are supported.
Signed-off-by: Adam Thomson Adam.Thomson.Opensource@diasemi.com --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+)
diff --git a/MAINTAINERS b/MAINTAINERS index 7ba7ab7..a235822 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3361,6 +3361,7 @@ M: Support Opensource support.opensource@diasemi.com W: http://www.dialog-semiconductor.com/products S: Supported F: Documentation/hwmon/da90?? +F: Documentation/devicetree/bindings/sound/da[79]*.txt F: drivers/gpio/gpio-da90??.c F: drivers/hwmon/da90??-hwmon.c F: drivers/iio/adc/da91??-*.c
The patch
ASoC: da7219: Add entry to cover DA7219 bindings document
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next tree (usually sometime in the next 24 hours) and sent to Linus during the next merge window (or sooner if it is a bug fix), however if problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing and review of the tree, please engage with people reporting problems and send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they should be sent as incremental updates against current git, existing patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying to this mail.
Thanks, Mark
From 7c93377244329552a72912c63fd7503a4e88d6a1 Mon Sep 17 00:00:00 2001
From: Adam Thomson Adam.Thomson.Opensource@diasemi.com Date: Tue, 29 Sep 2015 16:44:12 +0100 Subject: [PATCH] ASoC: da7219: Add entry to cover DA7219 bindings document
This adds an entry to indicate the DA7219 bindings document (and other Dialog codecs bindings documents) are supported.
Signed-off-by: Adam Thomson Adam.Thomson.Opensource@diasemi.com Signed-off-by: Mark Brown broonie@kernel.org --- MAINTAINERS | 1 + 1 file changed, 1 insertion(+)
diff --git a/MAINTAINERS b/MAINTAINERS index 7ba7ab7..a235822 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -3361,6 +3361,7 @@ M: Support Opensource support.opensource@diasemi.com W: http://www.dialog-semiconductor.com/products S: Supported F: Documentation/hwmon/da90?? +F: Documentation/devicetree/bindings/sound/da[79]*.txt F: drivers/gpio/gpio-da90??.c F: drivers/hwmon/da90??-hwmon.c F: drivers/iio/adc/da91??-*.c
participants (3)
-
Adam Thomson
-
Mark Brown
-
Opensource [Adam Thomson]