]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
arm64: dts: qcom: Add Arduino Monza (VENTUNO Q) board support
authorLoic Poulain <loic.poulain@oss.qualcomm.com>
Fri, 13 Mar 2026 10:38:21 +0000 (10:38 +0000)
committerBjorn Andersson <andersson@kernel.org>
Thu, 26 Mar 2026 14:40:43 +0000 (09:40 -0500)
Add device tree support for the Arduino VENTUNO Q board,
based on the Qualcomm QCS8300 (Monaco) SoC.

The board features a Qualcomm Monza SoM and integrates various
peripherals, including:
- USB Type‑C connector with dual‑role support
- ADV7535 DSI‑to‑HDMI bridge
- MAX98091 audio codec
- 2.5G Ethernet PHY (HSGMII)
- PCIe0 (to onboard WiFi chipset and USB bridge)
- PCIe1 (to M2/nvme)
- Button (via GPIO‑keys)

Signed-off-by: Loic Poulain <loic.poulain@oss.qualcomm.com>
Co-developed-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20260313103824.2634519-7-srinivas.kandagatla@oss.qualcomm.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
arch/arm64/boot/dts/qcom/Makefile
arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts [new file with mode: 0644]
arch/arm64/boot/dts/qcom/monaco.dtsi

index 479d1e4bfef98a5855c09aab02fea28d463dcd1a..2349cd200a61cebee9e8739422a226cd75ded3be 100644 (file)
@@ -52,6 +52,7 @@ lemans-evk-el2-dtbs := lemans-evk.dtb lemans-el2.dtbo
 dtb-$(CONFIG_ARCH_QCOM)        += lemans-evk-el2.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += mahua-crd.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += milos-fairphone-fp6.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += monaco-arduino-monza.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += monaco-evk.dtb
 
 monaco-evk-camera-imx577-dtbs  := monaco-evk.dtb monaco-evk-camera-imx577.dtbo
diff --git a/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts b/arch/arm64/boot/dts/qcom/monaco-arduino-monza.dts
new file mode 100644 (file)
index 0000000..ca14f0e
--- /dev/null
@@ -0,0 +1,466 @@
+// SPDX-License-Identifier: BSD-3-Clause
+/*
+ * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
+ */
+
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/sound/qcom,q6dsp-lpass-ports.h>
+
+#include "monaco.dtsi"
+#include "monaco-pmics.dtsi"
+#include "monaco-monza-som.dtsi"
+
+/ {
+       model = "Arduino VENTUNO Q";
+       compatible = "arduino,monza", "qcom,qcs8300";
+
+       aliases {
+               ethernet0 = &ethernet0;
+               i2c1 = &i2c1;
+               serial0 = &uart7;
+       };
+
+       chosen {
+               stdout-path = "serial0:115200n8";
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+               pinctrl-0 = <&gpio_keys_default>;
+               pinctrl-names = "default";
+
+               button-home {
+                       label = "Home Key";
+                       linux,code = <KEY_HOMEPAGE>;
+                       gpios = <&tlmm 79 GPIO_ACTIVE_LOW>;
+                       debounce-interval = <60>;
+               };
+       };
+
+       hdmi-connector {
+               compatible = "hdmi-connector";
+               label = "hdmi";
+               type = "a";
+
+               port {
+                       hdmi_connector_in: endpoint {
+                               remote-endpoint = <&adv7535_out>;
+                       };
+               };
+       };
+
+       sound {
+               compatible = "qcom,qcs8275-sndcard";
+               model = "arduino-monza";
+               audio-routing = "IN12",  "Headset Mic12",
+                               "Headset Mic12",  "MICBIAS",
+                               "IN56",  "Headset Mic56",
+                               "Headset Mic56",  "MICBIAS",
+                               "MIC1",  "MICBIAS",
+                               "Headphone",  "HPL",
+                               "Headphone",  "HPR",
+                               "Receiver",  "RCVL",
+                               "Receiver",  "RCVR",
+                               "Speaker",  "SPKL",
+                               "Speaker",  "SPKR";
+
+               pinctrl-0 = <&quad_mi2s_active>, <&quad_mclk_active>,  <&lpi_i2s4_active>;
+               pinctrl-names = "default";
+
+               pri-i2s-playback-dai-link {
+                       link-name = "Analog Playback";
+
+                       codec {
+                               sound-dai = <&max98091>;
+                       };
+
+                       cpu {
+                               sound-dai = <&q6apmbedai 137>;
+                       };
+
+                       platform {
+                               sound-dai = <&q6apm>;
+                       };
+               };
+
+               pri-i2s-capture-dai-link {
+                       link-name = "Analog Capture";
+
+                       codec {
+                               sound-dai = <&max98091>;
+                       };
+
+                       cpu {
+                               sound-dai = <&q6apmbedai 138>;
+                       };
+
+                       platform {
+                               sound-dai = <&q6apm>;
+                       };
+               };
+
+               hdmi-mi2s-playback-dai-link {
+                       link-name = "HDMI Playback";
+
+                       codec {
+                               sound-dai = <&adv7535>;
+                       };
+
+                       cpu {
+                               sound-dai = <&q6apmbedai 145>;
+                       };
+
+                       platform {
+                               sound-dai = <&q6apm>;
+                       };
+               };
+       };
+
+       vdc_3v3: regulator-3v3 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdc_3v3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+       };
+
+       vdc_1v8: regulator-1v8 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdc_1v8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
+       vdc_5v: regulator-5v0 {
+               compatible = "regulator-fixed";
+               regulator-name = "vdc_5v";
+               regulator-min-microvolt = <5000000>;
+               regulator-max-microvolt = <5000000>;
+               gpio = <&tlmm 49 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               regulator-always-on;
+               startup-delay-us = <20000>;
+       };
+
+       vreg_nvme: regulator-3p3-m2 {
+               compatible = "regulator-fixed";
+               regulator-name = "vreg_m2_3p3";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+               gpio = <&tlmm 51 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+               startup-delay-us = <20000>;
+       };
+};
+
+&ethernet0 {
+       phy-mode = "2500base-x";
+       phy-handle = <&hsgmii_phy0>;
+
+       pinctrl-0 = <&ethernet0_default>;
+       pinctrl-names = "default";
+
+       snps,mtl-rx-config = <&mtl_rx_setup>;
+       snps,mtl-tx-config = <&mtl_tx_setup>;
+
+       status = "okay";
+
+       mdio {
+               compatible = "snps,dwmac-mdio";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               hsgmii_phy0: ethernet-phy@1c {
+                       compatible = "ethernet-phy-id004d.d101";
+                       reg = <0x1c>;
+                       reset-gpios = <&tlmm 50 GPIO_ACTIVE_LOW>;
+                       reset-assert-us = <11000>;
+                       reset-deassert-us = <70000>;
+               };
+       };
+
+       mtl_rx_setup: rx-queues-config {
+               snps,rx-queues-to-use = <4>;
+               snps,rx-sched-sp;
+
+               queue0 {
+                       snps,dcb-algorithm;
+                       snps,map-to-dma-channel = <0x0>;
+                       snps,route-up;
+                       snps,priority = <0x1>;
+               };
+
+               queue1 {
+                       snps,dcb-algorithm;
+                       snps,map-to-dma-channel = <0x1>;
+                       snps,route-ptp;
+               };
+
+               queue2 {
+                       snps,avb-algorithm;
+                       snps,map-to-dma-channel = <0x2>;
+                       snps,route-avcp;
+               };
+
+               queue3 {
+                       snps,avb-algorithm;
+                       snps,map-to-dma-channel = <0x3>;
+                       snps,priority = <0xc>;
+               };
+       };
+
+       mtl_tx_setup: tx-queues-config {
+               snps,tx-queues-to-use = <4>;
+
+               queue0 {
+                       snps,dcb-algorithm;
+               };
+
+               queue1 {
+                       snps,dcb-algorithm;
+               };
+
+               queue2 {
+                       snps,avb-algorithm;
+                       snps,send_slope = <0x1000>;
+                       snps,idle_slope = <0x1000>;
+                       snps,high_credit = <0x3e800>;
+                       snps,low_credit = <0xffc18000>;
+               };
+
+               queue3 {
+                       snps,avb-algorithm;
+                       snps,send_slope = <0x1000>;
+                       snps,idle_slope = <0x1000>;
+                       snps,high_credit = <0x3e800>;
+                       snps,low_credit = <0xffc18000>;
+               };
+       };
+};
+
+&i2c12 {
+       clock-frequency = <400000>;
+
+       status = "okay";
+
+       max98091: audio-codec@10 {
+               compatible = "maxim,max98091";
+               reg = <0x10>;
+               pinctrl-0 = <&max98091_default>;
+               pinctrl-names = "default";
+               interrupts-extended = <&tlmm 16 IRQ_TYPE_LEVEL_HIGH>; /* GPIO_16 */
+               clocks = <&q6prmcc LPASS_CLK_ID_MCLK_3 LPASS_CLK_ATTRIBUTE_COUPLE_NO>;
+               clock-names = "mclk";
+               #sound-dai-cells = <0>;
+       };
+
+       adv7535: bridge@3d {
+               compatible = "adi,adv7535";
+               reg = <0x3d>;
+               pinctrl-0 = <&adv7535_default>;
+               pinctrl-names = "default";
+               interrupts-extended = <&tlmm 93 IRQ_TYPE_EDGE_FALLING>;
+               avdd-supply = <&vdc_1v8>;
+               dvdd-supply = <&vdc_1v8>;
+               pvdd-supply = <&vdc_1v8>;
+               a2vdd-supply = <&vdc_1v8>;
+               v3p3-supply = <&vdc_3v3>;
+               v1p2-supply = <&vdc_1v8>;
+               adi,dsi-lanes = <4>;
+               #sound-dai-cells = <0>;
+
+               ports {
+                       #address-cells = <1>;
+                       #size-cells = <0>;
+
+                       port@0 {
+                               reg = <0>;
+                               adv7535_in: endpoint {
+                                       remote-endpoint = <&mdss_dsi0_out>;
+                               };
+                       };
+
+                       port@1 {
+                               reg = <1>;
+                               adv7535_out: endpoint {
+                                       remote-endpoint = <&hdmi_connector_in>;
+                               };
+                       };
+               };
+       };
+};
+
+&mdss {
+       status = "okay";
+};
+
+&mdss_dp0 {
+       status = "okay";
+};
+
+&mdss_dp0_out {
+       data-lanes = <0 1 2 3>;
+       link-frequencies = /bits/ 64 <1620000000 2700000000 5400000000 8100000000>;
+};
+
+&mdss_dp0_phy {
+       status = "okay";
+};
+
+&mdss_dsi0 {
+       status = "okay";
+};
+
+&mdss_dsi0_out {
+       remote-endpoint = <&adv7535_in>;
+       data-lanes = <0 1 2 3>;
+};
+
+&mdss_dsi0_phy {
+       status = "okay";
+};
+
+&pcie0 {
+       pinctrl-0 = <&pcie0_default_state>;
+       pinctrl-names = "default";
+
+       vddpe-3v3-supply = <&vdc_3v3>;
+};
+
+&pcie1 {
+       pinctrl-0 = <&pcie1_default_state>;
+       pinctrl-names = "default";
+
+       vddpe-3v3-supply = <&vreg_nvme>;
+};
+
+&pcieport0 {
+       reset-gpios = <&tlmm 2 GPIO_ACTIVE_LOW>;
+
+       pci@0,0 {
+               #address-cells = <3>;
+               #size-cells = <2>;
+               device_type = "pci";
+               bus-range = <0x01 0xff>;
+               ranges;
+               reg = <0x010000 0x00 0x00 0x00 0x00>;
+
+               pci@2,0 {
+                       #address-cells = <3>;
+                       #size-cells = <2>;
+                       device_type = "pci";
+                       bus-range = <0x00 0xff>;
+                       ranges;
+                       reg = <0x021000 0x00 0x00 0x00 0x00>;
+
+                       usb@0 {
+                               compatible = "pci104c,8241";
+                               reg = <0 0 0 0 0>;
+                               ti,pwron-active-high;
+                       };
+               };
+       };
+};
+
+&pcieport1 {
+       reset-gpios = <&tlmm 23 GPIO_ACTIVE_LOW>;
+};
+
+&tlmm {
+       pcie0_default_state: pcie0-default-state {
+               wake-pins {
+                       pins = "gpio0";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-up;
+               };
+
+               clkreq-pins {
+                       pins = "gpio1";
+                       function = "pcie0_clkreq";
+                       drive-strength = <2>;
+                       bias-pull-up;
+               };
+
+               perst-pins {
+                       pins = "gpio2";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-up;
+               };
+       };
+
+       ethernet0_default: ethernet0-default-state {
+               ethernet0_mdc: ethernet0-mdc-pins {
+                       pins = "gpio5";
+                       function = "emac0_mdc";
+                       drive-strength = <16>;
+                       bias-pull-up;
+               };
+
+               ethernet0_mdio: ethernet0-mdio-pins {
+                       pins = "gpio6";
+                       function = "emac0_mdio";
+                       drive-strength = <16>;
+                       bias-pull-up;
+               };
+       };
+
+       max98091_default: max98091-default-state {
+               pins = "gpio16";
+               function = "gpio";
+               bias-pull-up;
+       };
+
+       pcie1_default_state: pcie1-default-state {
+               wake-pins {
+                       pins = "gpio21";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-up;
+               };
+
+               clkreq-pins {
+                       pins = "gpio22";
+                       function = "pcie1_clkreq";
+                       drive-strength = <2>;
+                       bias-pull-up;
+               };
+
+               perst-pins {
+                       pins = "gpio23";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-up;
+               };
+       };
+
+       gpio_keys_default: gpio-keys-default-state {
+               pins = "gpio79";
+               function = "gpio";
+               bias-disable;
+       };
+
+       adv7535_default: adv7535-default-state {
+               pins = "gpio93";
+               function = "gpio";
+               bias-pull-up;
+       };
+};
+
+&uart7 {
+       status = "okay";
+};
+
+&usb_1 {
+       status = "okay";
+};
+
+/* Internally connected to the MCU (e.g. for DFU). */
+&usb_2 {
+       dr_mode = "host";
+
+       status = "okay";
+};
index 2a0d237b37dd0bb6eaaba294e6873ec5ced5dd47..3b00b81aeaf155be6b581541a3b915d35aa87c9c 100644 (file)
                        gpio-controller;
                        #gpio-cells = <2>;
                        gpio-ranges = <&lpass_tlmm 0 0 23>;
+
+                       quad_mclk_active: quad-mclk-state {
+                               clk-pins {
+                                       pins = "gpio5";
+                                       function = "ext_mclk1_c";
+                                       drive-strength = <8>;
+                                       bias-disable;
+                               };
+                       };
+
+                       quad_mi2s_active: quad-active-state {
+                               data-pins {
+                                       pins = "gpio2", "gpio3";
+                                       function = "qua_mi2s_data";
+                                       drive-strength = <8>;
+                                       bias-disable;
+                               };
+
+                               sclk-pins {
+                                       pins = "gpio0";
+                                       function = "qua_mi2s_sclk";
+                                       drive-strength = <8>;
+                                       bias-disable;
+                               };
+
+                               ws-pins {
+                                       pins = "gpio1";
+                                       function = "qua_mi2s_ws";
+                                       drive-strength = <8>;
+                                       bias-disable;
+                               };
+                       };
+
+                       lpi_i2s4_active: lpi_i2s4-active-state {
+                               data0-pins {
+                                       pins = "gpio17";
+                                       function = "i2s4_data";
+                                       drive-strength = <8>;
+                                       bias-disable;
+                               };
+
+                               clk-pins {
+                                       pins = "gpio12";
+                                       function = "i2s4_clk";
+                                       drive-strength = <8>;
+                                       bias-disable;
+                               };
+
+                               ws-pins {
+                                       pins = "gpio13";
+                                       function = "i2s4_ws";
+                                       drive-strength = <8>;
+                                       bias-disable;
+                               };
+                       };
                };
 
                lpass_ag_noc: interconnect@3c40000 {