[PATCH 03/13] dt-bindings: a2b: Analog Devices AD24xx devices

Alvin Šipraga
2024-05-17T12:58:49Z

From: Alvin Šipraga <alsi@bang-olufsen.dk>

Add device tree bindings for the AD24xx series A2B transceiver chips,
including their functional blocks.

Signed-off-by: Alvin Šipraga <alsi@bang-olufsen.dk>
---
.../devicetree/bindings/a2b/adi,ad24xx-clk.yaml | 53 +++++
.../devicetree/bindings/a2b/adi,ad24xx-codec.yaml | 52 +++++
.../devicetree/bindings/a2b/adi,ad24xx-gpio.yaml | 76 +++++++
.../devicetree/bindings/a2b/adi,ad24xx-i2c.yaml | 55 +++++
.../devicetree/bindings/a2b/adi,ad24xx.yaml | 253 +++++++++++++++++++++
5 files changed, 489 insertions(+)

diff --git a/Documentation/devicetree/bindings/a2b/adi,ad24xx-clk.yaml b/Documentation/devicetree/bindings/a2b/adi,ad24xx-clk.yaml
new file mode 100644
index 000000000000..819efaa6a3f9
--- /dev/null
+++ b/Documentation/devicetree/bindings/a2b/adi,ad24xx-clk.yaml
@@ -0,0 +1,53 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/a2b/adi,ad24xx-clk.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Analog Devices Inc. AD24xx clock functional block
+
+maintainers:
+ - Alvin Šipraga <alsi@bang-olufsen.dk>
+
+allOf:
+ - $ref: /schemas/clock/clock.yaml
+
+properties:
+ compatible:
+ enum:
+ - adi,ad2420-clk
+ - adi,ad2421-clk
+ - adi,ad2422-clk
+ - adi,ad2425-clk
+ - adi,ad2426-clk
+ - adi,ad2427-clk
+ - adi,ad2428-clk
+ - adi,ad2429-clk
+
+required:
+ - compatible
+ - clock-output-names
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ a2b {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ node@1 {
+ compatible = "adi,ad2425-node";
+ reg = <1>;
+ interrupts = <1>;
+ adi,tdm-mode = <16>;
+ adi,tdm-slot-size = <32>;
+
+ clock {
+ compatible = "adi,ad2425-clk";
+ #clock-cells = <1>;
+ clock-indices = <1>;
+ clock-output-names = "A2B1 CLKOUT2";
+ };
+ };
+ };
diff --git a/Documentation/devicetree/bindings/a2b/adi,ad24xx-codec.yaml b/Documentation/devicetree/bindings/a2b/adi,ad24xx-codec.yaml
new file mode 100644
index 000000000000..eee12f1c810e
--- /dev/null
+++ b/Documentation/devicetree/bindings/a2b/adi,ad24xx-codec.yaml
@@ -0,0 +1,52 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/a2b/adi,ad24xx-codec.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Analog Devices Inc. AD24xx I2S/TDM functional block
+
+maintainers:
+ - Alvin Šipraga <alsi@bang-olufsen.dk>
+
+allOf:
+ - $ref: /schemas/sound/dai-common.yaml#
+
+properties:
+ compatible:
+ enum:
+ - adi,ad2403-codec
+ - adi,ad2410-codec
+ - adi,ad2425-codec
+ - adi,ad2428-codec
+ - adi,ad2429-codec
+
+ '#sound-dai-cells':
+ const: 0
+
+required:
+ - compatible
+ - '#sound-dai-cells'
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ a2b {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ node@2 {
+ compatible = "adi,ad2428-node";
+ reg = <2>;
+ interrupts = <2>;
+ adi,tdm-mode = <8>;
+ adi,tdm-slot-size = <32>;
+
+ codec {
+ compatible = "adi,ad2428-codec";
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "A2B Sub2";
+ };
+ };
+ };
diff --git a/Documentation/devicetree/bindings/a2b/adi,ad24xx-gpio.yaml b/Documentation/devicetree/bindings/a2b/adi,ad24xx-gpio.yaml
new file mode 100644
index 000000000000..e2b99c711a47
--- /dev/null
+++ b/Documentation/devicetree/bindings/a2b/adi,ad24xx-gpio.yaml
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/a2b/adi,ad24xx-gpio.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Analog Devices Inc. AD24xx GPIO functional block
+
+maintainers:
+ - Alvin Šipraga <alsi@bang-olufsen.dk>
+
+properties:
+ compatible:
+ enum:
+ - adi,ad2401-gpio
+ - adi,ad2402-gpio
+ - adi,ad2403-gpio
+ - adi,ad2410-gpio
+ - adi,ad2420-gpio
+ - adi,ad2421-gpio
+ - adi,ad2422-gpio
+ - adi,ad2425-gpio
+ - adi,ad2426-gpio
+ - adi,ad2427-gpio
+ - adi,ad2428-gpio
+ - adi,ad2429-gpio
+
+ gpio-controller: true
+
+ '#gpio-cells':
+ const: 2
+
+ interrupt-controller: true
+
+ '#interrupt-cells':
+ const: 2
+
+ gpio-line-names: true
+ gpio-reserved-ranges: true
+
+required:
+ - compatible
+ - gpio-controller
+ - '#gpio-cells'
+
+dependencies:
+ interrupt-controller: [ '#interrupt-cells' ]
+ '#interrupt-cells': [ interrupt-controller ]
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ a2b {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ node@0 {
+ compatible = "adi,ad2428-node";
+ reg = <0>;
+ interrupts = <0>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+ adi,tdm-mode = <16>;
+ adi,tdm-slot-size = <32>;
+
+ gpio {
+ compatible = "adi,ad2428-gpio";
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ gpio-reserved-ranges = <0 1>;
+ };
+ };
+ };
diff --git a/Documentation/devicetree/bindings/a2b/adi,ad24xx-i2c.yaml b/Documentation/devicetree/bindings/a2b/adi,ad24xx-i2c.yaml
new file mode 100644
index 000000000000..ac52f184004d
--- /dev/null
+++ b/Documentation/devicetree/bindings/a2b/adi,ad24xx-i2c.yaml
@@ -0,0 +1,55 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/a2b/adi,ad24xx-i2c.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Analog Devices Inc. AD24xx I2C controller functional block
+
+maintainers:
+ - Alvin Šipraga <alsi@bang-olufsen.dk>
+
+allOf:
+ - $ref: /schemas/i2c/i2c-controller.yaml
+
+properties:
+ compatible:
+ enum:
+ - adi,ad2401-i2c
+ - adi,ad2402-i2c
+ - adi,ad2403-i2c
+ - adi,ad2410-i2c
+ - adi,ad2420-i2c
+ - adi,ad2421-i2c
+ - adi,ad2422-i2c
+ - adi,ad2425-i2c
+ - adi,ad2426-i2c
+ - adi,ad2427-i2c
+ - adi,ad2428-i2c
+
+required:
+ - compatible
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ a2b {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ node@1 {
+ compatible = "adi,ad2425-node";
+ reg = <1>;
+ interrupts = <1>;
+ adi,tdm-mode = <16>;
+ adi,tdm-slot-size = <32>;
+
+ i2c {
+ compatible = "adi,ad2425-i2c";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ clock-frequency = <400000>;
+ };
+ };
+ };
diff --git a/Documentation/devicetree/bindings/a2b/adi,ad24xx.yaml b/Documentation/devicetree/bindings/a2b/adi,ad24xx.yaml
new file mode 100644
index 000000000000..dcda15e8032a
--- /dev/null
+++ b/Documentation/devicetree/bindings/a2b/adi,ad24xx.yaml
@@ -0,0 +1,253 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/a2b/adi,ad24xx.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Analog Devices Inc. AD24xx Automotive Audio Bus A2B Transceiver
+
+description: |
+ AD24xx chips provide A2B bus functionality together with several peripheral
+ functions, including GPIO, I2S/TDM, an I2C controller interface, and
+ programmable clock outputs.
+
+maintainers:
+ - Alvin Šipraga <alsi@bang-olufsen.dk>
+
+properties:
+ compatible:
+ enum:
+ - adi,ad2403
+ - adi,ad2410
+ - adi,ad2425
+ - adi,ad2428
+ - adi,ad2429
+
+ reg-names:
+ items:
+ - const: base
+ - const: bus
+
+ reg:
+ items:
+ - description: Normal I2C address of the chip
+ - description: Auxiliary BUS_ADDR I2C address of the chip
+
+ '#address-cells':
+ const: 1
+
+ '#size-cells':
+ const: 0
+
+ clock-names:
+ items:
+ - const: sync
+
+ clocks:
+ items:
+ - description: SYNC input pin clock source
+
+ vin-supply:
+ description: Optional regulator for supply voltage to VIN pin
+
+ bus-supply:
+ description: Optional regulator for out-of-band supply voltage to
+ subodrinate nodes' VIN pins
+
+ interrupts: true
+
+ interrupt-controller: true
+
+ '#interrupt-cells':
+ const: 1
+
+patternProperties:
+ '^node@[0-9]+$':
+ type: object
+ unevaluatedProperties: false
+
+ properties:
+ compatible:
+ enum:
+ - adi,ad2401-node
+ - adi,ad2402-node
+ - adi,ad2403-node
+ - adi,ad2410-node
+ - adi,ad2420-node
+ - adi,ad2421-node
+ - adi,ad2422-node
+ - adi,ad2425-node
+ - adi,ad2426-node
+ - adi,ad2427-node
+ - adi,ad2428-node
+ - adi,ad2429-node
+
+ reg:
+ maxItems: 1
+
+ interrupts:
+ maxItems: 1
+
+ interrupt-controller: true
+
+ '#interrupt-cells':
+ const: 1
+
+ gpio:
+ $ref: adi,ad24xx-gpio.yaml#
+
+ codec:
+ $ref: adi,ad24xx-codec.yaml#
+
+ i2c:
+ $ref: adi,ad24xx-i2c.yaml#
+
+ clock:
+ $ref: adi,ad24xx-clk.yaml#
+
+ adi,tdm-mode:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: TDM mode
+ enum: [2, 4, 8, 12, 16, 20, 24, 32]
+
+ adi,tdm-slot-size:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: TDM slot size
+ enum: [16, 32]
+
+ adi,invert-sync:
+ description: Falling edge of SYNC pin indicates the start of an audio
+ frame, as opposed to rising edge.
+ type: boolean
+
+ adi,early-sync:
+ description: The SYNC pin changes one cycle before the MSB of the first
+ data slot.
+ type: boolean
+
+ adi,alternating-sync:
+ description: Drive SYNC pin during first half of I2S/TDM data
+ transmission rather than just pulsing it for once cycle.
+ type: boolean
+
+ adi,rx-on-dtx1:
+ description: Use the DTX1 pin for I2S/TDM RX in place of the DRX1 pin.
+ type: boolean
+
+ adi,a2b-external-switch-mode-1:
+ description: Use external switch mode 1 instead of 0 on the assumption
+ that the downstream node is not using A2B bus power.
+ type: boolean
+
+ adi,drive-strength:
+ $ref: /schemas/types.yaml#/definitions/uint32
+ description: Configures drive strength low (0) or high (1, default).
+ enum: [0, 1]
+ default: 1
+
+ adi,invert-interrupt:
+ description: Invert polarity of IRQ pin, making it active low.
+ type: boolean
+
+ adi,tristate-interrupt:
+ description: Rather than always actively driving the IRQ pin, only drive
+ when the interrupt is active and otherwise set to tristate (high-Z).
+ type: boolean
+
+ required:
+ - compatible
+ - reg
+ - adi,tdm-mode
+ - adi,tdm-slot-size
+
+ dependencies:
+ interrupt-controller: [ '#interrupt-cells' ]
+ '#interrupt-cells': [ interrupt-controller ]
+
+required:
+ - compatible
+ - reg-names
+ - reg
+ - clock-names
+ - clocks
+ - '#address-cells'
+ - '#size-cells'
+ - interrupts
+ - interrupt-controller
+ - '#interrupt-cells'
+ - node@0
+
+unevaluatedProperties: false
+
+examples:
+ - |
+ sync_clk: sync-clock {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <48000>;
+ };
+
+ i2c {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ a2b@68 {
+ compatible = "adi,ad2428";
+ reg-names = "base", "bus";
+ reg = <0x68>, <0x69>;
+ clock-names = "sync";
+ clocks = <&sync_clk>;
+ #address-cells = <1>;
+ #size-cells = <0>;
+ interrupts = <42>;
+ interrupt-controller;
+ #interrupt-cells = <1>;
+
+ node@0 {
+ compatible = "adi,ad2428-node";
+ reg = <0>;
+ interrupts = <0>;
+ adi,tdm-mode = <16>;
+ adi,tdm-slot-size = <32>;
+
+ codec {
+ compatible = "adi,ad2428-codec";
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "A2B Main";
+ };
+ };
+
+ node@1 {
+ compatible = "adi,ad2425-node";
+ reg = <1>;
+ interrupts = <1>;
+ adi,tdm-mode = <8>;
+ adi,tdm-slot-size = <32>;
+
+ gpio {
+ compatible = "adi,ad2425-gpio";
+ interrupt-controller;
+ #interrupt-cells = <2>;
+ gpio-controller;
+ #gpio-cells = <2>;
+ };
+
+ codec {
+ compatible = "adi,ad2425-codec";
+ #sound-dai-cells = <0>;
+ sound-name-prefix = "A2B Sub1";
+ };
+
+ i2c {
+ compatible = "adi,ad2425-i2c";
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ eeprom@50 {
+ compatible = "atmel,24c64";
+ reg = <0x50>;
+ };
+ };
+ };
+ };
+ };

--
2.44.0