Message ID | 20191209183511.3576038-2-daniel@zonque.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | mfd: Add support for Analog Devices A2B transceiver | expand |
On Mon, Dec 09, 2019 at 07:35:01PM +0100, Daniel Mack wrote: > This patch adds documentation on the top-level MFD support for AD242x > devices. The bindings implemented by drivers for sub-devices of the > MFD are documented in other files in their respective subsystems. > > The example in this file is referred to by other documents. > > Signed-off-by: Daniel Mack <daniel@zonque.org> > --- > .../bindings/mfd/adi,ad242x-bus.yaml | 29 +++ > .../bindings/mfd/adi,ad242x-master.yaml | 235 ++++++++++++++++++ > .../bindings/mfd/adi,ad242x-slave.yaml | 108 ++++++++ > 3 files changed, 372 insertions(+) > create mode 100644 Documentation/devicetree/bindings/mfd/adi,ad242x-bus.yaml > create mode 100644 Documentation/devicetree/bindings/mfd/adi,ad242x-master.yaml > create mode 100644 Documentation/devicetree/bindings/mfd/adi,ad242x-slave.yaml > > diff --git a/Documentation/devicetree/bindings/mfd/adi,ad242x-bus.yaml b/Documentation/devicetree/bindings/mfd/adi,ad242x-bus.yaml > new file mode 100644 > index 000000000000..89ca8d009bb9 > --- /dev/null > +++ b/Documentation/devicetree/bindings/mfd/adi,ad242x-bus.yaml > @@ -0,0 +1,29 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: "http://devicetree.org/schemas/mfd/adi,ad242x-bus.yaml#" > +$schema: "http://devicetree.org/meta-schemas/core.yaml#" > + > +title: Analog Devices AD242x A²B bus node > + > +maintainers: > + - Daniel Mack <daniel@zonque.org> > + > +description: | > + AD242x slave nodes represent the secondary I²C address a master node > + transceiver exposes on the bus. > + > +properties: > + compatible: > + enum: > + - adi,ad2428w-bus Where is this in the example? Is A2B a standard thing? If so, then shouldn't some of this be split into a A2B binding and then AD242x specific binding? > + > + reg: > + maxItems: 1 > + description: | > + The secondary I²C address of the master node > + (called 'BUS' in the datasheet) > + > +required: > + - compatible > + - reg > diff --git a/Documentation/devicetree/bindings/mfd/adi,ad242x-master.yaml b/Documentation/devicetree/bindings/mfd/adi,ad242x-master.yaml > new file mode 100644 > index 000000000000..649510575a79 > --- /dev/null > +++ b/Documentation/devicetree/bindings/mfd/adi,ad242x-master.yaml > @@ -0,0 +1,235 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: "http://devicetree.org/schemas/mfd/adi,ad242x-master.yaml#" > +$schema: "http://devicetree.org/meta-schemas/core.yaml#" > + > +title: Analog Devices AD242x A²B master node transceiver > + > +maintainers: > + - Daniel Mack <daniel@zonque.org> > + > +description: | > + AD242x devices are A²B (Automotive Audio Bus) transceivers that are connected > + to each other in a daisy-chain. The payload transported on that bus includes > + multi-channel audio, I²C, GPIOs and others. > + > + The datasheet is located here: > + > + https://www.analog.com/media/en/technical-documentation/user-guides/AD242x_TRM_Rev1.1.pdf > + > + The primary node in the chain is called the master node, and the nodes in the > + chain are called slave nodes. A master can address up to 15 slave nodes. The > + master node exposes two I²C addresses, one for accessing the registers on the > + node itself, and one for registers on one of the slave nodes. > + > +properties: > + compatible: > + enum: > + - adi,ad2428w-master > + > + reg: > + maxItems: 1 > + description: | > + The primary I²C address of the master node > + (called 'BASE' in the datasheet) > + > + clocks: > + minItems: 1 > + > + clock-names: > + $ref: /schemas/types.yaml#/definitions/string-array > + const: sync > + > + clock-frequency: > + $ref: '/schemas/types.yaml#/definitions/uint32' > + enum: [44100, 48000] > + description: | > + Specifies the clock frequency in Hz to configure on the given sync clock. > + If not specified, the clock is expected to already be configured to either > + 44100 or 48000 Hz. > + > + interrupts: > + maxItems: 1 > + > + adi,a2b-bus: > + $ref: '/schemas/types.yaml#/definitions/phandle' > + description: Specifies the bus handle node > + > + adi,upstream-slot-size: > + description: The size for upstream slots > + allOf: > + - $ref: '/schemas/types.yaml#/definitions/uint32' > + - enum: [8, 12, 16, 20, 24, 28, 32] > + > + adi,downstream-slot-size: > + description: The size for downstream slots > + allOf: > + - $ref: '/schemas/types.yaml#/definitions/uint32' > + - enum: [8, 12, 16, 20, 24, 28, 32] > + > + adi,tdm-mode: > + description: The TDM mode to use > + allOf: > + - $ref: '/schemas/types.yaml#/definitions/uint32' > + - enum: [2, 4, 8, 12, 16, 20, 24, 32] > + > + adi,tdm-slot-size: > + description: The TDM slot size to use > + allOf: > + - $ref: '/schemas/types.yaml#/definitions/uint32' > + - enum: [16, 32] > + > + adi,alternate-upstream-slot-format: > + description: Selects the alternate format for upstream slots > + type: boolean > + > + adi,alternate-downstream-slot-format: > + description: Selects the alternate format for downstream slots > + type: boolean > + > + adi,invert-xcvr-b: > + description: Inverts the LVDS XCVR B data line > + type: boolean > + > + adi,alternating-sync: > + description: Drives the SYNC pin for I²S operation > + type: boolean > + > + adi,invert-sync: > + description: Invert the SYNC pin > + type: boolean > + > + adi,early-sync: > + description: | > + Make the SYNC pin change one cycle before the first slot is transmitted > + type: boolean > + > + adi,spread-a2b-clock: > + description: Enables spread spectrum mode for A²B bus clocks > + type: boolean > + > + adi,spread-a2b-i2s-clock: > + description: Enables spread spectrum mode for both A²B and I²S clocks > + type: boolean > + > + adi,spread-spectrum-high: > + description: Selects high spectrum spreading mode > + type: boolean > + > +required: > + - compatible > + - reg > + - clocks > + - clock-names > + - adi,a2b-bus > + - adi,upstream-slot-size > + - adi,downstream-slot-size > + - adi,tdm-mode > + - adi,tdm-slot-size > + > +examples: > + - | > + sync_clock: clock { > + compatible = "fixed-clock"; > + #clock-cells = <0>; > + clock-frequency = <48000>; > + }; > + > + i2c-bus { > + ad2428w-master@68 { > + reg = <0x68>; > + compatible = "adi,ad2428w-master"; > + adi,a2b-bus = <&a2b_bus>; > + clocks = <&sync_clock>; > + clock-names = "sync"; > + > + adi,upstream-slot-size = <24>; > + adi,downstream-slot-size = <24>; > + adi,tdm-mode = <2>; > + adi,tdm-slot-size = <32>; > + adi,alternating-sync; > + adi,early-sync; > + > + codec { > + compatible = "adi,ad2428w-codec"; > + #sound-dai-cells = <1>; > + }; > + > + clock { > + compatible = "adi,ad2428w-clk"; > + #clock-cells = <1>; > + clock-output-names = "master-clk1", "master-clk2"; > + }; > + > + nodes { > + #address-cells = <1>; > + #size-cells = <0>; > + > + node@0 { > + compatible = "adi,ad2428w-slave"; > + reg = <0>; > + > + adi,alternating-sync; > + adi,early-sync; > + adi,invert-sync; > + adi,tdm-mode = <8>; > + adi,tdm-slot-size = <32>; > + > + downstream { > + rx-slots = <2 3 6 7 8 9>; > + #tx-slots = <4>; > + #forward-slots = <6>; > + }; > + > + upstream { > + rx-slots = <0 1 6 7 8 9>; > + #tx-slots = <4>; > + #forward-slots = <6>; > + }; > + > + a2bgpio: gpio { > + compatible = "adi,ad2428w-gpio"; > + gpio-controller; > + #gpio-cells = <2>; > + > + gpio-over-distance { > + #address-cells = <1>; > + #size-cells = <0>; > + > + pin@0 { > + reg = <0>; > + adi,virtual-port-mask = <0x01>; > + }; > + }; > + }; > + > + i2c { > + compatible = "adi,ad2428w-i2c"; > + clock-frequency = <400000>; > + #address-cells = <1>; > + #size-cells = <0>; > + > + // I²C client devices located on the remote side > + eeprom-top@52 { > + reg = <0x52>; > + compatible = "atmel,24c02"; > + read-only; > + }; > + }; > + > + a2bclk: clock { > + compatible = "adi,ad2428w-clk"; > + #clock-cells = <1>; > + clock-output-names = "node0-clk1", "node0-clk2"; > + }; > + > + codec { > + compatible = "adi,ad2428w-codec"; > + #sound-dai-cells = <1>; > + adi,pdm-highpass-filter; > + }; > + }; > + }; > + }; > + }; > diff --git a/Documentation/devicetree/bindings/mfd/adi,ad242x-slave.yaml b/Documentation/devicetree/bindings/mfd/adi,ad242x-slave.yaml > new file mode 100644 > index 000000000000..3bea04dff267 > --- /dev/null > +++ b/Documentation/devicetree/bindings/mfd/adi,ad242x-slave.yaml > @@ -0,0 +1,108 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: "http://devicetree.org/schemas/mfd/adi,ad242x-slave.yaml#" > +$schema: "http://devicetree.org/meta-schemas/core.yaml#" > + > +title: Analog Devices AD242x A²B slave node transceiver > + > +maintainers: > + - Daniel Mack <daniel@zonque.org> > + > +description: | > + AD242x slave nodes are connected to the master node through a daisy-chain. > + Modules of this type must be listed under the 'nodes' property of the master > + DT schema. > + > +properties: > + compatible: > + enum: > + - adi,ad2428w-slave > + > + adi,tdm-mode: > + description: The TDM mode to use > + allOf: > + - $ref: '/schemas/types.yaml#/definitions/uint32' > + - enum: [2, 4, 8, 12, 16, 20, 24, 32] > + > + adi,tdm-slot-size: > + description: The TDM slot size to use > + allOf: > + - $ref: '/schemas/types.yaml#/definitions/uint32' > + - enum: [16, 32] > + > + adi,alternating-sync: > + description: Drives the SYNC pin for I²S operation > + type: boolean > + > + adi,invert-sync: > + description: Invert the SYNC pin > + type: boolean > + > + adi,early-sync: > + description: | > + Make the SYNC pin change one cycle before the first slot is transmitted > + type: boolean > + > + adi,spread-a2b-clock: > + description: Enables spread spectrum mode for A²B bus clocks > + type: boolean > + > + adi,spread-a2b-i2s-clock: > + description: Enables spread spectrum mode for both A²B and I²S clocks > + type: boolean > + > + adi,spread-spectrum-high: > + description: Selects high spectrum spreading mode > + type: boolean > + > + upstream: > + type: object > + properties: > + rx-slots: > + $ref: '/schemas/types.yaml#/definitions/uint32' > + description: | > + A bitmask that describes the slots that are received by the > + transceiver from the upstream (A) side and put into its TX output > + framebuffers. If not specified, an empty bitmask is assumed. > + > + '#tx-slots': > + $ref: '/schemas/types.yaml#/definitions/uint32' > + description: | > + The number of slots this transceiver contributes to the upstream > + traffic from its RX input frame buffer > + > + '#forward-slots': > + $ref: '/schemas/types.yaml#/definitions/uint32' > + description: | > + The number of slots this transceiver forwards from the upstream side > + to the downstream side. > + > + downstream: > + type: object > + properties: > + rx-slots: > + $ref: '/schemas/types.yaml#/definitions/uint32' > + description: | > + A bitmask that describes the slots that are received by the > + transceiver from the downstream (B) side and put into its TX output > + framebuffers. If not specified, an empty bitmask is assumed. > + > + '#tx-slots': > + $ref: '/schemas/types.yaml#/definitions/uint32' > + description: | > + The number of slots this transceiver contributes to the downstream > + traffic from its RX input frame buffer > + > + '#forward-slots': > + $ref: '/schemas/types.yaml#/definitions/uint32' > + description: | > + The number of slots this transceiver forwards from the downstream side > + to the upstream side. > + > +required: > + - compatible > + - adi,tdm-mode > + - adi,tdm-slot-size > + - upstream > + - downstream > -- > 2.23.0 >
diff --git a/Documentation/devicetree/bindings/mfd/adi,ad242x-bus.yaml b/Documentation/devicetree/bindings/mfd/adi,ad242x-bus.yaml new file mode 100644 index 000000000000..89ca8d009bb9 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/adi,ad242x-bus.yaml @@ -0,0 +1,29 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: "http://devicetree.org/schemas/mfd/adi,ad242x-bus.yaml#" +$schema: "http://devicetree.org/meta-schemas/core.yaml#" + +title: Analog Devices AD242x A²B bus node + +maintainers: + - Daniel Mack <daniel@zonque.org> + +description: | + AD242x slave nodes represent the secondary I²C address a master node + transceiver exposes on the bus. + +properties: + compatible: + enum: + - adi,ad2428w-bus + + reg: + maxItems: 1 + description: | + The secondary I²C address of the master node + (called 'BUS' in the datasheet) + +required: + - compatible + - reg diff --git a/Documentation/devicetree/bindings/mfd/adi,ad242x-master.yaml b/Documentation/devicetree/bindings/mfd/adi,ad242x-master.yaml new file mode 100644 index 000000000000..649510575a79 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/adi,ad242x-master.yaml @@ -0,0 +1,235 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: "http://devicetree.org/schemas/mfd/adi,ad242x-master.yaml#" +$schema: "http://devicetree.org/meta-schemas/core.yaml#" + +title: Analog Devices AD242x A²B master node transceiver + +maintainers: + - Daniel Mack <daniel@zonque.org> + +description: | + AD242x devices are A²B (Automotive Audio Bus) transceivers that are connected + to each other in a daisy-chain. The payload transported on that bus includes + multi-channel audio, I²C, GPIOs and others. + + The datasheet is located here: + + https://www.analog.com/media/en/technical-documentation/user-guides/AD242x_TRM_Rev1.1.pdf + + The primary node in the chain is called the master node, and the nodes in the + chain are called slave nodes. A master can address up to 15 slave nodes. The + master node exposes two I²C addresses, one for accessing the registers on the + node itself, and one for registers on one of the slave nodes. + +properties: + compatible: + enum: + - adi,ad2428w-master + + reg: + maxItems: 1 + description: | + The primary I²C address of the master node + (called 'BASE' in the datasheet) + + clocks: + minItems: 1 + + clock-names: + $ref: /schemas/types.yaml#/definitions/string-array + const: sync + + clock-frequency: + $ref: '/schemas/types.yaml#/definitions/uint32' + enum: [44100, 48000] + description: | + Specifies the clock frequency in Hz to configure on the given sync clock. + If not specified, the clock is expected to already be configured to either + 44100 or 48000 Hz. + + interrupts: + maxItems: 1 + + adi,a2b-bus: + $ref: '/schemas/types.yaml#/definitions/phandle' + description: Specifies the bus handle node + + adi,upstream-slot-size: + description: The size for upstream slots + allOf: + - $ref: '/schemas/types.yaml#/definitions/uint32' + - enum: [8, 12, 16, 20, 24, 28, 32] + + adi,downstream-slot-size: + description: The size for downstream slots + allOf: + - $ref: '/schemas/types.yaml#/definitions/uint32' + - enum: [8, 12, 16, 20, 24, 28, 32] + + adi,tdm-mode: + description: The TDM mode to use + allOf: + - $ref: '/schemas/types.yaml#/definitions/uint32' + - enum: [2, 4, 8, 12, 16, 20, 24, 32] + + adi,tdm-slot-size: + description: The TDM slot size to use + allOf: + - $ref: '/schemas/types.yaml#/definitions/uint32' + - enum: [16, 32] + + adi,alternate-upstream-slot-format: + description: Selects the alternate format for upstream slots + type: boolean + + adi,alternate-downstream-slot-format: + description: Selects the alternate format for downstream slots + type: boolean + + adi,invert-xcvr-b: + description: Inverts the LVDS XCVR B data line + type: boolean + + adi,alternating-sync: + description: Drives the SYNC pin for I²S operation + type: boolean + + adi,invert-sync: + description: Invert the SYNC pin + type: boolean + + adi,early-sync: + description: | + Make the SYNC pin change one cycle before the first slot is transmitted + type: boolean + + adi,spread-a2b-clock: + description: Enables spread spectrum mode for A²B bus clocks + type: boolean + + adi,spread-a2b-i2s-clock: + description: Enables spread spectrum mode for both A²B and I²S clocks + type: boolean + + adi,spread-spectrum-high: + description: Selects high spectrum spreading mode + type: boolean + +required: + - compatible + - reg + - clocks + - clock-names + - adi,a2b-bus + - adi,upstream-slot-size + - adi,downstream-slot-size + - adi,tdm-mode + - adi,tdm-slot-size + +examples: + - | + sync_clock: clock { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <48000>; + }; + + i2c-bus { + ad2428w-master@68 { + reg = <0x68>; + compatible = "adi,ad2428w-master"; + adi,a2b-bus = <&a2b_bus>; + clocks = <&sync_clock>; + clock-names = "sync"; + + adi,upstream-slot-size = <24>; + adi,downstream-slot-size = <24>; + adi,tdm-mode = <2>; + adi,tdm-slot-size = <32>; + adi,alternating-sync; + adi,early-sync; + + codec { + compatible = "adi,ad2428w-codec"; + #sound-dai-cells = <1>; + }; + + clock { + compatible = "adi,ad2428w-clk"; + #clock-cells = <1>; + clock-output-names = "master-clk1", "master-clk2"; + }; + + nodes { + #address-cells = <1>; + #size-cells = <0>; + + node@0 { + compatible = "adi,ad2428w-slave"; + reg = <0>; + + adi,alternating-sync; + adi,early-sync; + adi,invert-sync; + adi,tdm-mode = <8>; + adi,tdm-slot-size = <32>; + + downstream { + rx-slots = <2 3 6 7 8 9>; + #tx-slots = <4>; + #forward-slots = <6>; + }; + + upstream { + rx-slots = <0 1 6 7 8 9>; + #tx-slots = <4>; + #forward-slots = <6>; + }; + + a2bgpio: gpio { + compatible = "adi,ad2428w-gpio"; + gpio-controller; + #gpio-cells = <2>; + + gpio-over-distance { + #address-cells = <1>; + #size-cells = <0>; + + pin@0 { + reg = <0>; + adi,virtual-port-mask = <0x01>; + }; + }; + }; + + i2c { + compatible = "adi,ad2428w-i2c"; + clock-frequency = <400000>; + #address-cells = <1>; + #size-cells = <0>; + + // I²C client devices located on the remote side + eeprom-top@52 { + reg = <0x52>; + compatible = "atmel,24c02"; + read-only; + }; + }; + + a2bclk: clock { + compatible = "adi,ad2428w-clk"; + #clock-cells = <1>; + clock-output-names = "node0-clk1", "node0-clk2"; + }; + + codec { + compatible = "adi,ad2428w-codec"; + #sound-dai-cells = <1>; + adi,pdm-highpass-filter; + }; + }; + }; + }; + }; diff --git a/Documentation/devicetree/bindings/mfd/adi,ad242x-slave.yaml b/Documentation/devicetree/bindings/mfd/adi,ad242x-slave.yaml new file mode 100644 index 000000000000..3bea04dff267 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/adi,ad242x-slave.yaml @@ -0,0 +1,108 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: "http://devicetree.org/schemas/mfd/adi,ad242x-slave.yaml#" +$schema: "http://devicetree.org/meta-schemas/core.yaml#" + +title: Analog Devices AD242x A²B slave node transceiver + +maintainers: + - Daniel Mack <daniel@zonque.org> + +description: | + AD242x slave nodes are connected to the master node through a daisy-chain. + Modules of this type must be listed under the 'nodes' property of the master + DT schema. + +properties: + compatible: + enum: + - adi,ad2428w-slave + + adi,tdm-mode: + description: The TDM mode to use + allOf: + - $ref: '/schemas/types.yaml#/definitions/uint32' + - enum: [2, 4, 8, 12, 16, 20, 24, 32] + + adi,tdm-slot-size: + description: The TDM slot size to use + allOf: + - $ref: '/schemas/types.yaml#/definitions/uint32' + - enum: [16, 32] + + adi,alternating-sync: + description: Drives the SYNC pin for I²S operation + type: boolean + + adi,invert-sync: + description: Invert the SYNC pin + type: boolean + + adi,early-sync: + description: | + Make the SYNC pin change one cycle before the first slot is transmitted + type: boolean + + adi,spread-a2b-clock: + description: Enables spread spectrum mode for A²B bus clocks + type: boolean + + adi,spread-a2b-i2s-clock: + description: Enables spread spectrum mode for both A²B and I²S clocks + type: boolean + + adi,spread-spectrum-high: + description: Selects high spectrum spreading mode + type: boolean + + upstream: + type: object + properties: + rx-slots: + $ref: '/schemas/types.yaml#/definitions/uint32' + description: | + A bitmask that describes the slots that are received by the + transceiver from the upstream (A) side and put into its TX output + framebuffers. If not specified, an empty bitmask is assumed. + + '#tx-slots': + $ref: '/schemas/types.yaml#/definitions/uint32' + description: | + The number of slots this transceiver contributes to the upstream + traffic from its RX input frame buffer + + '#forward-slots': + $ref: '/schemas/types.yaml#/definitions/uint32' + description: | + The number of slots this transceiver forwards from the upstream side + to the downstream side. + + downstream: + type: object + properties: + rx-slots: + $ref: '/schemas/types.yaml#/definitions/uint32' + description: | + A bitmask that describes the slots that are received by the + transceiver from the downstream (B) side and put into its TX output + framebuffers. If not specified, an empty bitmask is assumed. + + '#tx-slots': + $ref: '/schemas/types.yaml#/definitions/uint32' + description: | + The number of slots this transceiver contributes to the downstream + traffic from its RX input frame buffer + + '#forward-slots': + $ref: '/schemas/types.yaml#/definitions/uint32' + description: | + The number of slots this transceiver forwards from the downstream side + to the upstream side. + +required: + - compatible + - adi,tdm-mode + - adi,tdm-slot-size + - upstream + - downstream
This patch adds documentation on the top-level MFD support for AD242x devices. The bindings implemented by drivers for sub-devices of the MFD are documented in other files in their respective subsystems. The example in this file is referred to by other documents. Signed-off-by: Daniel Mack <daniel@zonque.org> --- .../bindings/mfd/adi,ad242x-bus.yaml | 29 +++ .../bindings/mfd/adi,ad242x-master.yaml | 235 ++++++++++++++++++ .../bindings/mfd/adi,ad242x-slave.yaml | 108 ++++++++ 3 files changed, 372 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/adi,ad242x-bus.yaml create mode 100644 Documentation/devicetree/bindings/mfd/adi,ad242x-master.yaml create mode 100644 Documentation/devicetree/bindings/mfd/adi,ad242x-slave.yaml