diff options
author | Shengjiu Wang <shengjiu.wang@nxp.com> | 2020-03-13 12:27:18 +0800 |
---|---|---|
committer | Shengjiu Wang <shengjiu.wang@nxp.com> | 2020-03-13 16:26:02 +0800 |
commit | 3dab39b149bd9f2301b90e17b9e387f86cb9e265 (patch) | |
tree | 106d556259711c1c7942988058d6fd198e913b77 | |
parent | 4d23edf7b3dccfa18d480f5f2163c42afefe5b0b (diff) |
MLK-23585-4: arm64: dts: Enable audio features for imx8dxl-evk
Enable SAI/ASRC/WM8960
1. Update the interrupt number for audio modules
2. Enable 3 wm8960 codecs
Signed-off-by: Shengjiu Wang <shengjiu.wang@nxp.com>
-rw-r--r-- | arch/arm64/boot/dts/freescale/imx8-ss-audio.dtsi | 10 | ||||
-rw-r--r-- | arch/arm64/boot/dts/freescale/imx8dxl-evk.dts | 210 | ||||
-rw-r--r-- | arch/arm64/boot/dts/freescale/imx8dxl-ss-adma.dtsi | 41 | ||||
-rw-r--r-- | arch/arm64/boot/dts/freescale/imx8qm-ss-audio.dtsi | 10 |
4 files changed, 247 insertions, 24 deletions
diff --git a/arch/arm64/boot/dts/freescale/imx8-ss-audio.dtsi b/arch/arm64/boot/dts/freescale/imx8-ss-audio.dtsi index e430afe4194f..13796cff0b64 100644 --- a/arch/arm64/boot/dts/freescale/imx8-ss-audio.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8-ss-audio.dtsi @@ -35,11 +35,13 @@ audio_subsys: bus@59000000 { <0x592d0000 0x10000>, /* sai0 tx */ <0x592e0000 0x10000>, /* sai1 rx */ <0x592f0000 0x10000>, /* sai1 tx */ + <0x59300000 0x10000>, /* sai2 rx */ + <0x59310000 0x10000>, /* sai3 rx */ <0x59350000 0x10000>, <0x59370000 0x10000>; #dma-cells = <3>; shared-interrupt; - dma-channels = <16>; + dma-channels = <18>; interrupts = <GIC_SPI 374 IRQ_TYPE_LEVEL_HIGH>, /* asrc 0 */ <GIC_SPI 375 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 376 IRQ_TYPE_LEVEL_HIGH>, @@ -54,6 +56,8 @@ audio_subsys: bus@59000000 { <GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH>, /* sai1 */ <GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 319 IRQ_TYPE_LEVEL_HIGH>, /* sai2 */ + <GIC_SPI 324 IRQ_TYPE_LEVEL_HIGH>, /* sai3 */ <GIC_SPI 391 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 393 IRQ_TYPE_LEVEL_HIGH>; interrupt-names = "edma0-chan0-rx", "edma0-chan1-rx", /* asrc0 */ @@ -63,6 +67,7 @@ audio_subsys: bus@59000000 { "edma0-chan8-rx", "edma0-chan9-tx", /* spdif0 */ "edma0-chan12-rx", "edma0-chan13-tx", /* sai0 */ "edma0-chan14-rx", "edma0-chan15-tx", /* sai1 */ + "edma0-chan16-rx", "edma0-chan17-rx", /* sai2, sai3 */ "edma0-chan21-tx", /* gpt5 */ "edma0-chan23-rx"; /* gpt7 */ power-domains = <&pd IMX_SC_R_DMA_0_CH0>, @@ -79,6 +84,8 @@ audio_subsys: bus@59000000 { <&pd IMX_SC_R_DMA_0_CH13>, <&pd IMX_SC_R_DMA_0_CH14>, <&pd IMX_SC_R_DMA_0_CH15>, + <&pd IMX_SC_R_DMA_0_CH16>, + <&pd IMX_SC_R_DMA_0_CH17>, <&pd IMX_SC_R_DMA_0_CH21>, <&pd IMX_SC_R_DMA_0_CH23>; power-domain-names = "edma0-chan0", "edma0-chan1", @@ -88,6 +95,7 @@ audio_subsys: bus@59000000 { "edma0-chan8", "edma0-chan9", "edma0-chan12", "edma0-chan13", "edma0-chan14", "edma0-chan15", + "edma0-chan16", "edma0-chan17", "edma0-chan21", "edma0-chan23"; status = "okay"; }; diff --git a/arch/arm64/boot/dts/freescale/imx8dxl-evk.dts b/arch/arm64/boot/dts/freescale/imx8dxl-evk.dts index 1642dbf31977..9af2ea59b675 100644 --- a/arch/arm64/boot/dts/freescale/imx8dxl-evk.dts +++ b/arch/arm64/boot/dts/freescale/imx8dxl-evk.dts @@ -155,6 +155,105 @@ gpio = <&pca6416_1 10 GPIO_ACTIVE_LOW>; regulator-always-on; }; + + clock_mclk_out1: clock_mclk_out1 { + compatible = "gpio-gate-clock"; + clocks = <&mclkout1_lpcg 0>; + #clock-cells = <0>; + enable-gpios = <&pca6416_1 4 GPIO_ACTIVE_HIGH>; + }; + + sound-wm8960 { + compatible = "fsl,imx7d-evk-wm8960", + "fsl,imx-audio-wm8960"; + model = "wm8960-audio"; + cpu-dai = <&sai1>; + audio-codec = <&wm8960_1>; + asrc-controller = <&asrc0>; + codec-master; + /* + * hp-det = <hp-det-pin hp-det-polarity>; + * hp-det-pin: JD1 JD2 or JD3 + * hp-det-polarity = 0: hp detect high for headphone + * hp-det-polarity = 1: hp detect high for speaker + */ + hp-det = <2 0>; + hp-det-gpios = <&pca6416_3 2 GPIO_ACTIVE_HIGH>; + mic-det-gpios = <&pca6416_3 2 GPIO_ACTIVE_HIGH>; + 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", + "LINPUT1", "Mic Jack", + "Mic Jack", "MICB", + "CPU-Playback", "ASRC-Playback", + "Playback", "CPU-Playback", + "ASRC-Capture", "CPU-Capture", + "CPU-Capture", "Capture"; + }; + + sound-wm8960-2 { + compatible = "fsl,imx7d-evk-wm8960", + "fsl,imx-audio-wm8960"; + model = "wm8960-audio-2"; + cpu-dai = <&sai2>; + audio-codec = <&wm8960_2>; + codec-master; + capture-only; + /* + * hp-det = <hp-det-pin hp-det-polarity>; + * hp-det-pin: JD1 JD2 or JD3 + * hp-det-polarity = 0: hp detect high for headphone + * hp-det-polarity = 1: hp detect high for speaker + */ + hp-det = <2 0>; + hp-det-gpios = <&pca6416_3 3 GPIO_ACTIVE_HIGH>; + mic-det-gpios = <&pca6416_3 3 GPIO_ACTIVE_HIGH>; + 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", + "LINPUT1", "Mic Jack", + "Mic Jack", "MICB", + "Playback", "CPU-Playback", + "CPU-Capture", "Capture"; + }; + + sound-wm8960-3 { + compatible = "fsl,imx7d-evk-wm8960", + "fsl,imx-audio-wm8960"; + model = "wm8960-audio-3"; + cpu-dai = <&sai3>; + audio-codec = <&wm8960_3>; + codec-master; + capture-only; + /* + * hp-det = <hp-det-pin hp-det-polarity>; + * hp-det-pin: JD1 JD2 or JD3 + * hp-det-polarity = 0: hp detect high for headphone + * hp-det-polarity = 1: hp detect high for speaker + */ + hp-det = <2 0>; + hp-det-gpios = <&pca6416_3 4 GPIO_ACTIVE_HIGH>; + mic-det-gpios = <&pca6416_3 4 GPIO_ACTIVE_HIGH>; + 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", + "LINPUT1", "Mic Jack", + "Mic Jack", "MICB", + "Playback", "CPU-Playback", + "CPU-Capture", "Capture"; + }; }; &adc0 { @@ -239,18 +338,60 @@ #address-cells = <1>; #size-cells = <0>; reg = <0x1>; + + wm8960_1: wm8960@1a { + compatible = "wlf,wm8960"; + reg = <0x1a>; + clocks = <&clock_mclk_out1>; + clock-names = "mclk"; + wlf,shared-lrclk; + power-domains = <&pd IMX_SC_R_MCLK_OUT_1>; + 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>, + <&mclkout1_lpcg 0>; + assigned-clock-rates = <786432000>, <49152000>, <12288000>, <12288000>; + }; }; i2c@2 { #address-cells = <1>; #size-cells = <0>; reg = <0x2>; + + wm8960_2: wm8960@1a { + compatible = "wlf,wm8960"; + reg = <0x1a>; + clocks = <&clock_mclk_out1>; + clock-names = "mclk"; + wlf,shared-lrclk; + power-domains = <&pd IMX_SC_R_MCLK_OUT_1>; + 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>, + <&mclkout1_lpcg 0>; + assigned-clock-rates = <786432000>, <49152000>, <12288000>, <12288000>; + }; }; i2c@3 { #address-cells = <1>; #size-cells = <0>; reg = <0x3>; + + wm8960_3: wm8960@1a { + compatible = "wlf,wm8960"; + reg = <0x1a>; + clocks = <&clock_mclk_out1>; + clock-names = "mclk"; + wlf,shared-lrclk; + power-domains = <&pd IMX_SC_R_MCLK_OUT_1>; + 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>, + <&mclkout1_lpcg 0>; + assigned-clock-rates = <786432000>, <49152000>, <12288000>, <12288000>; + }; }; i2c@4 { @@ -286,6 +427,8 @@ reg = <0x20>; gpio-controller; #gpio-cells = <2>; + interrupt-parent = <&lsio_gpio2>; + interrupts = <5 IRQ_TYPE_EDGE_RISING>; }; pca9548_2: pca9548@70 { @@ -371,6 +514,46 @@ status = "disabled"; }; +&asrc0 { + fsl,asrc-rate = <48000>; + status = "okay"; +}; + +&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 0>; + assigned-clock-rates = <786432000>, <49152000>, <12288000>, <49152000>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_sai1>; + status = "okay"; +}; + +&sai2 { + 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>, + <&sai2_lpcg 0>; + assigned-clock-rates = <786432000>, <49152000>, <12288000>, <49152000>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_sai2>; + fsl,sai-asynchronous; + status = "okay"; +}; + +&sai3 { + 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>, + <&sai3_lpcg 0>; + assigned-clock-rates = <786432000>, <49152000>, <12288000>, <49152000>; + pinctrl-names = "default"; + pinctrl-0 = <&pinctrl_sai3>; + fsl,sai-asynchronous; + status = "okay"; +}; + &thermal_zones { pmic-thermal0 { polling-delay-passive = <250>; @@ -511,6 +694,8 @@ pinctrl_hog: hoggrp { fsl,pins = < IMX8DXL_COMP_CTL_GPIO_1V8_3V3_GPIORHB_PAD 0x000514a0 + IMX8DXL_SPI3_CS0_ADMA_ACM_MCLK_OUT1 0x0600004c + IMX8DXL_SNVS_TAMPER_OUT1_LSIO_GPIO2_IO05_IN 0x0600004c >; }; @@ -638,6 +823,31 @@ >; }; + pinctrl_sai1: sai1grp { + fsl,pins = < + IMX8DXL_FLEXCAN0_RX_ADMA_SAI1_TXC 0x06000040 + IMX8DXL_FLEXCAN0_TX_ADMA_SAI1_TXFS 0x06000040 + IMX8DXL_FLEXCAN1_RX_ADMA_SAI1_TXD 0x06000040 + IMX8DXL_FLEXCAN1_TX_ADMA_SAI1_RXD 0x06000060 + >; + }; + + pinctrl_sai2: sai2grp { + fsl,pins = < + IMX8DXL_SNVS_TAMPER_OUT3_ADMA_SAI2_RXC 0x06000040 + IMX8DXL_SNVS_TAMPER_IN0_ADMA_SAI2_RXFS 0x06000040 + IMX8DXL_SNVS_TAMPER_OUT4_ADMA_SAI2_RXD 0x06000060 + >; + }; + + pinctrl_sai3: sai3grp { + fsl,pins = < + IMX8DXL_SNVS_TAMPER_IN1_ADMA_SAI3_RXC 0x06000040 + IMX8DXL_SNVS_TAMPER_IN3_ADMA_SAI3_RXFS 0x06000040 + IMX8DXL_SNVS_TAMPER_IN2_ADMA_SAI3_RXD 0x06000060 + >; + }; + pinctrl_usdhc1: usdhc1grp { fsl,pins = < IMX8DXL_EMMC0_CLK_CONN_EMMC0_CLK 0x06000041 diff --git a/arch/arm64/boot/dts/freescale/imx8dxl-ss-adma.dtsi b/arch/arm64/boot/dts/freescale/imx8dxl-ss-adma.dtsi index b6d6921d893d..f3f9013aee69 100644 --- a/arch/arm64/boot/dts/freescale/imx8dxl-ss-adma.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8dxl-ss-adma.dtsi @@ -44,6 +44,8 @@ <0x592d0000 0x10000>, /* sai0 tx */ <0x592e0000 0x10000>, /* sai1 rx */ <0x592f0000 0x10000>, /* sai1 tx */ + <0x59300000 0x10000>, /* sai2 rx */ + <0x59310000 0x10000>, /* sai3 rx */ <0x59350000 0x10000>, /* gpt0 */ <0x59360000 0x10000>, /* gpt1 */ <0x59370000 0x10000>, /* gpt2 */ @@ -60,6 +62,8 @@ <GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>, /* sai1 */ <GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 193 IRQ_TYPE_LEVEL_HIGH>, /* sai2 */ + <GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH>, /* sai3 */ <GIC_SPI 268 IRQ_TYPE_LEVEL_HIGH>, /* gpt0 */ <GIC_SPI 269 IRQ_TYPE_LEVEL_HIGH>, /* gpt1 */ <GIC_SPI 270 IRQ_TYPE_LEVEL_HIGH>, /* gpt2 */ @@ -70,6 +74,7 @@ "edma0-chan8-rx", "edma0-chan9-tx", /* spdif0 */ "edma0-chan12-rx", "edma0-chan13-tx", /* sai0 */ "edma0-chan14-rx", "edma0-chan15-tx", /* sai1 */ + "edma0-chan16-rx", "edma0-chan17-rx", /* sai2, sai3 */ "edma0-chan21-tx", /* gpt0 */ "edma0-chan22-tx", /* gpt1 */ "edma0-chan23-tx", /* gpt2 */ @@ -86,6 +91,8 @@ <&pd IMX_SC_R_DMA_0_CH13>, <&pd IMX_SC_R_DMA_0_CH14>, <&pd IMX_SC_R_DMA_0_CH15>, + <&pd IMX_SC_R_DMA_0_CH16>, + <&pd IMX_SC_R_DMA_0_CH17>, <&pd IMX_SC_R_DMA_0_CH21>, <&pd IMX_SC_R_DMA_0_CH22>, <&pd IMX_SC_R_DMA_0_CH23>, @@ -96,6 +103,7 @@ "edma0-chan8", "edma0-chan9", "edma0-chan12", "edma0-chan13", "edma0-chan14", "edma0-chan15", + "edma0-chan16", "edma0-chan17", "edma0-chan21", "edma0-chan22", "edma0-chan23", "edma0-chan24"; }; @@ -192,34 +200,23 @@ interrupts = <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>; }; -&spdif0_lpcg { - status = "disabled"; +&sai0 { + interrupts = <GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>; }; -&sai0_lpcg { - status = "disabled"; +&sai1 { + interrupts = <GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>; }; -&sai1_lpcg { - status = "disabled"; +&sai2 { + interrupts = <GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>; }; -&sai2_lpcg { - status = "disabled"; +&sai3 { + interrupts = <GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>; }; -&sai3_lpcg { - status = "disabled"; -}; - -&mqs0_lpcg { - status = "disabled"; -}; - -&mclkout0_lpcg { - status = "disabled"; -}; - -&mclkout1_lpcg { - status = "disabled"; +&spdif0 { + interrupts = <GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH>, /* rx */ + <GIC_SPI 328 IRQ_TYPE_LEVEL_HIGH>; /* tx */ }; diff --git a/arch/arm64/boot/dts/freescale/imx8qm-ss-audio.dtsi b/arch/arm64/boot/dts/freescale/imx8qm-ss-audio.dtsi index 72d54406c505..e3bdf15e0a36 100644 --- a/arch/arm64/boot/dts/freescale/imx8qm-ss-audio.dtsi +++ b/arch/arm64/boot/dts/freescale/imx8qm-ss-audio.dtsi @@ -28,9 +28,11 @@ <0x592d0000 0x10000>, /* sai0 tx */ <0x592e0000 0x10000>, /* sai1 rx */ <0x592f0000 0x10000>, /* sai1 tx */ + <0x59300000 0x10000>, /* sai2 rx */ + <0x59310000 0x10000>, /* sai3 rx */ <0x59320000 0x10000>, /* sai4 rx */ <0x59330000 0x10000>; /* sai5 tx */ - dma-channels = <18>; + dma-channels = <20>; interrupts = <GIC_SPI 374 IRQ_TYPE_LEVEL_HIGH>, /* asrc0 */ <GIC_SPI 375 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 376 IRQ_TYPE_LEVEL_HIGH>, @@ -47,6 +49,8 @@ <GIC_SPI 315 IRQ_TYPE_LEVEL_HIGH>, <GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH>, /* sai1 */ <GIC_SPI 317 IRQ_TYPE_LEVEL_HIGH>, + <GIC_SPI 319 IRQ_TYPE_LEVEL_HIGH>, /* sai2 */ + <GIC_SPI 324 IRQ_TYPE_LEVEL_HIGH>, /* sai3 */ <GIC_SPI 326 IRQ_TYPE_LEVEL_HIGH>, /* sai4 */ <GIC_SPI 328 IRQ_TYPE_LEVEL_HIGH>; /* sai5 */ interrupt-names = "edma2-chan0-rx", "edma2-chan1-rx", /* asrc0 */ @@ -57,6 +61,7 @@ "edma2-chan10-rx", "edma2-chan11-tx", /* spdif1 */ "edma2-chan12-rx", "edma2-chan13-tx", /* sai0 */ "edma2-chan14-rx", "edma2-chan15-tx", /* sai1 */ + "edma2-chan16-rx", "edma2-chan17-tx", /* sai2, dai3 */ "edma2-chan18-rx", "edma2-chan19-tx"; /* sai4, sai5 */ power-domains = <&pd IMX_SC_R_DMA_2_CH0>, <&pd IMX_SC_R_DMA_2_CH1>, @@ -74,6 +79,8 @@ <&pd IMX_SC_R_DMA_2_CH13>, <&pd IMX_SC_R_DMA_2_CH14>, <&pd IMX_SC_R_DMA_2_CH15>, + <&pd IMX_SC_R_DMA_2_CH16>, + <&pd IMX_SC_R_DMA_2_CH17>, <&pd IMX_SC_R_DMA_2_CH18>, <&pd IMX_SC_R_DMA_2_CH19>; power-domain-names = "edma2-chan0", "edma2-chan1", @@ -84,6 +91,7 @@ "edma2-chan10", "edma2-chan11", "edma2-chan12", "edma2-chan13", "edma2-chan14", "edma2-chan15", + "edma2-chan16", "edma2-chan17", "edma2-chan18", "edma2-chan19"; }; |