From patchwork Mon Dec 9 18:35:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Daniel Mack X-Patchwork-Id: 11279973 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 105FA1593 for ; Mon, 9 Dec 2019 18:36:23 +0000 (UTC) Received: from alsa0.perex.cz (alsa0.perex.cz [77.48.224.243]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2A0D62080D for ; Mon, 9 Dec 2019 18:36:21 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=alsa-project.org header.i=@alsa-project.org header.b="kbbcIBDw" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2A0D62080D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=zonque.org Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=alsa-devel-bounces@alsa-project.org Received: from alsa1.perex.cz (alsa1.perex.cz [207.180.221.201]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by alsa0.perex.cz (Postfix) with ESMTPS id 0333274C; Mon, 9 Dec 2019 19:35:30 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa0.perex.cz 0333274C DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=alsa-project.org; s=default; t=1575916580; bh=FLwS+3KCdZyhzgFuATuQirLpJz8CztVW7YzD3nuqMNI=; h=From:To:Date:In-Reply-To:References:Cc:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From; b=kbbcIBDw9hLqhs7820uOBy6IubFv23b8IvgBq1HWfd6IhZaJt0RhW53wDj7ACnIVH DBFdfK+9jwZLjG5r5Lhr+S6s91ke9E97S6SQeFFynVxqSy3Pen346DbIJJjXn5bQoX Cc55egr0jBUHSjDSGr0snfhB7DvrtpqCainChWuc= Received: from alsa1.perex.cz (localhost.localdomain [127.0.0.1]) by alsa1.perex.cz (Postfix) with ESMTP id E6602F80240; Mon, 9 Dec 2019 19:35:28 +0100 (CET) X-Original-To: alsa-devel@alsa-project.org Delivered-To: alsa-devel@alsa-project.org Received: by alsa1.perex.cz (Postfix, from userid 50401) id F0CC0F8023F; Mon, 9 Dec 2019 19:35:25 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on alsa1.perex.cz X-Spam-Level: * X-Spam-Status: No, score=1.0 required=5.0 tests=SPF_HELO_NONE,SPF_PASS, SURBL_BLOCKED,URIBL_BLOCKED autolearn=disabled version=3.4.0 Received: from mail.bugwerft.de (mail.bugwerft.de [46.23.86.59]) by alsa1.perex.cz (Postfix) with ESMTP id 24241F800C4 for ; Mon, 9 Dec 2019 19:35:20 +0100 (CET) DKIM-Filter: OpenDKIM Filter v2.11.0 alsa1.perex.cz 24241F800C4 Received: from zenbar.fritz.box (pD95EF75D.dip0.t-ipconnect.de [217.94.247.93]) by mail.bugwerft.de (Postfix) with ESMTPSA id E97D42E5CDC; Mon, 9 Dec 2019 18:29:03 +0000 (UTC) From: Daniel Mack To: linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, linux-i2c@vger.kernel.org, alsa-devel@alsa-project.org, devicetree@vger.kernel.org, linux-clk@vger.kernel.org Date: Mon, 9 Dec 2019 19:35:01 +0100 Message-Id: <20191209183511.3576038-2-daniel@zonque.org> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191209183511.3576038-1-daniel@zonque.org> References: <20191209183511.3576038-1-daniel@zonque.org> MIME-Version: 1.0 Cc: lars@metafoo.de, sboyd@kernel.org, mturquette@baylibre.com, robh+dt@kernel.org, broonie@kernel.org, pascal.huerst@gmail.com, lee.jones@linaro.org, Daniel Mack Subject: [alsa-devel] [PATCH 01/10] dt-bindings: mfd: Add documentation for ad242x X-BeenThere: alsa-devel@alsa-project.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: "Alsa-devel mailing list for ALSA developers - http://www.alsa-project.org" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: alsa-devel-bounces@alsa-project.org Sender: "Alsa-devel" 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 --- .../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 + +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 + +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 + +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