From: Alvin Šipraga <alsi@xxxxxxxxxxxxxxx> Add device tree bindings for the AD24xx series A2B transceiver chips, including their functional blocks. Signed-off-by: Alvin Šipraga <alsi@xxxxxxxxxxxxxxx> --- .../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@xxxxxxxxxxxxxxx> + +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@xxxxxxxxxxxxxxx> + +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@xxxxxxxxxxxxxxx> + +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@xxxxxxxxxxxxxxx> + +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@xxxxxxxxxxxxxxx> + +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