arm64: dts: Enable simple-audio-card for SAI1 + wm8960
authorDaniel Baluta <daniel.baluta@nxp.com>
Tue, 3 Dec 2019 13:16:53 +0000 (15:16 +0200)
committerDong Aisheng <aisheng.dong@nxp.com>
Mon, 14 Dec 2020 03:21:43 +0000 (11:21 +0800)
We use existing simple-audio-card machine drivfer to demonstrate
the usage of SAI1 + wm8960 codec.

FSL DAI driver is used in order to manage SAI resources (PD, clocks,
pinctrl) the rest is taken care of by the SAI driver from the DSP.

Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
arch/arm64/boot/dts/freescale/Makefile
arch/arm64/boot/dts/freescale/imx8qxp-mek-sof-wm8960.dts [new file with mode: 0644]

index f160839..80e202e 100644 (file)
@@ -72,6 +72,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx8dxl-phantom-mek.dtb \
                          imx8dxl-phantom-mek-rpmsg.dtb
 dtb-$(CONFIG_ARCH_MXC) += imx8qxp-mek.dtb imx8qxp-mek-dsp.dtb imx8qxp-mek-ov5640.dtb \
                          imx8qxp-mek-enet2.dtb imx8qxp-mek-enet2-tja1100.dtb imx8qxp-mek-sof.dtb \
+                         imx8qxp-mek-sof-wm8960.dtb \
                          imx8qxp-mek-rpmsg.dtb imx8qxp-mek-a0.dtb \
                          imx8qxp-mek-it6263-lvds0-dual-channel.dtb \
                          imx8qxp-mek-it6263-lvds1-dual-channel.dtb \
diff --git a/arch/arm64/boot/dts/freescale/imx8qxp-mek-sof-wm8960.dts b/arch/arm64/boot/dts/freescale/imx8qxp-mek-sof-wm8960.dts
new file mode 100644 (file)
index 0000000..81eaeba
--- /dev/null
@@ -0,0 +1,147 @@
+// SPDX-License-Identifier: GPL-2.0+
+// Copyright NXP 2018
+
+#include "imx8qxp-mek.dts"
+
+/ {
+       sound-cs42888 {
+               status = "disabled";
+       };
+
+       sound-wm8960 {
+               status = "disabled";
+       };
+
+       sai1_port: sai-port {
+               #sound-dai-cells = <0>;
+               compatible = "fsl,sai-dai";
+
+               pinctrl-names = "default";
+               pinctrl-0 = <&pinctrl_sai1>;
+
+               power-domains = <&pd IMX_SC_R_SAI_1>,
+                       <&pd IMX_SC_R_DMA_0_CH14>,
+                       <&pd IMX_SC_R_DMA_0_CH15>,
+                       <&pd IMX_SC_R_AUDIO_CLK_0>,
+                       <&pd IMX_SC_R_AUDIO_CLK_1>,
+                       <&pd IMX_SC_R_AUDIO_PLL_0>,
+                       <&pd IMX_SC_R_AUDIO_PLL_1>;
+
+               clock-names = "bus", "mclk0", "mclk1", "mclk2", "mclk3";
+               clocks = <&sai1_lpcg 1>, <&clk_dummy>, <&sai1_lpcg 0>,
+                       <&clk_dummy>, <&clk_dummy>;
+               assigned-clocks = <&acm IMX_ADMA_ACM_SAI1_MCLK_SEL>,
+                               <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_PLL>,
+                               <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MISC0>,
+                               <&clk IMX_SC_R_AUDIO_PLL_0 IMX_SC_PM_CLK_MISC1>,
+                               <&sai1_lpcg 0>; /* FIXME: should be sai1, original code is 0 */
+               assigned-clock-parents = <&aud_pll_div0_lpcg 0>;
+               assigned-clock-rates = <0>, <786432000>, <49152000>, <12288000>, <49152000>;
+               status="okay";
+       };
+
+       sof-sound-wm8960 {
+               compatible = "simple-audio-card";
+               model = "wm8960-audio";
+               simple-audio-card,bitclock-master = <&sndcodec>;
+               simple-audio-card,frame-master = <&sndcodec>;
+               hp-det-gpio = <&lsio_gpio1 0 0>;
+               mic-det-gpio = <&lsio_gpio1 0 0>;
+               simple-audio-card,widgets =
+                       "Headphone", "Headphone Jack",
+                       "Speaker", "Ext Spk",
+                       "Microphone", "Mic Jack";
+               simple-audio-card,audio-routing =
+                       "Headphone Jack", "HP_L",
+                       "Headphone Jack", "HP_R",
+                       "Ext Spk", "SPK_LP",
+                       "Ext Spk", "SPK_LN",
+                       "Ext Spk", "SPK_RP",
+                       "Ext Spk", "SPK_RN",
+                       "LINPUT2", "Mic Jack",
+                       "LINPUT3", "Mic Jack",
+                       "RINPUT1", "Mic Jack",
+                       "RINPUT2", "Mic Jack",
+                       "Playback", "SAI1.OUT",
+                       "SAI1.IN", "Capture";
+               simple-audio-card,dai-link {
+                       format = "i2s";
+                       cpu {
+                               sound-dai = <&sai1_port>;
+                       };
+                       plat {
+                               sound-dai = <&dsp>;
+                       };
+                       sndcodec: codec {
+                               sound-dai = <&wm8960>;
+                       };
+               };
+       };
+};
+
+&edma0 {
+       compatible = "fsl,imx8qm-edma";
+       reg = <0x59280000 0x10000>, /* spdif0 rx */
+               <0x59290000 0x10000>, /* spdif0 tx */
+               <0x592c0000 0x10000>, /* sai0 rx */
+               <0x592d0000 0x10000>, /* sai0 tx */
+               <0x59350000 0x10000>,
+               <0x59370000 0x10000>;
+       #dma-cells = <3>;
+       shared-interrupt;
+       dma-channels = <6>;
+       interrupts = <GIC_SPI 457 IRQ_TYPE_LEVEL_HIGH>, /* spdif0 */
+                       <GIC_SPI 459 IRQ_TYPE_LEVEL_HIGH>,
+                       <GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH>, /* sai0 */
+                       <GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH>,
+                       <GIC_SPI 391 IRQ_TYPE_LEVEL_HIGH>,
+                       <GIC_SPI 393 IRQ_TYPE_LEVEL_HIGH>;
+       interrupt-names = "edma0-chan8-rx", "edma0-chan9-tx", /* spdif0 */
+                       "edma0-chan12-rx", "edma0-chan13-tx", /* sai0 */
+                       "edma0-chan21-tx",              /* gpt5 */
+                       "edma0-chan23-rx";              /* gpt7 */
+
+       power-domains = <&pd IMX_SC_R_DMA_0_CH8>,
+                       <&pd IMX_SC_R_DMA_0_CH9>,
+                       <&pd IMX_SC_R_DMA_0_CH12>,
+                       <&pd IMX_SC_R_DMA_0_CH13>,
+                       <&pd IMX_SC_R_DMA_0_CH21>,
+                       <&pd IMX_SC_R_DMA_0_CH23>;
+       power-domain-names = "edma0-chan8", "edma0-chan9",
+                       "edma0-chan12", "edma0-chan13",
+                       "edma0-chan21", "edma0-chan23";
+       status = "okay";
+};
+
+&dsp {
+       #sound-dai-cells = <0>;
+       compatible = "fsl,imx8qxp-dsp";
+       reg = <0x596e8000 0x88000>;
+       tplg-name = "sof-imx8qxp-wm8960.tplg";
+       status = "okay";
+};
+
+&wm8960 {
+       #sound-dai-cells = <0>;
+       status = "okay";
+};
+
+&amix {
+       status = "disabled";
+};
+
+&esai0 {
+       status = "disabled";
+};
+
+&asrc0 {
+       status = "disabled";
+};
+
+&sai1 {
+       status = "disabled";
+};
+
+&cs42888 {
+       status = "disabled";
+};