]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: dts: imx8-apalis: Add audio support
authorJoão Paulo Gonçalves <joao.goncalves@toradex.com>
Tue, 3 Sep 2024 09:12:29 +0000 (11:12 +0200)
committerShawn Guo <shawnguo@kernel.org>
Tue, 15 Oct 2024 08:07:26 +0000 (16:07 +0800)
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ão Paulo Gonçalves <joao.goncalves@toradex.com>
Signed-off-by: Francesco Dolcini <francesco.dolcini@toradex.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
arch/arm64/boot/dts/freescale/imx8-apalis-eval.dtsi
arch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.1.dtsi
arch/arm64/boot/dts/freescale/imx8-apalis-ixora-v1.2.dtsi
arch/arm64/boot/dts/freescale/imx8-apalis-v1.1.dtsi

index deecb96a159610a2582a81e915d6cc2bbf24b139..5f24356ad4e2e4e7a8ec02f51a2ad67fb88c91df 100644 (file)
        status = "okay";
 };
 
-/* TODO: Audio Mixer */
+&amix {
+       status = "okay";
+};
 
-/* TODO: Asynchronous Sample Rate Converter (ASRC) */
+&asrc0 {
+       status = "okay";
+};
 
 /* TODO: Display Controller */
 
 
 /* TODO: Apalis BKL1_PWM */
 
-/* TODO: Apalis DAP1 */
+/* Apalis DAP1 */
+&sai1 {
+       status = "okay";
+};
 
-/* TODO: Apalis Analogue Audio */
+&sai5 {
+       status = "okay";
+};
+
+&sai5_lpcg {
+       status = "okay";
+};
 
 /* TODO: Apalis SATA1 */
 
-/* TODO: Apalis SPDIF1 */
+/* Apalis SPDIF1 */
+&spdif0 {
+       status = "okay";
+};
 
 /* TODO: Apalis USBH2, Apalis USBH3 and on-module Wi-Fi via on-module HSIC Hub */
 
index 5438923a905ceba6a19b8c72b49b22b8e1cc86cf..4ec2227750f443f3dccb015b2931e4802ed6357e 100644 (file)
        status = "okay";
 };
 
-/* TODO: Audio Mixer */
+&amix {
+       status = "okay";
+};
 
-/* TODO: Asynchronous Sample Rate Converter (ASRC) */
+&asrc0 {
+       status = "okay";
+};
 
 /* TODO: Display Controller */
 
 
 /* TODO: Apalis BKL1_PWM */
 
-/* TODO: Apalis DAP1 */
+/* Apalis DAP1 */
+&sai1 {
+       status = "okay";
+};
 
-/* TODO: Apalis Analogue Audio */
+&sai5 {
+       status = "okay";
+};
+
+&sai5_lpcg {
+       status = "okay";
+};
 
 /* TODO: Apalis SATA1 */
 
-/* TODO: Apalis SPDIF1 */
+/* Apalis SPDIF1 */
+&spdif0 {
+       status = "okay";
+};
 
 /* TODO: Apalis USBH2, Apalis USBH3 and on-module Wi-Fi via on-module HSIC Hub */
 
index f6654fdcb1478071f1d4209d5d16d07af54f1ad7..606d9328ac9901a7b52dd0f1d1ffa668d08e2400 100644 (file)
        status = "okay";
 };
 
-/* TODO: Audio Mixer */
+&amix {
+       status = "okay";
+};
 
-/* TODO: Asynchronous Sample Rate Converter (ASRC) */
+&asrc0 {
+       status = "okay";
+};
 
 /* TODO: Display Controller */
 
 
 /* TODO: Apalis BKL1_PWM */
 
-/* TODO: Apalis DAP1 */
+/* Apalis DAP1 */
+&sai1 {
+       status = "okay";
+};
 
-/* TODO: Apalis Analogue Audio */
+&sai5 {
+       status = "okay";
+};
+
+&sai5_lpcg {
+       status = "okay";
+};
 
 /* TODO: Apalis SATA1 */
 
-/* TODO: Apalis SPDIF1 */
+/* Apalis SPDIF1 */
+&spdif0 {
+       status = "okay";
+};
 
 /* TODO: Apalis USBH2, Apalis USBH3 and on-module Wi-Fi via on-module HSIC Hub */
 
index e53683e49e03abd9773d8b2054fdb6aa0bd0351a..91fd631b7ebdfd4f21a37c845d7e7641e2e4799e 100644 (file)
                regulator-name = "usb-phy-dummy";
        };
 
+       reg_vref_1v8: regulator-vref-1v8 {
+               compatible = "regulator-fixed";
+               regulator-name = "+V1.8";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+       };
+
        reserved-memory {
                #address-cells = <2>;
                #size-cells = <2>;
                };
        };
 
-       /* TODO: Apalis Analogue Audio */
+       sound {
+               compatible = "simple-audio-card";
+               simple-audio-card,bitclock-master = <&dailink_master>;
+               simple-audio-card,format = "i2s";
+               simple-audio-card,frame-master = <&dailink_master>;
+               simple-audio-card,name = "apalis-imx8qm";
+
+               simple-audio-card,cpu {
+                       sound-dai = <&sai1>;
+               };
+
+               dailink_master: simple-audio-card,codec {
+                       sound-dai = <&sgtl5000>;
+               };
+       };
 
        /* TODO: HDMI Audio */
 
-       /* TODO: Apalis SPDIF1 */
+       /* Apalis SPDIF1 */
+       sound-spdif {
+               compatible = "fsl,imx-audio-spdif";
+               model = "imx-spdif";
+               spdif-controller = <&spdif0>;
+               spdif-in;
+               spdif-out;
+       };
 
        touchscreen: touchscreen {
                compatible = "toradex,vf50-touchscreen";
 
 };
 
+&asrc0 {
+       fsl,asrc-rate  = <48000>;
+};
+
 &adc0 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_adc0>;
        clock-frequency = <100000>;
        status = "okay";
 
-       /* TODO: Audio Codec */
-
        /* USB3503A */
        usb-hub@8 {
                compatible = "smsc,usb3503a";
                refclk-frequency = <25000000>;
                reset-gpios = <&lsio_gpio1 2 GPIO_ACTIVE_LOW>;
        };
+       
+       /* On Module Audio Codec */
+       sgtl5000: audio-codec@a {
+               compatible = "fsl,sgtl5000";
+               reg = <0x0a>;
+               assigned-clocks = <&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 = <786432000>, <49152000>, <12288000>, <12288000>;
+               clocks = <&mclkout0_lpcg IMX_LPCG_CLK_0>;
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_sgtl5000>;
+               #sound-dai-cells = <0>;
+               VDDA-supply = <&reg_module_3v3_avdd>;
+               VDDD-supply = <&reg_vref_1v8>;
+               VDDIO-supply = <&reg_module_3v3>;
+       };
 };
 
 /* Apalis I2C1 */
 
 /* TODO: Apalis BKL1_PWM */
 
-/* TODO: Apalis DAP1 */
-
-/* TODO: Analogue Audio */
+/* Apalis DAP1 */
+&sai1 {
+       assigned-clocks = <&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 = <786432000>, <49152000>, <12288000>, <49152000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_sai1>;
+       #sound-dai-cells = <0>;
+       status = "okay";
+};
 
 /* TODO: Apalis SATA1 */
 
-/* TODO: Apalis SPDIF1 */
+/* Apalis SPDIF1 */
+&spdif0 {
+       assigned-clocks = <&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 = <786432000>, <49152000>, <12288000>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_spdif0>;
+       status = "okay";
+};
 
 /* TODO: Thermal Zones */