| Message ID | 20260605062900.368376-14-dario.binacchi@amarulasolutions.com |
|---|---|
| State | New |
| Headers | show |
| Series |
|
| Related | show |
Hi Dario, On 6/5/26 08:27, Dario Binacchi wrote: > Support for Engicam MicroGEA-STM32MP257-RMM board with: > > - 8 GB eMMC Flash > - 2 GB LPDDR4 DRAM > - CAN > - LEDs > - LCD panel with touchscreen > - Micro SD card connector > - Audio codec > - Buzzer > > Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> > > --- > > (no changes since v2) > > Changes in v2: > - Drop the clocks property from the sai1 node in stm32mp257-engicam-microgea-rmm.dts > to avoid overriding the peripheral bus clock reference defined in the base > SoC device tree. Suggested by Sashiko. > - Reference the existing labeled nodes directly at the root level using > &sai1a and &sai1b in stm32mp257-engicam-microgea-rmm.dts instead of > redefining the entire node structure and redeclaring the labels. Suggested by Sashiko. > - Drop the #clock-cells property from sai1a and remove the reference to sai1a from > the clocks array in sai1b, relying strictly on the st,sync property to handle > internal synchronization. > > arch/arm64/boot/dts/st/Makefile | 1 + > .../st/stm32mp257-engicam-microgea-rmm.dts | 319 ++++++++++++++++++ > 2 files changed, 320 insertions(+) > create mode 100644 arch/arm64/boot/dts/st/stm32mp257-engicam-microgea-rmm.dts > > diff --git a/arch/arm64/boot/dts/st/Makefile b/arch/arm64/boot/dts/st/Makefile > index 63908113ae36..386eca593c54 100644 > --- a/arch/arm64/boot/dts/st/Makefile > +++ b/arch/arm64/boot/dts/st/Makefile > @@ -2,5 +2,6 @@ > dtb-$(CONFIG_ARCH_STM32) += \ > stm32mp215f-dk.dtb \ > stm32mp235f-dk.dtb \ > + stm32mp257-engicam-microgea-rmm.dtb \ > stm32mp257f-dk.dtb \ > stm32mp257f-ev1.dtb > diff --git a/arch/arm64/boot/dts/st/stm32mp257-engicam-microgea-rmm.dts b/arch/arm64/boot/dts/st/stm32mp257-engicam-microgea-rmm.dts > new file mode 100644 > index 000000000000..0212c03aae1a > --- /dev/null > +++ b/arch/arm64/boot/dts/st/stm32mp257-engicam-microgea-rmm.dts > @@ -0,0 +1,319 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (C) 2026 Amarula Solutions, Dario Binacchi <dario.binacchi@amarulasolutions.com> > + * Copyright (C) 2026 Engicam srl > + */ > + > +/dts-v1/; > + > +#include <dt-bindings/gpio/gpio.h> > +#include <dt-bindings/input/input.h> > +#include <dt-bindings/leds/common.h> > + > +#include "stm32mp257-engicam-microgea.dtsi" > + > +/ { > + model = "Engicam MicroGEA STM32MP257D RMM Board"; If the SoC is an STM32MP257D, as mentionned in the board model, stm32mp25xf.dtsi should not be included in stm32mp257-engicam-microgea.dtsi (in PATCH 12). Unless the SoM can be fitted with any STM32MP257, in which case, when stm32mp25xf.dtsi is populated, you will need to add /delete-node/ statements on the board side, to remove the HW crypto support. Regards, Amelie > + compatible = "engicam,microgea-stm32mp257-rmm", > + "engicam,microgea-stm32mp257", "st,stm32mp257"; > + > + aliases { > + mmc0 = &sdmmc1; > + mmc1 = &sdmmc2; > + serial0 = &usart2; > + serial1 = &usart1; > + }; > + > + backlight: backlight { > + compatible = "pwm-backlight"; > + brightness-levels = <0 100>; > + num-interpolated-steps = <100>; > + default-brightness-level = <85>; > + pwms = <&pwm2 0 100000 0>; > + }; > + > + buzzer { > + compatible = "pwm-beeper"; > + pwms = <&pwm4 0 1000000 0>; > + }; > + > + chosen { > + stdout-path = "serial0:115200n8"; > + #address-cells = <2>; > + #size-cells = <2>; > + ranges; > + > + framebuffer { > + compatible = "simple-framebuffer"; > + clocks = <&rcc CK_BUS_LTDC>, <&rcc CK_KER_LTDC>; > + lcd-supply = <®_3v3>; > + status = "disabled"; > + }; > + }; > + > + leds { > + compatible = "gpio-leds"; > + > + led-0 { > + gpios = <&gpioh 2 GPIO_ACTIVE_HIGH>; > + default-state = "off"; > + status = "okay"; > + }; > + > + led-1 { > + gpios = <&gpioh 6 GPIO_ACTIVE_HIGH>; > + default-state = "off"; > + status = "okay"; > + }; > + }; > + > + mclk: clock-mclk { > + compatible = "fixed-clock"; > + #clock-cells = <0>; > + clock-frequency = <24000000>; > + }; > + > + reg_1v8: regulator-1v8 { > + compatible = "regulator-fixed"; > + regulator-name = "1v8"; > + regulator-min-microvolt = <1800000>; > + regulator-max-microvolt = <1800000>; > + }; > + > + reg_3v3: regulator-3v3 { > + compatible = "regulator-fixed"; > + regulator-name = "3v3"; > + regulator-min-microvolt = <3300000>; > + regulator-max-microvolt = <3300000>; > + }; > + > + reg_ext_pwr: regulator-ext-pwr { > + compatible = "regulator-fixed"; > + regulator-name = "ext-pwr"; > + regulator-min-microvolt = <5000000>; > + regulator-max-microvolt = <5000000>; > + gpio = <&gpiog 0 GPIO_ACTIVE_HIGH>; > + enable-active-high; > + regulator-always-on; > + }; > + > + sound { > + compatible = "audio-graph-card"; > + label = "STM32MP25-RMM"; > + widgets = "Headphone", "Headphone Jack", > + "Microphone", "Microphone Jack"; > + routing = "Headphone Jack", "HP_OUT", > + "MIC_IN", "Microphone Jack", > + "Microphone Jack", "Mic Bias"; > + dais = <&sai1a_port &sai1b_port>; > + status = "okay"; > + }; > +}; > + > +&arm_wdt { > + timeout-sec = <32>; > + status = "okay"; > +}; > + > +&i2c1 { > + pinctrl-names = "default", "sleep"; > + pinctrl-0 = <&i2c1_pins_a>; > + pinctrl-1 = <&i2c1_sleep_pins_a>; > + i2c-scl-rising-time-ns = <185>; > + i2c-scl-falling-time-ns = <20>; > + status = "okay"; > + /* spare dmas for other usage */ > + /delete-property/dmas; > + /delete-property/dma-names; > + > + touchscreen@38 { > + compatible = "edt,edt-ft5306"; > + reg = <0x38>; > + interrupt-parent = <&gpiob>; > + interrupts = <0 IRQ_TYPE_EDGE_FALLING>; > + reset-gpios = <&gpiod 1 GPIO_ACTIVE_LOW>; > + touchscreen-size-x = <1280>; > + touchscreen-size-y = <800>; > + }; > +}; > + > +&i2c2 { > + pinctrl-names = "default", "sleep"; > + pinctrl-0 = <&i2c2_pins_a>; > + pinctrl-1 = <&i2c2_sleep_pins_a>; > + i2c-scl-rising-time-ns = <185>; > + i2c-scl-falling-time-ns = <20>; > + status = "okay"; > + /* spare dmas for other usage */ > + /delete-property/dmas; > + /delete-property/dma-names; > + > + sgtl5000: codec@a { > + compatible = "fsl,sgtl5000"; > + reg = <0x0a>; > + #sound-dai-cells = <0>; > + clocks = <&mclk>; > + > + VDDA-supply = <®_3v3>; > + VDDIO-supply = <®_3v3>; > + VDDD-supply = <®_1v8>; > + > + sgtl5000_port: port { > + #address-cells = <1>; > + #size-cells = <0>; > + > + sgtl5000_tx_endpoint: endpoint@0 { > + reg = <0>; > + remote-endpoint = <&sai1a_endpoint>; > + frame-master = <&sgtl5000_tx_endpoint>; > + bitclock-master = <&sgtl5000_tx_endpoint>; > + }; > + > + sgtl5000_rx_endpoint: endpoint@1 { > + reg = <1>; > + remote-endpoint = <&sai1b_endpoint>; > + frame-master = <&sgtl5000_rx_endpoint>; > + bitclock-master = <&sgtl5000_rx_endpoint>; > + }; > + }; > + }; > +}; > + > +<dc { > + pinctrl-names = "default", "sleep"; > + pinctrl-0 = <<dc_pins_a>; > + pinctrl-1 = <<dc_sleep_pins_a>; > + status = "okay"; > + > + port { > + ltdc_out: endpoint { > + remote-endpoint = <&panel_in>; > + }; > + }; > +}; > + > +&m_can1 { > + pinctrl-names = "default", "sleep"; > + pinctrl-0 = <&m_can1_pins_a>; > + pinctrl-1 = <&m_can1_sleep_pins_a>; > + status = "okay"; > +}; > + > +&sai1 { > + pinctrl-names = "default", "sleep"; > + pinctrl-0 = <&sai1a_pins_a>, <&sai1b_pins_a>; > + pinctrl-1 = <&sai1a_sleep_pins_a>, <&sai1b_sleep_pins_a>; > + status = "okay"; > +}; > + > +&sai1a { > + dma-names = "tx"; > + status = "okay"; > + > + sai1a_port: port { > + sai1a_endpoint: endpoint { > + remote-endpoint = <&sgtl5000_tx_endpoint>; > + dai-format = "i2s"; > + mclk-fs = <512>; > + }; > + }; > +}; > + > +&sai1b { > + dma-names = "rx"; > + st,sync = <&sai1a 2>; > + clocks = <&rcc CK_KER_SAI1>; > + clock-names = "sai_ck"; > + status = "okay"; > + > + sai1b_port: port { > + sai1b_endpoint: endpoint { > + remote-endpoint = <&sgtl5000_rx_endpoint>; > + dai-format = "i2s"; > + mclk-fs = <512>; > + }; > + }; > +}; > + > +/* MicroSD */ > +&sdmmc1 { > + pinctrl-names = "default", "opendrain", "sleep"; > + pinctrl-0 = <&sdmmc1_b4_pins_a>; > + pinctrl-1 = <&sdmmc1_b4_od_pins_a>; > + pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>; > + broken-cd; > + disable-wp; > + st,neg-edge; > + bus-width = <4>; > + vmmc-supply = <&scmi_v3v3>; > + vqmmc-supply = <&scmi_vddio1>; > + no-1-8-v; > + status = "okay"; > +}; > + > +&spi1 { > + pinctrl-names = "default", "sleep"; > + pinctrl-0 = <&spi1_pins_a>; > + pinctrl-1 = <&spi1_sleep_pins_a>; > + #address-cells = <1>; > + #size-cells = <0>; > + cs-gpios = <&gpioh 8 GPIO_ACTIVE_HIGH>, <&gpioh 3 GPIO_ACTIVE_HIGH>; > + status = "okay"; > + > + display: display@0 { > + compatible = "rocktech,rk050hr345-ct106a", "ilitek,ili9806e"; > + reg = <0>; > + vdd-supply = <®_3v3>; > + spi-max-frequency = <10000000>; > + reset-gpios = <&gpiob 6 GPIO_ACTIVE_LOW>; > + backlight = <&backlight>; > + > + port { > + panel_in: endpoint { > + remote-endpoint = <<dc_out>; > + }; > + }; > + }; > +}; > + > +&timers2 { > + status = "okay"; > + > + pwm2: pwm { > + pinctrl-0 = <&pwm2_pins_a>; > + pinctrl-1 = <&pwm2_sleep_pins_a>; > + pinctrl-names = "default", "sleep"; > + status = "okay"; > + }; > +}; > + > +&timers4 { > + status = "okay"; > + > + pwm4: pwm { > + pinctrl-names = "default", "sleep"; > + pinctrl-0 = <&pwm4_pins_a>; > + pinctrl-1 = <&pwm4_sleep_pins_a>; > + status = "okay"; > + }; > +}; > + > +&usart1 { > + pinctrl-names = "default", "idle", "sleep"; > + pinctrl-0 = <&usart1_pins_b>; > + pinctrl-1 = <&usart1_idle_pins_b>; > + pinctrl-2 = <&usart1_sleep_pins_b>; > + /delete-property/ dmas; > + /delete-property/ dma-names; > + status = "okay"; > +}; > + > +&usart2 { > + pinctrl-names = "default", "idle", "sleep"; > + pinctrl-0 = <&usart2_pins_a>; > + pinctrl-1 = <&usart2_idle_pins_a>; > + pinctrl-2 = <&usart2_sleep_pins_a>; > + /delete-property/ dmas; > + /delete-property/ dma-names; > + status = "okay"; > +}; To unsubscribe from this group and stop receiving emails from it, send an email to linux-amarula+unsubscribe@amarulasolutions.com.
diff --git a/arch/arm64/boot/dts/st/Makefile b/arch/arm64/boot/dts/st/Makefile index 63908113ae36..386eca593c54 100644 --- a/arch/arm64/boot/dts/st/Makefile +++ b/arch/arm64/boot/dts/st/Makefile @@ -2,5 +2,6 @@ dtb-$(CONFIG_ARCH_STM32) += \ stm32mp215f-dk.dtb \ stm32mp235f-dk.dtb \ + stm32mp257-engicam-microgea-rmm.dtb \ stm32mp257f-dk.dtb \ stm32mp257f-ev1.dtb diff --git a/arch/arm64/boot/dts/st/stm32mp257-engicam-microgea-rmm.dts b/arch/arm64/boot/dts/st/stm32mp257-engicam-microgea-rmm.dts new file mode 100644 index 000000000000..0212c03aae1a --- /dev/null +++ b/arch/arm64/boot/dts/st/stm32mp257-engicam-microgea-rmm.dts @@ -0,0 +1,319 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2026 Amarula Solutions, Dario Binacchi <dario.binacchi@amarulasolutions.com> + * Copyright (C) 2026 Engicam srl + */ + +/dts-v1/; + +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/input/input.h> +#include <dt-bindings/leds/common.h> + +#include "stm32mp257-engicam-microgea.dtsi" + +/ { + model = "Engicam MicroGEA STM32MP257D RMM Board"; + compatible = "engicam,microgea-stm32mp257-rmm", + "engicam,microgea-stm32mp257", "st,stm32mp257"; + + aliases { + mmc0 = &sdmmc1; + mmc1 = &sdmmc2; + serial0 = &usart2; + serial1 = &usart1; + }; + + backlight: backlight { + compatible = "pwm-backlight"; + brightness-levels = <0 100>; + num-interpolated-steps = <100>; + default-brightness-level = <85>; + pwms = <&pwm2 0 100000 0>; + }; + + buzzer { + compatible = "pwm-beeper"; + pwms = <&pwm4 0 1000000 0>; + }; + + chosen { + stdout-path = "serial0:115200n8"; + #address-cells = <2>; + #size-cells = <2>; + ranges; + + framebuffer { + compatible = "simple-framebuffer"; + clocks = <&rcc CK_BUS_LTDC>, <&rcc CK_KER_LTDC>; + lcd-supply = <®_3v3>; + status = "disabled"; + }; + }; + + leds { + compatible = "gpio-leds"; + + led-0 { + gpios = <&gpioh 2 GPIO_ACTIVE_HIGH>; + default-state = "off"; + status = "okay"; + }; + + led-1 { + gpios = <&gpioh 6 GPIO_ACTIVE_HIGH>; + default-state = "off"; + status = "okay"; + }; + }; + + mclk: clock-mclk { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <24000000>; + }; + + reg_1v8: regulator-1v8 { + compatible = "regulator-fixed"; + regulator-name = "1v8"; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + + reg_3v3: regulator-3v3 { + compatible = "regulator-fixed"; + regulator-name = "3v3"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + }; + + reg_ext_pwr: regulator-ext-pwr { + compatible = "regulator-fixed"; + regulator-name = "ext-pwr"; + regulator-min-microvolt = <5000000>; + regulator-max-microvolt = <5000000>; + gpio = <&gpiog 0 GPIO_ACTIVE_HIGH>; + enable-active-high; + regulator-always-on; + }; + + sound { + compatible = "audio-graph-card"; + label = "STM32MP25-RMM"; + widgets = "Headphone", "Headphone Jack", + "Microphone", "Microphone Jack"; + routing = "Headphone Jack", "HP_OUT", + "MIC_IN", "Microphone Jack", + "Microphone Jack", "Mic Bias"; + dais = <&sai1a_port &sai1b_port>; + status = "okay"; + }; +}; + +&arm_wdt { + timeout-sec = <32>; + status = "okay"; +}; + +&i2c1 { + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c1_pins_a>; + pinctrl-1 = <&i2c1_sleep_pins_a>; + i2c-scl-rising-time-ns = <185>; + i2c-scl-falling-time-ns = <20>; + status = "okay"; + /* spare dmas for other usage */ + /delete-property/dmas; + /delete-property/dma-names; + + touchscreen@38 { + compatible = "edt,edt-ft5306"; + reg = <0x38>; + interrupt-parent = <&gpiob>; + interrupts = <0 IRQ_TYPE_EDGE_FALLING>; + reset-gpios = <&gpiod 1 GPIO_ACTIVE_LOW>; + touchscreen-size-x = <1280>; + touchscreen-size-y = <800>; + }; +}; + +&i2c2 { + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&i2c2_pins_a>; + pinctrl-1 = <&i2c2_sleep_pins_a>; + i2c-scl-rising-time-ns = <185>; + i2c-scl-falling-time-ns = <20>; + status = "okay"; + /* spare dmas for other usage */ + /delete-property/dmas; + /delete-property/dma-names; + + sgtl5000: codec@a { + compatible = "fsl,sgtl5000"; + reg = <0x0a>; + #sound-dai-cells = <0>; + clocks = <&mclk>; + + VDDA-supply = <®_3v3>; + VDDIO-supply = <®_3v3>; + VDDD-supply = <®_1v8>; + + sgtl5000_port: port { + #address-cells = <1>; + #size-cells = <0>; + + sgtl5000_tx_endpoint: endpoint@0 { + reg = <0>; + remote-endpoint = <&sai1a_endpoint>; + frame-master = <&sgtl5000_tx_endpoint>; + bitclock-master = <&sgtl5000_tx_endpoint>; + }; + + sgtl5000_rx_endpoint: endpoint@1 { + reg = <1>; + remote-endpoint = <&sai1b_endpoint>; + frame-master = <&sgtl5000_rx_endpoint>; + bitclock-master = <&sgtl5000_rx_endpoint>; + }; + }; + }; +}; + +<dc { + pinctrl-names = "default", "sleep"; + pinctrl-0 = <<dc_pins_a>; + pinctrl-1 = <<dc_sleep_pins_a>; + status = "okay"; + + port { + ltdc_out: endpoint { + remote-endpoint = <&panel_in>; + }; + }; +}; + +&m_can1 { + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&m_can1_pins_a>; + pinctrl-1 = <&m_can1_sleep_pins_a>; + status = "okay"; +}; + +&sai1 { + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&sai1a_pins_a>, <&sai1b_pins_a>; + pinctrl-1 = <&sai1a_sleep_pins_a>, <&sai1b_sleep_pins_a>; + status = "okay"; +}; + +&sai1a { + dma-names = "tx"; + status = "okay"; + + sai1a_port: port { + sai1a_endpoint: endpoint { + remote-endpoint = <&sgtl5000_tx_endpoint>; + dai-format = "i2s"; + mclk-fs = <512>; + }; + }; +}; + +&sai1b { + dma-names = "rx"; + st,sync = <&sai1a 2>; + clocks = <&rcc CK_KER_SAI1>; + clock-names = "sai_ck"; + status = "okay"; + + sai1b_port: port { + sai1b_endpoint: endpoint { + remote-endpoint = <&sgtl5000_rx_endpoint>; + dai-format = "i2s"; + mclk-fs = <512>; + }; + }; +}; + +/* MicroSD */ +&sdmmc1 { + pinctrl-names = "default", "opendrain", "sleep"; + pinctrl-0 = <&sdmmc1_b4_pins_a>; + pinctrl-1 = <&sdmmc1_b4_od_pins_a>; + pinctrl-2 = <&sdmmc1_b4_sleep_pins_a>; + broken-cd; + disable-wp; + st,neg-edge; + bus-width = <4>; + vmmc-supply = <&scmi_v3v3>; + vqmmc-supply = <&scmi_vddio1>; + no-1-8-v; + status = "okay"; +}; + +&spi1 { + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&spi1_pins_a>; + pinctrl-1 = <&spi1_sleep_pins_a>; + #address-cells = <1>; + #size-cells = <0>; + cs-gpios = <&gpioh 8 GPIO_ACTIVE_HIGH>, <&gpioh 3 GPIO_ACTIVE_HIGH>; + status = "okay"; + + display: display@0 { + compatible = "rocktech,rk050hr345-ct106a", "ilitek,ili9806e"; + reg = <0>; + vdd-supply = <®_3v3>; + spi-max-frequency = <10000000>; + reset-gpios = <&gpiob 6 GPIO_ACTIVE_LOW>; + backlight = <&backlight>; + + port { + panel_in: endpoint { + remote-endpoint = <<dc_out>; + }; + }; + }; +}; + +&timers2 { + status = "okay"; + + pwm2: pwm { + pinctrl-0 = <&pwm2_pins_a>; + pinctrl-1 = <&pwm2_sleep_pins_a>; + pinctrl-names = "default", "sleep"; + status = "okay"; + }; +}; + +&timers4 { + status = "okay"; + + pwm4: pwm { + pinctrl-names = "default", "sleep"; + pinctrl-0 = <&pwm4_pins_a>; + pinctrl-1 = <&pwm4_sleep_pins_a>; + status = "okay"; + }; +}; + +&usart1 { + pinctrl-names = "default", "idle", "sleep"; + pinctrl-0 = <&usart1_pins_b>; + pinctrl-1 = <&usart1_idle_pins_b>; + pinctrl-2 = <&usart1_sleep_pins_b>; + /delete-property/ dmas; + /delete-property/ dma-names; + status = "okay"; +}; + +&usart2 { + pinctrl-names = "default", "idle", "sleep"; + pinctrl-0 = <&usart2_pins_a>; + pinctrl-1 = <&usart2_idle_pins_a>; + pinctrl-2 = <&usart2_sleep_pins_a>; + /delete-property/ dmas; + /delete-property/ dma-names; + status = "okay"; +};
Support for Engicam MicroGEA-STM32MP257-RMM board with: - 8 GB eMMC Flash - 2 GB LPDDR4 DRAM - CAN - LEDs - LCD panel with touchscreen - Micro SD card connector - Audio codec - Buzzer Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com> --- (no changes since v2) Changes in v2: - Drop the clocks property from the sai1 node in stm32mp257-engicam-microgea-rmm.dts to avoid overriding the peripheral bus clock reference defined in the base SoC device tree. Suggested by Sashiko. - Reference the existing labeled nodes directly at the root level using &sai1a and &sai1b in stm32mp257-engicam-microgea-rmm.dts instead of redefining the entire node structure and redeclaring the labels. Suggested by Sashiko. - Drop the #clock-cells property from sai1a and remove the reference to sai1a from the clocks array in sai1b, relying strictly on the st,sync property to handle internal synchronization. arch/arm64/boot/dts/st/Makefile | 1 + .../st/stm32mp257-engicam-microgea-rmm.dts | 319 ++++++++++++++++++ 2 files changed, 320 insertions(+) create mode 100644 arch/arm64/boot/dts/st/stm32mp257-engicam-microgea-rmm.dts