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@xxxxxxxxxx> > --- > .../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@xxxxxxxxxx> > + > +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@xxxxxxxxxx> > + > +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@xxxxxxxxxx> > + > +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 >