[PATCH v2 0/4] ARM: dts: stm32: merge spi and i2s nodes
When a STM32 SPI instance offers I2S feature, two nodes are defined in STM32 SoC device tree to support both SPI and I2S. Merge SPI node and I2S nodes into a single node, to avoid hardware description duplication and compilation warnings.
Changes in v2: - Squash some patches in the serie to avoid dtbs check warnings on intermediate compilation steps.
Olivier Moysan (4): ASoC: dt-bindings: stm32: i2s: add audio-graph-card port ASoC: dt-bindings: stm32: i2s: allow additional properties. ASoC: dt-bindings: stm32: i2s: update example ARM: dts: stm32: merge spi and i2s nodes
.../bindings/sound/st,stm32-i2s.yaml | 9 ++++- arch/arm/boot/dts/stm32mp151.dtsi | 39 ++----------------- arch/arm/boot/dts/stm32mp157c-ev1.dts | 2 +- .../arm/boot/dts/stm32mp15xx-dhcom-drc02.dtsi | 2 +- .../boot/dts/stm32mp15xx-dhcor-avenger96.dtsi | 2 +- arch/arm/boot/dts/stm32mp15xx-dkx.dtsi | 7 +++- 6 files changed, 18 insertions(+), 43 deletions(-)
The STM2 I2S DAI can be connected via the audio-graph-card. Add port entry into the bindings.
Signed-off-by: Olivier Moysan olivier.moysan@foss.st.com --- Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml | 5 +++++ 1 file changed, 5 insertions(+)
diff --git a/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml b/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml index 6feb5a09c184..64b70ac539f8 100644 --- a/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml +++ b/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml @@ -58,6 +58,11 @@ properties: description: Configure the I2S device as MCLK clock provider. const: 0
+patternProperties: + '^port@[0-9]': + $ref: audio-graph-port.yaml# + unevaluatedProperties: false + required: - compatible - "#sound-dai-cells"
On Thu, 25 Nov 2021 15:40:50 +0100, Olivier Moysan wrote:
The STM2 I2S DAI can be connected via the audio-graph-card. Add port entry into the bindings.
Signed-off-by: Olivier Moysan olivier.moysan@foss.st.com
Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml | 5 +++++ 1 file changed, 5 insertions(+)
Running 'make dtbs_check' with the schema in this patch gives the following warnings. Consider if they are expected or the schema is incorrect. These may not be new warnings.
Note that it is not yet a requirement to have 0 warnings for dtbs_check. This will change in the future.
Full log is available here: https://patchwork.ozlabs.org/patch/1559750
audio-controller@4000b000: 'port' does not match any of the regexes: '^port@[0-9]', 'pinctrl-[0-9]+' arch/arm/boot/dts/stm32mp157a-dk1.dt.yaml arch/arm/boot/dts/stm32mp157c-dk2.dt.yaml
Hi Rob,
On 11/25/21 10:26 PM, Rob Herring wrote:
On Thu, 25 Nov 2021 15:40:50 +0100, Olivier Moysan wrote:
The STM2 I2S DAI can be connected via the audio-graph-card. Add port entry into the bindings.
Signed-off-by: Olivier Moysan olivier.moysan@foss.st.com
Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml | 5 +++++ 1 file changed, 5 insertions(+)
Running 'make dtbs_check' with the schema in this patch gives the following warnings. Consider if they are expected or the schema is incorrect. These may not be new warnings.
Note that it is not yet a requirement to have 0 warnings for dtbs_check. This will change in the future.
Full log is available here: https://patchwork.ozlabs.org/patch/1559750
audio-controller@4000b000: 'port' does not match any of the regexes: '^port@[0-9]', 'pinctrl-[0-9]+' arch/arm/boot/dts/stm32mp157a-dk1.dt.yaml arch/arm/boot/dts/stm32mp157c-dk2.dt.yaml
This warning is not a new one.
The i2s2 node in stm32mp15xx-dkx.dtsi would require the following binding: port: $ref: audio-graph-port.yaml# unevaluatedProperties: false
However the spi binding requires to introduce a unit address: patternProperties: '^port@[0-9]': $ref: audio-graph-port.yaml# unevaluatedProperties: false
The warning can be removed by re-ordering the bindings patches in the serie, as "additionalProperties: true" makes the check more tolerant on extra properties. The patch "ASoC: dt-bindings: stm32: i2s: add audio-graph-card port" can even be merely dropped. So, I suggest to resend the serie without audio-graph-card patch.
Does it sound too permissive to you ?
Thanks Olivier
On Fri, Nov 26, 2021 at 11:25:27AM +0100, Olivier MOYSAN wrote:
Hi Rob,
On 11/25/21 10:26 PM, Rob Herring wrote:
On Thu, 25 Nov 2021 15:40:50 +0100, Olivier Moysan wrote:
The STM2 I2S DAI can be connected via the audio-graph-card. Add port entry into the bindings.
Signed-off-by: Olivier Moysan olivier.moysan@foss.st.com
Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml | 5 +++++ 1 file changed, 5 insertions(+)
Running 'make dtbs_check' with the schema in this patch gives the following warnings. Consider if they are expected or the schema is incorrect. These may not be new warnings.
Note that it is not yet a requirement to have 0 warnings for dtbs_check. This will change in the future.
Full log is available here: https://patchwork.ozlabs.org/patch/1559750
audio-controller@4000b000: 'port' does not match any of the regexes: '^port@[0-9]', 'pinctrl-[0-9]+' arch/arm/boot/dts/stm32mp157a-dk1.dt.yaml arch/arm/boot/dts/stm32mp157c-dk2.dt.yaml
This warning is not a new one.
The i2s2 node in stm32mp15xx-dkx.dtsi would require the following binding: port: $ref: audio-graph-port.yaml# unevaluatedProperties: false
However the spi binding requires to introduce a unit address: patternProperties: '^port@[0-9]': $ref: audio-graph-port.yaml# unevaluatedProperties: false
The warning can be removed by re-ordering the bindings patches in the serie, as "additionalProperties: true" makes the check more tolerant on extra properties.
That's never right.
The patch "ASoC: dt-bindings: stm32: i2s: add audio-graph-card port" can even be merely dropped. So, I suggest to resend the serie without audio-graph-card patch.
Only if you aren't using audio-graph-card.
Does it sound too permissive to you ?
I think perhaps you need to combine the schemas into 1. Or you need to restructure your dtsi files such that you only add spi specific properties when spi mode is enabled and only add i2s specific properties when i2s mode is enabled. Or use the /delete-property/ directive.
Rob
The STM32 SPI peripheral supports both SPI and I2S protocols. In the SoC device tree the node describes the peripheral as an SPI peripheral by default. This default configuration can be overwritten in board device tree to use the IP as an I2S peripheral. In this case the address-cells and size-cells properties from SoC DT SPI node should not be checked against STM32 I2S bindings. Set additionalProperties to "true" to allow these extra properties.
Signed-off-by: Olivier Moysan olivier.moysan@foss.st.com --- Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml b/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml index 64b70ac539f8..33ba15363c0f 100644 --- a/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml +++ b/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml @@ -73,7 +73,7 @@ required: - dmas - dma-names
-additionalProperties: false +additionalProperties: true
examples: - |
On Thu, Nov 25, 2021 at 03:40:51PM +0100, Olivier Moysan wrote:
The STM32 SPI peripheral supports both SPI and I2S protocols. In the SoC device tree the node describes the peripheral as an SPI peripheral by default. This default configuration can be overwritten in board device tree to use the IP as an I2S peripheral. In this case the address-cells and size-cells properties from SoC DT SPI node should not be checked against STM32 I2S bindings. Set additionalProperties to "true" to allow these extra properties.
Signed-off-by: Olivier Moysan olivier.moysan@foss.st.com
Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml b/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml index 64b70ac539f8..33ba15363c0f 100644 --- a/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml +++ b/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml @@ -73,7 +73,7 @@ required:
- dmas
- dma-names
-additionalProperties: false +additionalProperties: true
This is only allowed for schemas that are incomplete collections of properties such as common bindings.
Rob
Some STM32 SPI peripheral instances support I2S for audio. SPI and I2S features were initially described through two separated nodes in the SoC Device Tree. In the next SoC Device Trees a single node is used to describe SPI peripheral, leading to a change in node name for I2S. Change example in STM32 DT binding example to match this change.
Signed-off-by: Olivier Moysan olivier.moysan@foss.st.com --- Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml b/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml index 33ba15363c0f..591f9c941f54 100644 --- a/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml +++ b/Documentation/devicetree/bindings/sound/st,stm32-i2s.yaml @@ -79,7 +79,7 @@ examples: - | #include <dt-bindings/interrupt-controller/arm-gic.h> #include <dt-bindings/clock/stm32mp1-clks.h> - i2s2: audio-controller@4000b000 { + spi2s2: spi@4000b000 { compatible = "st,stm32h7-i2s"; #sound-dai-cells = <0>; reg = <0x4000b000 0x400>;
When a SPI instance offers I2S feature, two nodes are defined in SoC device tree to support both SPI and I2S. Merge SPI node and I2S nodes into a single node, to avoid hardware description duplication and compilation warnings. spi2sx label is used to identify the SPI instances which are supporting I2S feature.
Rename nodes, to match new labels of SPI/I2S nodes in the SoC device tree on following boards: - STMP32MP15xx-DKx - STMP32MP157C-EV1 - STMP32MP15xx-dhcor-avenger96 - STMP32MP15xx-dhcom-drc02
In DT check utility, the spi2s2 node is identified as an spi node. The check_spi_bus_reg() function issues a warning "missing or empty reg property" if reg property is not defined in child nodes. Add reg property to STM32 I2S port node on STM32MP15XX-DK board to match this requirement and add related unit-address in node name.
Signed-off-by: Olivier Moysan olivier.moysan@foss.st.com --- arch/arm/boot/dts/stm32mp151.dtsi | 39 ++----------------- arch/arm/boot/dts/stm32mp157c-ev1.dts | 2 +- .../arm/boot/dts/stm32mp15xx-dhcom-drc02.dtsi | 2 +- .../boot/dts/stm32mp15xx-dhcor-avenger96.dtsi | 2 +- arch/arm/boot/dts/stm32mp15xx-dkx.dtsi | 7 +++- 5 files changed, 11 insertions(+), 41 deletions(-)
diff --git a/arch/arm/boot/dts/stm32mp151.dtsi b/arch/arm/boot/dts/stm32mp151.dtsi index f693a7d24247..61226821ff8c 100644 --- a/arch/arm/boot/dts/stm32mp151.dtsi +++ b/arch/arm/boot/dts/stm32mp151.dtsi @@ -386,7 +386,7 @@ }; };
- spi2: spi@4000b000 { + spi2s2: spi@4000b000 { #address-cells = <1>; #size-cells = <0>; compatible = "st,stm32h7-spi"; @@ -400,18 +400,7 @@ status = "disabled"; };
- i2s2: audio-controller@4000b000 { - compatible = "st,stm32h7-i2s"; - #sound-dai-cells = <0>; - reg = <0x4000b000 0x400>; - interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>; - dmas = <&dmamux1 39 0x400 0x01>, - <&dmamux1 40 0x400 0x01>; - dma-names = "rx", "tx"; - status = "disabled"; - }; - - spi3: spi@4000c000 { + spi2s3: spi@4000c000 { #address-cells = <1>; #size-cells = <0>; compatible = "st,stm32h7-spi"; @@ -425,17 +414,6 @@ status = "disabled"; };
- i2s3: audio-controller@4000c000 { - compatible = "st,stm32h7-i2s"; - #sound-dai-cells = <0>; - reg = <0x4000c000 0x400>; - interrupts = <GIC_SPI 51 IRQ_TYPE_LEVEL_HIGH>; - dmas = <&dmamux1 61 0x400 0x01>, - <&dmamux1 62 0x400 0x01>; - dma-names = "rx", "tx"; - status = "disabled"; - }; - spdifrx: audio-controller@4000d000 { compatible = "st,stm32h7-spdifrx"; #sound-dai-cells = <0>; @@ -681,7 +659,7 @@ status = "disabled"; };
- spi1: spi@44004000 { + spi2s1: spi@44004000 { #address-cells = <1>; #size-cells = <0>; compatible = "st,stm32h7-spi"; @@ -695,17 +673,6 @@ status = "disabled"; };
- i2s1: audio-controller@44004000 { - compatible = "st,stm32h7-i2s"; - #sound-dai-cells = <0>; - reg = <0x44004000 0x400>; - interrupts = <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>; - dmas = <&dmamux1 37 0x400 0x01>, - <&dmamux1 38 0x400 0x01>; - dma-names = "rx", "tx"; - status = "disabled"; - }; - spi4: spi@44005000 { #address-cells = <1>; #size-cells = <0>; diff --git a/arch/arm/boot/dts/stm32mp157c-ev1.dts b/arch/arm/boot/dts/stm32mp157c-ev1.dts index 5c5b1ddf7bfd..c836b4a1dbe2 100644 --- a/arch/arm/boot/dts/stm32mp157c-ev1.dts +++ b/arch/arm/boot/dts/stm32mp157c-ev1.dts @@ -293,7 +293,7 @@ status = "disabled"; };
-&spi1 { +&spi2s1 { pinctrl-names = "default"; pinctrl-0 = <&spi1_pins_a>; status = "disabled"; diff --git a/arch/arm/boot/dts/stm32mp15xx-dhcom-drc02.dtsi b/arch/arm/boot/dts/stm32mp15xx-dhcom-drc02.dtsi index 4b10b013ffd5..29f18382d962 100644 --- a/arch/arm/boot/dts/stm32mp15xx-dhcom-drc02.dtsi +++ b/arch/arm/boot/dts/stm32mp15xx-dhcom-drc02.dtsi @@ -114,7 +114,7 @@ disable-wp; };
-&spi1 { +&spi2s1 { pinctrl-names = "default"; pinctrl-0 = <&spi1_pins_a>; cs-gpios = <&gpioz 3 0>; diff --git a/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi b/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi index 6885948f3024..0dce9b118318 100644 --- a/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi +++ b/arch/arm/boot/dts/stm32mp15xx-dhcor-avenger96.dtsi @@ -362,7 +362,7 @@ }; };
-&spi2 { +&spi2s2 { pinctrl-names = "default"; pinctrl-0 = <&spi2_pins_a>; cs-gpios = <&gpioi 0 0>; diff --git a/arch/arm/boot/dts/stm32mp15xx-dkx.dtsi b/arch/arm/boot/dts/stm32mp15xx-dkx.dtsi index 48beed0f1f30..4c362af95736 100644 --- a/arch/arm/boot/dts/stm32mp15xx-dkx.dtsi +++ b/arch/arm/boot/dts/stm32mp15xx-dkx.dtsi @@ -427,7 +427,9 @@ status = "disabled"; };
-&i2s2 { +&spi2s2 { + compatible = "st,stm32h7-i2s"; + #sound-dai-cells = <0>; clocks = <&rcc SPI2>, <&rcc SPI2_K>, <&rcc PLL3_Q>, <&rcc PLL3_R>; clock-names = "pclk", "i2sclk", "x8k", "x11k"; pinctrl-names = "default", "sleep"; @@ -435,7 +437,8 @@ pinctrl-1 = <&i2s2_sleep_pins_a>; status = "okay";
- i2s2_port: port { + i2s2_port: port@0 { + reg = <0>; i2s2_endpoint: endpoint { remote-endpoint = <&sii9022_tx_endpoint>; format = "i2s";
participants (2)
-
Olivier Moysan
-
Rob Herring