From nobody Fri Dec 19 13:55:43 2025 Received: from mail11.truemail.it (mail11.truemail.it [217.194.8.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5C12319F43F; Tue, 3 Sep 2024 09:12:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=217.194.8.81 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725354774; cv=none; b=WzG4oohmUJrafnkJ5g+qnXQYSqtA+VW9m0vEkRJgytVdKWL8LrVvDyDrlm7yEWS6vg7txIdIOTfA5KWA6YTl7rA4XhTZMwBnKT2TeezoQb7L/qHhm+wwUGPT02StI4E7ssRC4iUjXF2d46+cuVADOiJhqrCjqRboIIJeEd/tfyY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1725354774; c=relaxed/simple; bh=DrS8tA5OBxGJM8Or3HPyJVJcPAwRCoexVaFIb0cWsvg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=oMSMLruUXjXd+iDK0Sl3i85YxsPaBwSJQE+eZcx4iH9vi0dWOF9EIydO/B1Kw2bRZ2wuwyQKxntlM8fS8rJz2rCgEnZE9jMtdvoiDqfNTQptTV14SjcAl2Qwgmb9Doknr4urfnxRv8Q/JIhZmmVrYHHct9BNVf+yVbWClGO0Y2g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=dolcini.it; spf=pass smtp.mailfrom=dolcini.it; dkim=pass (2048-bit key) header.d=dolcini.it header.i=@dolcini.it header.b=O9oqEZW0; arc=none smtp.client-ip=217.194.8.81 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=dolcini.it Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=dolcini.it Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=dolcini.it header.i=@dolcini.it header.b="O9oqEZW0" Received: from francesco-nb.corp.toradex.com (31-10-206-125.static.upc.ch [31.10.206.125]) by mail11.truemail.it (Postfix) with ESMTPA id D30F722A3F; Tue, 3 Sep 2024 11:12:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dolcini.it; s=default; t=1725354764; bh=WTNrnX27MlZ3R/izBK3JnNS0K7GZY2PY5xZZeywPBZ4=; h=From:To:Subject; b=O9oqEZW0uBpNFTY4yUu6+vVDhnaD8Aw37nY6uQ4LzCHYjlERmiSWTZttcj5yAOHG3 5CwoW9rXBO1qKwNdaqukHoDqV7exXSEgehhn1QiL6o5LIbWRWk/Kn6Eh3b9r95Dbo1 T5jPBUBxWHKssSe+yBZKLnYCPFw2p3+HiCJ1wlUnz4BHcQWUoQeKW5cZWqkMsZHMJq +y6doIf0Ma4tlmYWBR4Q6ouypqSE73vFUmYr7V6Ey1HC8HAh9IDEZy8Z9CkzrHcobF prHZ6FPTFXAjMfisQ+LxKVT6hbg4UtQWrjJTNXwd7Ls/XK/axlRE6f3Uf34xKxx6Q5 bbMpGB0YmKCrA== From: Francesco Dolcini To: Rob Herring , Krzysztof Kozlowski , Conor Dooley , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam Cc: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Gon=C3=A7alves?= , devicetree@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Francesco Dolcini Subject: [PATCH v2 3/5] arm64: dts: imx8-apalis: Add audio support Date: Tue, 3 Sep 2024 11:12:29 +0200 Message-Id: <20240903091231.20035-4-francesco@dolcini.it> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240903091231.20035-1-francesco@dolcini.it> References: <20240903091231.20035-1-francesco@dolcini.it> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Jo=C3=A3o Paulo Gon=C3=A7alves Add audio support to Apalis-iMX8QM and its carrier boards. These includes: * On SOM i2s sound card * On SOM spdif sound card * Enabling Audiomix and Asynchronous Sample Rate Converter Signed-off-by: Jo=C3=A3o Paulo Gon=C3=A7alves Signed-off-by: Francesco Dolcini --- v2: sort i2c child nodes by address --- .../boot/dts/freescale/imx8-apalis-eval.dtsi | 26 ++++-- .../dts/freescale/imx8-apalis-ixora-v1.1.dtsi | 26 ++++-- .../dts/freescale/imx8-apalis-ixora-v1.2.dtsi | 26 ++++-- .../boot/dts/freescale/imx8-apalis-v1.1.dtsi | 82 +++++++++++++++++-- 4 files changed, 137 insertions(+), 23 deletions(-) diff --git a/arch/arm64/boot/dts/freescale/imx8-apalis-eval.dtsi b/arch/arm= 64/boot/dts/freescale/imx8-apalis-eval.dtsi index deecb96a1596..5f24356ad4e2 100644 --- a/arch/arm64/boot/dts/freescale/imx8-apalis-eval.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8-apalis-eval.dtsi @@ -22,9 +22,13 @@ &adc1 { status =3D "okay"; }; =20 -/* TODO: Audio Mixer */ +&amix { + status =3D "okay"; +}; =20 -/* TODO: Asynchronous Sample Rate Converter (ASRC) */ +&asrc0 { + status =3D "okay"; +}; =20 /* TODO: Display Controller */ =20 @@ -104,13 +108,25 @@ &lsio_pwm3 { =20 /* TODO: Apalis BKL1_PWM */ =20 -/* TODO: Apalis DAP1 */ +/* Apalis DAP1 */ +&sai1 { + status =3D "okay"; +}; =20 -/* TODO: Apalis Analogue Audio */ +&sai5 { + status =3D "okay"; +}; + +&sai5_lpcg { + status =3D "okay"; +}; =20 /* TODO: Apalis SATA1 */ =20 -/* TODO: Apalis SPDIF1 */ +/* Apalis SPDIF1 */ +&spdif0 { + status =3D "okay"; +}; =20 /* TODO: Apalis USBH2, Apalis USBH3 and on-module Wi-Fi via on-module HSIC= Hub */ =20 diff --git a/arch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.1.dtsi b/ar= ch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.1.dtsi index 5438923a905c..4ec2227750f4 100644 --- a/arch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.1.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.1.dtsi @@ -62,9 +62,13 @@ &adc1 { status =3D "okay"; }; =20 -/* TODO: Audio Mixer */ +&amix { + status =3D "okay"; +}; =20 -/* TODO: Asynchronous Sample Rate Converter (ASRC) */ +&asrc0 { + status =3D "okay"; +}; =20 /* TODO: Display Controller */ =20 @@ -191,13 +195,25 @@ &lsio_pwm3 { =20 /* TODO: Apalis BKL1_PWM */ =20 -/* TODO: Apalis DAP1 */ +/* Apalis DAP1 */ +&sai1 { + status =3D "okay"; +}; =20 -/* TODO: Apalis Analogue Audio */ +&sai5 { + status =3D "okay"; +}; + +&sai5_lpcg { + status =3D "okay"; +}; =20 /* TODO: Apalis SATA1 */ =20 -/* TODO: Apalis SPDIF1 */ +/* Apalis SPDIF1 */ +&spdif0 { + status =3D "okay"; +}; =20 /* TODO: Apalis USBH2, Apalis USBH3 and on-module Wi-Fi via on-module HSIC= Hub */ =20 diff --git a/arch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.2.dtsi b/ar= ch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.2.dtsi index f6654fdcb147..606d9328ac99 100644 --- a/arch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.2.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.2.dtsi @@ -94,9 +94,13 @@ &adc1 { status =3D "okay"; }; =20 -/* TODO: Audio Mixer */ +&amix { + status =3D "okay"; +}; =20 -/* TODO: Asynchronous Sample Rate Converter (ASRC) */ +&asrc0 { + status =3D "okay"; +}; =20 /* TODO: Display Controller */ =20 @@ -240,13 +244,25 @@ &lsio_pwm3 { =20 /* TODO: Apalis BKL1_PWM */ =20 -/* TODO: Apalis DAP1 */ +/* Apalis DAP1 */ +&sai1 { + status =3D "okay"; +}; =20 -/* TODO: Apalis Analogue Audio */ +&sai5 { + status =3D "okay"; +}; + +&sai5_lpcg { + status =3D "okay"; +}; =20 /* TODO: Apalis SATA1 */ =20 -/* TODO: Apalis SPDIF1 */ +/* Apalis SPDIF1 */ +&spdif0 { + status =3D "okay"; +}; =20 /* TODO: Apalis USBH2, Apalis USBH3 and on-module Wi-Fi via on-module HSIC= Hub */ =20 diff --git a/arch/arm64/boot/dts/freescale/imx8-apalis-v1.1.dtsi b/arch/arm= 64/boot/dts/freescale/imx8-apalis-v1.1.dtsi index e53683e49e03..91fd631b7ebd 100644 --- a/arch/arm64/boot/dts/freescale/imx8-apalis-v1.1.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8-apalis-v1.1.dtsi @@ -126,6 +126,13 @@ reg_usb_phy: regulator-usb-hsic1 { regulator-name =3D "usb-phy-dummy"; }; =20 + reg_vref_1v8: regulator-vref-1v8 { + compatible =3D "regulator-fixed"; + regulator-name =3D "+V1.8"; + regulator-min-microvolt =3D <1800000>; + regulator-max-microvolt =3D <1800000>; + }; + reserved-memory { #address-cells =3D <2>; #size-cells =3D <2>; @@ -198,11 +205,32 @@ linux,cma { }; }; =20 - /* TODO: Apalis Analogue Audio */ + sound { + compatible =3D "simple-audio-card"; + simple-audio-card,bitclock-master =3D <&dailink_master>; + simple-audio-card,format =3D "i2s"; + simple-audio-card,frame-master =3D <&dailink_master>; + simple-audio-card,name =3D "apalis-imx8qm"; + + simple-audio-card,cpu { + sound-dai =3D <&sai1>; + }; + + dailink_master: simple-audio-card,codec { + sound-dai =3D <&sgtl5000>; + }; + }; =20 /* TODO: HDMI Audio */ =20 - /* TODO: Apalis SPDIF1 */ + /* Apalis SPDIF1 */ + sound-spdif { + compatible =3D "fsl,imx-audio-spdif"; + model =3D "imx-spdif"; + spdif-controller =3D <&spdif0>; + spdif-in; + spdif-out; + }; =20 touchscreen: touchscreen { compatible =3D "toradex,vf50-touchscreen"; @@ -227,6 +255,10 @@ touchscreen: touchscreen { =20 }; =20 +&asrc0 { + fsl,asrc-rate =3D <48000>; +}; + &adc0 { pinctrl-names =3D "default"; pinctrl-0 =3D <&pinctrl_adc0>; @@ -334,8 +366,6 @@ &i2c1 { clock-frequency =3D <100000>; status =3D "okay"; =20 - /* TODO: Audio Codec */ - /* USB3503A */ usb-hub@8 { compatible =3D "smsc,usb3503a"; @@ -348,6 +378,24 @@ usb-hub@8 { refclk-frequency =3D <25000000>; reset-gpios =3D <&lsio_gpio1 2 GPIO_ACTIVE_LOW>; }; +=09 + /* On Module Audio Codec */ + sgtl5000: audio-codec@a { + compatible =3D "fsl,sgtl5000"; + reg =3D <0x0a>; + assigned-clocks =3D <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_PLL>, + <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_SLV_BUS>, + <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MST_BUS>, + <&mclkout0_lpcg IMX_LPCG_CLK_0>; + assigned-clock-rates =3D <786432000>, <49152000>, <12288000>, <12288000>; + clocks =3D <&mclkout0_lpcg IMX_LPCG_CLK_0>; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&pinctrl_sgtl5000>; + #sound-dai-cells =3D <0>; + VDDA-supply =3D <®_module_3v3_avdd>; + VDDD-supply =3D <®_vref_1v8>; + VDDIO-supply =3D <®_module_3v3>; + }; }; =20 /* Apalis I2C1 */ @@ -729,13 +777,31 @@ &mu2_m0 { =20 /* TODO: Apalis BKL1_PWM */ =20 -/* TODO: Apalis DAP1 */ - -/* TODO: Analogue Audio */ +/* Apalis DAP1 */ +&sai1 { + assigned-clocks =3D <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_PLL>, + <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_SLV_BUS>, + <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MST_BUS>, + <&sai1_lpcg IMX_LPCG_CLK_0>; + assigned-clock-rates =3D <786432000>, <49152000>, <12288000>, <49152000>; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&pinctrl_sai1>; + #sound-dai-cells =3D <0>; + status =3D "okay"; +}; =20 /* TODO: Apalis SATA1 */ =20 -/* TODO: Apalis SPDIF1 */ +/* Apalis SPDIF1 */ +&spdif0 { + assigned-clocks =3D <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_PLL>, + <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_SLV_BUS>, + <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MST_BUS>; + assigned-clock-rates =3D <786432000>, <49152000>, <12288000>; + pinctrl-names =3D "default"; + pinctrl-0 =3D <&pinctrl_spdif0>; + status =3D "okay"; +}; =20 /* TODO: Thermal Zones */ =20 --=20 2.39.2