Re: [PATCH 2/3] arm64: qcom: imola: Move analogix video/audio output to dtso

Loic Poulain
2026-05-05T15:44:55Z

On Thu, Apr 30, 2026 at 3:21 PM Riccardo Mereu
<r.mereu.kernel@arduino.cc> wrote:
>
> From: Riccardo Mereu <r.mereu@arduino.cc>
>
> This is done in order to support different video output over DSI.
> Since audio part is linked to Analogix USB-C controller it is moved to
> the same DTSO.

I'm a bit skeptical about having a separate DT overlay for this. Is
that really the right approach? The Analogix block is part of the main
board, so it feels like it should be the default video/audio output
defined directly in the board DTS, rather than in an overlay.

Would it make things unnecessarily complex if we instead keep it in
the main DTS, and only use overlays to remove or override properties
for the specific cases that require different routing (e.g.
media-carrier or waveshare)?

Regards,
Loic

>
> Signed-off-by: Riccardo Mereu <r.mereu@arduino.cc>
> ---
> arch/arm64/boot/dts/qcom/Makefile | 5 +
> ...ola.dts => qrb2210-arduino-imola-base.dts} | 122 +++++++++++++++---
> ...rb2210-arduino-imola-video_sound-usbc.dtso | 61 +++++++++
> 3 files changed, 168 insertions(+), 20 deletions(-)
> rename arch/arm64/boot/dts/qcom/{qrb2210-arduino-imola.dts => qrb2210-arduino-imola-base.dts} (85%)
> create mode 100644 arch/arm64/boot/dts/qcom/qrb2210-arduino-imola-video_sound-usbc.dtso
>
> diff --git a/arch/arm64/boot/dts/qcom/Makefile b/arch/arm64/boot/dts/qcom/Makefile
> index 4ba8e7306419..e89a0e77072b 100644
> --- a/arch/arm64/boot/dts/qcom/Makefile
> +++ b/arch/arm64/boot/dts/qcom/Makefile
> @@ -193,6 +193,11 @@ qcs9100-ride-r3-el2-dtbs := qcs9100-ride-r3.dtb lemans-el2.dtbo
> dtb-$(CONFIG_ARCH_QCOM) += qcs9100-ride-el2.dtb
> dtb-$(CONFIG_ARCH_QCOM) += qcs9100-ride-r3-el2.dtb
> dtb-$(CONFIG_ARCH_QCOM) += qdu1000-idp.dtb
> +dtb-$(CONFIG_ARCH_QCOM) += qrb2210-arduino-imola-base.dtb
> +
> +dtb-$(CONFIG_ARCH_QCOM) += qrb2210-arduino-imola-video_sound-usbc.dtbo
> +
> +qrb2210-arduino-imola-dtbs := qrb2210-arduino-imola-base.dtb qrb2210-arduino-imola-video_sound-usbc.dtbo
> dtb-$(CONFIG_ARCH_QCOM) += qrb2210-arduino-imola.dtb
> dtb-$(CONFIG_ARCH_QCOM) += qrb2210-rb1.dtb
>
> diff --git a/arch/arm64/boot/dts/qcom/qrb2210-arduino-imola.dts b/arch/arm64/boot/dts/qcom/qrb2210-arduino-imola-base.dts
> similarity index 85%
> rename from arch/arm64/boot/dts/qcom/qrb2210-arduino-imola.dts
> rename to arch/arm64/boot/dts/qcom/qrb2210-arduino-imola-base.dts
> index bf088fa9807f..fb22effb9a35 100644
> --- a/arch/arm64/boot/dts/qcom/qrb2210-arduino-imola.dts
> +++ b/arch/arm64/boot/dts/qcom/qrb2210-arduino-imola-base.dts
> @@ -1,6 +1,6 @@
> // SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
> /*
> - * Copyright (c) 2025, Arduino SRL
> + * Copyright (c) 2026, Arduino SRL
> */
>
> /dts-v1/;
> @@ -110,6 +110,106 @@ multi-led {
> leds = <&ledr>, <&ledg>, <&ledb>;
> };
>
> + sound: sound {
> + compatible = "qcom,qrb2210-sndcard";
> + model = "Arduino-Imola-HPH-LOUT";
> + audio-routing = "IN1_HPHL", "HPHL_OUT",
> + "IN2_HPHR", "HPHR_OUT",
> + "AMIC2", "MIC BIAS2";
> +
> + mm1-dai-link {
> + link-name = "MultiMedia1";
> +
> + cpu {
> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA1>;
> + };
> + };
> +
> + mm2-dai-link {
> + link-name = "MultiMedia2";
> +
> + cpu {
> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA2>;
> + };
> + };
> +
> + mm3-dai-link {
> + link-name = "MultiMedia3";
> +
> + cpu {
> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA3>;
> + };
> + };
> +
> + mm4-dai-link {
> + link-name = "MultiMedia4";
> +
> + cpu {
> + sound-dai = <&q6asmdai MSM_FRONTEND_DAI_MULTIMEDIA4>;
> + };
> + };
> +
> + hph-playback-dai-link {
> + link-name = "HPH Playback";
> + cpu {
> + sound-dai = <&q6afedai RX_CODEC_DMA_RX_0>;
> + };
> +
> + platform {
> + sound-dai = <&q6routing>;
> + };
> +
> + codec {
> + sound-dai = <&pmic4125_codec 0>, <&swr1 0>, <&rxmacro 0>;
> + };
> + };
> +
> + lo-playback-dai-link {
> + link-name = "LO Playback";
> + cpu {
> + sound-dai = <&q6afedai RX_CODEC_DMA_RX_0>;
> + };
> +
> + platform {
> + sound-dai = <&q6routing>;
> + };
> +
> + codec {
> + sound-dai = <&pmic4125_codec 0>, <&swr1 0>, <&rxmacro 0>;
> + };
> + };
> +
> + ear-playback-dai-link {
> + link-name = "Ear Playback";
> + cpu {
> + sound-dai = <&q6afedai RX_CODEC_DMA_RX_0>;
> + };
> +
> + platform {
> + sound-dai = <&q6routing>;
> + };
> +
> + codec {
> + sound-dai = <&pmic4125_codec 0>, <&swr1 0>, <&rxmacro 0>;
> + };
> + };
> +
> + hph-capture-dai-link {
> + link-name = "HP Capture";
> + cpu {
> + sound-dai = <&q6afedai TX_CODEC_DMA_TX_3>;
> + };
> +
> + platform {
> + sound-dai = <&q6routing>;
> + };
> +
> + codec {
> + sound-dai = <&pmic4125_codec 1>, <&swr0 0>, <&txmacro 0>;
> + };
> + };
> + };
> +
> vreg_anx_30: regulator-anx-30 {
> compatible = "regulator-fixed";
> regulator-name = "anx30";
> @@ -165,6 +265,7 @@ anx7625: encoder@58 {
> analogix,lane1-swing = /bits/ 8 <0x14 0x54 0x64 0x74>;
>
> pinctrl-0 = <&anx7625_int_pin>, <&anx7625_cable_det_pin>;
> + #sound-dai-cells = <1>;
>
> connector {
> compatible = "usb-c-connector";
> @@ -198,20 +299,6 @@ anx_ss_in: endpoint {
> };
> };
> };
> -
> - ports {
> - #address-cells = <1>;
> - #size-cells = <0>;
> -
> - port@0 {
> - reg = <0>;
> -
> - anx_dsi0_in: endpoint {
> - remote-endpoint = <&mdss_dsi0_out>;
> - data-lanes = <0 1 2 3>;
> - };
> - };
> - };
> };
> };
>
> @@ -225,11 +312,6 @@ &mdss_dsi0 {
> status = "okay";
> };
>
> -&mdss_dsi0_out {
> - remote-endpoint = <&anx_dsi0_in>;
> - data-lanes = <0 1 2 3>;
> -};
> -
> &mdss_dsi0_phy {
> status = "okay";
> };
> diff --git a/arch/arm64/boot/dts/qcom/qrb2210-arduino-imola-video_sound-usbc.dtso b/arch/arm64/boot/dts/qcom/qrb2210-arduino-imola-video_sound-usbc.dtso
> new file mode 100644
> index 000000000000..6fb256498cd1
> --- /dev/null
> +++ b/arch/arm64/boot/dts/qcom/qrb2210-arduino-imola-video_sound-usbc.dtso
> @@ -0,0 +1,61 @@
> +// SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause)
> +/*
> + * Copyright (c) 2025, Arduino SA
> + */
> +
> +/dts-v1/;
> +/plugin/;
> +
> +#include <dt-bindings/sound/qcom,q6asm.h>
> +#include <dt-bindings/sound/qcom,q6dsp-lpass-ports.h>
> +
> +&anx7625 {
> + ports {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + port@0 {
> + reg = <0>;
> + anx_dsi0_in: endpoint {
> + remote-endpoint = <&mdss_dsi0_out>;
> + data-lanes = <0 1 2 3>;
> + };
> + };
> + };
> +};
> +
> +&mdss_dsi0_out {
> + remote-endpoint = <&anx_dsi0_in>;
> + data-lanes = <0 1 2 3>;
> +};
> +
> +&q6afedai {
> + #address-cells = <1>;
> + #size-cells = <0>;
> + #sound-dai-cells = <1>;
> + dai@18 {
> + reg = <SECONDARY_MI2S_RX>;
> + qcom,sd-lines = <0>;
> + };
> +};
> +
> +&sound {
> + pinctrl-0 = <&lpi_i2s2_active>;
> + pinctrl-names = "default";
> +
> + hdmi-i2s-dai-link {
> + link-name = "HDMI/I2S Playback";
> +
> + cpu {
> + sound-dai = <&q6afedai SECONDARY_MI2S_RX>;
> + };
> +
> + platform {
> + sound-dai = <&q6routing>;
> + };
> +
> + codec {
> + sound-dai = <&anx7625 0>;
> + };
> + };
> +};
> --
> 2.53.0
>