ASoC: dt-bindings: add ESS Technology ES9039Q2M

Add a binding for the ES9039Q2M, a 32-bit two-channel audio DAC with an
asynchronous sample rate converter.

The part selects between two control personalities with its MODE pin:
hardware mode, strapped by HW0/HW1/HW2 with no control bus at all, and
software mode over I2C or SPI. This binding describes software mode over
I2C, which MODE = GND selects.

The four supply inputs are described and required. DVDD is not among
them: the part's 1.2V digital rail is generated on chip and the pin
takes only a decoupling capacitor. The datasheet asks for the supplies
in a set order - AVDD, then VCCA about 200us later, then the two
output-stage references, and the reverse on the way down - which the
description records, so a board with separately switchable rails has
it to hand.

Assisted-by: Claude:claude-opus-5
Signed-off-by: Karl Asseily <karl@asseily.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
Link: https://patch.msgid.link/20260918182317.143223-3-karl@asseily.com
Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Karl Asseily 2026-09-18 21:23:15 +03:00 committed by Mark Brown
parent beb56d1d3d
commit ab1a02163f

View File

@ -0,0 +1,94 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/esstech,es9039q2m.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: ESS Technology ES9039Q2M audio DAC
maintainers:
- Karl Asseily <karl@asseily.com>
description:
The ES9039Q2M is a 32-bit two-channel audio DAC supporting PCM to 768 kHz,
DSD64 to DSD1024, DoP and S/PDIF. It is controlled over I2C or SPI when the
MODE pin selects software mode; this binding covers the I2C interface. The
part contains an asynchronous sample rate converter, so the system clock need
not be synchronous with the audio bit or frame clocks.
The four supplies are all nominally 3.3V and the datasheet requires a set
order - AVDD first, then VCCA about 200us later, then AVCC_DAC1 and
AVCC_DAC2, and the reverse on the way down. DVDD, the part's 1.2V rail, is
on-chip and needs only its decoupling capacitor - it is not a supply input
and has no property here.
allOf:
- $ref: dai-common.yaml#
properties:
compatible:
const: esstech,es9039q2m
reg:
description:
I2C address, selected by the ADDR0 and ADDR1 pins - 0x48, 0x49, 0x4a or
0x4b for GND/GND, GND/AVDD, AVDD/GND and AVDD/AVDD respectively.
enum: [ 0x48, 0x49, 0x4a, 0x4b ]
clocks:
maxItems: 1
clock-names:
const: mclk
avdd-supply:
description:
3.3V supply for the part's internal digital regulator, pin AVDD. It is
the first rail up and the last down, per the ordering described above.
vcca-supply:
description: 3.3V analogue supply, pin VCCA.
avcc-dac1-supply:
description:
3.3V reference supply for the channel 1 analogue output stage, pin
AVCC_DAC1. The datasheet allows this rail to move by up to 15% where a
calibrating regulator tracks the DAC's output impedance.
avcc-dac2-supply:
description:
3.3V reference supply for the channel 2 analogue output stage, pin
AVCC_DAC2, with the same 15% allowance as channel 1.
"#sound-dai-cells":
const: 0
required:
- compatible
- reg
- avdd-supply
- vcca-supply
- avcc-dac1-supply
- avcc-dac2-supply
- "#sound-dai-cells"
unevaluatedProperties: false
examples:
- |
i2c {
#address-cells = <1>;
#size-cells = <0>;
audio-codec@48 {
compatible = "esstech,es9039q2m";
reg = <0x48>;
#sound-dai-cells = <0>;
clocks = <&dac_mclk>;
clock-names = "mclk";
avdd-supply = <&dac_3v3>;
vcca-supply = <&dac_3v3>;
avcc-dac1-supply = <&dac_avcc1>;
avcc-dac2-supply = <&dac_avcc2>;
};
};