Hi Rob,
On 2/6/20 7:21 PM, Rob Herring wrote:
On Thu, Jan 30, 2020 at 02:50:40PM +0100, Olivier Moysan wrote:
Convert the STM32 SAI bindings to DT schema format using json-schema.
Signed-off-by: Olivier Moysan olivier.moysan@st.com
.../bindings/sound/st,stm32-sai.txt | 107 ---------- .../bindings/sound/st,stm32-sai.yaml | 193 ++++++++++++++++++ 2 files changed, 193 insertions(+), 107 deletions(-) delete mode 100644 Documentation/devicetree/bindings/sound/st,stm32-sai.txt create mode 100644 Documentation/devicetree/bindings/sound/st,stm32-sai.yaml
diff --git a/Documentation/devicetree/bindings/sound/st,stm32-sai.yaml b/Documentation/devicetree/bindings/sound/st,stm32-sai.yaml new file mode 100644 index 000000000000..33dca007fc86 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/st,stm32-sai.yaml @@ -0,0 +1,193 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/sound/st,stm32-sai.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml#
+title: STMicroelectronics STM32 Serial Audio Interface (SAI)
+maintainers:
- Olivier Moysan olivier.moysan@st.com
+description:
- The SAI interface (Serial Audio Interface) offers a wide set of audio
- protocols as I2S standards, LSB or MSB-justified, PCM/DSP, TDM, and AC'97.
- The SAI contains two independent audio sub-blocks. Each sub-block has
- its own clock generator and I/O lines controller.
+properties:
- compatible:
- enum:
- st,stm32f4-sai
- st,stm32h7-sai
- reg:
- items:
- description: Base address and size of SAI common register set.
- description: Base address and size of SAI identification register set.
- minItems: 1
- maxItems: 2
- ranges:
- maxItems: 1
- interrupts:
- maxItems: 1
- resets:
- maxItems: 1
- "#address-cells":
- const: 1
- "#size-cells":
- const: 1
- clocks:
- items:
- description: pclk feeds the peripheral bus interface.
- description: x8k, SAI parent clock for sampling rates multiple of 8kHz.
- description: x11k, SAI parent clock for sampling rates multiple of 11.025kHz.
- clock-names:
- items:
enum: [ pclk, x8k, x11k ]
- minItems: 3
- maxItems: 3
+required:
- compatible
- reg
- ranges
- "#address-cells"
- "#size-cells"
- clocks
- clock-names
+patternProperties:
- "^audio-controller@[0-9a-f]+$":
- type: object
- description:
Two subnodes corresponding to SAI sub-block instances A et B
can be defined. Subnode can be omitted for unsused sub-block.
- properties:
compatible:
description: Compatible for SAI sub-block A or B.
enum:
- st,stm32-sai-sub-a
- st,stm32-sai-sub-b
pattern: 'st,stm32-sai-sub-[ab]'
I will change this in v2
"#sound-dai-cells":
const: 0
reg:
maxItems: 1
clocks:
items:
- description: sai_ck clock feeding the internal clock generator.
- description: MCLK clock from a SAI set as master clock provider.
minItems: 1
maxItems: 2
clock-names:
items:
- const: sai_ck
- const: MCLK
minItems: 1
maxItems: 2
dmas:
items:
- description: SAI sub-block is configured as a capture DAI.
- description: SAI sub-block is configured as a playback DAI.
minItems: 1
maxItems: 1
This is defining that dmas has 2 entries, but then limits it to the 1st entry only.
dma can be either "rx" or "tx", but not both. Maybe, the following syntax is more appropriate:
dmas: maxItems: 1
dma-names: description: | rx: SAI sub-block is configured as a capture DAI. tx: SAI sub-block is configured as a playback DAI. items: - enum: [ rx, tx ]
dma-names:
items:
- enum: [ rx, tx ]
st,sync:
description:
Configure the SAI sub-block as slave of another SAI sub-block.
By default SAI sub-block is in asynchronous mode.
Must contain the phandle and index of the SAI sub-block providing
the synchronization.
allOf:
- $ref: /schemas/types.yaml#definitions/phandle-array
- maxItems: 1
st,iec60958:
description:
If set, support S/PDIF IEC6958 protocol for playback.
IEC60958 protocol is not available for capture.
By default, custom protocol is assumed, meaning that protocol is
configured according to protocol defined in related DAI link node,
such as i2s, left justified, right justified, dsp and pdm protocols.
allOf:
- $ref: /schemas/types.yaml#definitions/flag
"#clock-cells":
description: Configure the SAI device as master clock provider.
const: 0
- required:
- compatible
- "#sound-dai-cells"
- reg
- clocks
- clock-names
- dmas
- dma-names
additionalProperties: false.
+allOf:
- if:
properties:
compatible:
contains:
const: st,stm32f4-sai
- then:
properties:
clocks:
minItems: 2
maxItems: 2
clock-names:
items:
enum: [ x8k, x11k ]
Define the order.
Do you mean, adding in clocks property : items: - description: x8k, SAI parent clock for sampling rates multiple of 8kHz. - description: x11k, SAI parent clock for sampling rates multiple of 11.025kHz.
But, it seems to me that this is redundant with previous definition of clocks property.
Thanks Olivier
minItems: 2
maxItems: 2
+additionalProperties: false
+examples:
- |
- #include <dt-bindings/interrupt-controller/arm-gic.h>
- #include <dt-bindings/clock/stm32mp1-clks.h>
- #include <dt-bindings/reset/stm32mp1-resets.h>
- sai1: sai@4400a000 {
compatible = "st,stm32h7-sai";
#address-cells = <1>;
#size-cells = <1>;
ranges = <0 0x4400a000 0x400>;
reg = <0x4400a000 0x4>, <0x4400a3f0 0x10>;
interrupts = <GIC_SPI 87 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&rcc SAI1>, <&rcc PLL1_Q>, <&rcc PLL2_P>;
clock-names = "pclk", "x8k", "x11k";
resets = <&rcc SAI1_R>;
sai1a: audio-controller@4400a004 {
compatible = "st,stm32-sai-sub-a";
#sound-dai-cells = <0>;
reg = <0x4 0x1c>;
clocks = <&rcc SAI1_K>;
clock-names = "sai_ck";
dmas = <&dmamux1 87 0x400 0x01>;
dma-names = "tx";
};
- };
+...
2.17.1