ARM: dts: imx6q-cm-fx6: add analog audio support
authorValentin Raevsky <valentin@compulab.co.il>
Wed, 8 Feb 2017 20:44:04 +0000 (21:44 +0100)
committerShawn Guo <shawnguo@kernel.org>
Wed, 8 Mar 2017 11:48:28 +0000 (12:48 +0100)
The cm-fx6 module has an onboard Wolfson wm8731 codec which is muxed
to the ssi2 controller. Unlike most (all?) supported i.MX6 board/codec
combinations the wm8731 is operated in slave mode and the clock setup
is static.

Add support for it.

Signed-off-by: Valentin Raevsky <valentin@compulab.co.il>
[christopher.spinrath@rwth-aachen.de: enhanced commit message, ported
  to upstream and some cleanup]
Signed-off-by: Christopher Spinrath <christopher.spinrath@rwth-aachen.de>
Reviewed-by: Fabio Estevam <fabio.estevam@nxp.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
arch/arm/boot/dts/imx6q-cm-fx6.dts

index d8a5789..66cac53 100644 (file)
@@ -43,6 +43,7 @@
 
 /dts-v1/;
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/sound/fsl-imx-audmux.h>
 #include "imx6q.dtsi"
 
 / {
                enable-active-high;
        };
 
+       sound-analog {
+               compatible = "simple-audio-card";
+               simple-audio-card,name = "On-board analog audio";
+               simple-audio-card,widgets =
+                       "Headphone", "Headphone Jack",
+                       "Line", "Line Out",
+                       "Microphone", "Mic Jack",
+                       "Line", "Line In";
+               simple-audio-card,routing =
+                       "Headphone Jack", "RHPOUT",
+                       "Headphone Jack", "LHPOUT",
+                       "MICIN", "Mic Bias",
+                       "Mic Bias", "Mic Jack";
+               simple-audio-card,format = "i2s";
+               simple-audio-card,bitclock-master = <&sound_master>;
+               simple-audio-card,frame-master = <&sound_master>;
+               simple-audio-card,bitclock-inversion;
+
+               sound_master: simple-audio-card,cpu {
+                       sound-dai = <&ssi2>;
+                       system-clock-frequency = <2822400>;
+               };
+
+               simple-audio-card,codec {
+                       sound-dai = <&wm8731>;
+               };
+       };
+
        sound-spdif {
                compatible = "fsl,imx-audio-spdif";
                model = "imx-spdif";
        };
 };
 
+&audmux {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pinctrl_audmux>;
+       status = "okay";
+
+       ssi2 {
+               fsl,audmux-port = <1>;
+               fsl,port-config = <
+                       (IMX_AUDMUX_V2_PTCR_RCLKDIR |
+                       IMX_AUDMUX_V2_PTCR_RCSEL(3 | 0x8) |
+                       IMX_AUDMUX_V2_PTCR_TCLKDIR |
+                       IMX_AUDMUX_V2_PTCR_TCSEL(3))
+                       IMX_AUDMUX_V2_PDCR_RXDSEL(3)
+               >;
+       };
+
+       audmux4 {
+               fsl,audmux-port = <3>;
+               fsl,port-config = <
+                       (IMX_AUDMUX_V2_PTCR_TFSDIR |
+                       IMX_AUDMUX_V2_PTCR_TFSEL(1) |
+                       IMX_AUDMUX_V2_PTCR_RCLKDIR |
+                       IMX_AUDMUX_V2_PTCR_RCSEL(1 | 0x8) |
+                       IMX_AUDMUX_V2_PTCR_TCLKDIR |
+                       IMX_AUDMUX_V2_PTCR_TCSEL(1))
+                       IMX_AUDMUX_V2_PDCR_RXDSEL(1)
+               >;
+       };
+};
+
 &cpu0 {
        /*
         * Although the imx6q fuse indicates that 1.2GHz operation is possible,
                reg = <0x50>;
                pagesize = <16>;
        };
+
+       wm8731: codec@1a {
+               #sound-dai-cells = <0>;
+               compatible = "wlf,wm8731";
+               reg = <0x1a>;
+       };
 };
 
 &iomuxc {
+       pinctrl_audmux: audmuxgrp {
+               fsl,pins = <
+                       MX6QDL_PAD_SD2_CMD__AUD4_RXC   0x17059
+                       MX6QDL_PAD_SD2_DAT0__AUD4_RXD  0x17059
+                       MX6QDL_PAD_SD2_DAT3__AUD4_TXC  0x17059
+                       MX6QDL_PAD_SD2_DAT2__AUD4_TXD  0x17059
+                       MX6QDL_PAD_SD2_DAT1__AUD4_TXFS 0x17059
+               >;
+       };
+
        pinctrl_ecspi1: ecspi1grp {
                fsl,pins = <
                        MX6QDL_PAD_EIM_D16__ECSPI1_SCLK 0x100b1
        status = "okay";
 };
 
+&ssi2 {
+       assigned-clocks = <&clks IMX6QDL_CLK_SSI2_SEL>,
+                       <&clks IMX6QDL_CLK_PLL4_AUDIO_DIV>;
+       assigned-clock-parents = <&clks IMX6QDL_CLK_PLL4_AUDIO_DIV>;
+       assigned-clock-rates = <0>, <786432000>;
+       status = "okay";
+};
+
 &uart4 {
        pinctrl-names = "default";
        pinctrl-0 = <&pinctrl_uart4>;