Merge tag 'dm-3.4-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-dm
[firefly-linux-kernel-4.4.55.git] / sound / soc / imx / eukrea-tlv320.c
index 1c1fdd10f73f6b39e39f01a318d3df3bc6ad74f5..7d4475cfdb242bf6da4a74393a45c7b80b053d33 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "../codecs/tlv320aic23.h"
 #include "imx-ssi.h"
+#include "imx-audmux.h"
 
 #define CODEC_CLOCK 12000000
 
@@ -97,12 +98,43 @@ static struct platform_device *eukrea_tlv320_snd_device;
 static int __init eukrea_tlv320_init(void)
 {
        int ret;
-
-       if (!machine_is_eukrea_cpuimx27() && !machine_is_eukrea_cpuimx25sd()
-               && !machine_is_eukrea_cpuimx35sd()
-               && !machine_is_eukrea_cpuimx51sd())
+       int int_port = 0, ext_port;
+
+       if (machine_is_eukrea_cpuimx27()) {
+               imx_audmux_v1_configure_port(MX27_AUDMUX_HPCR1_SSI0,
+                       IMX_AUDMUX_V1_PCR_SYN |
+                       IMX_AUDMUX_V1_PCR_TFSDIR |
+                       IMX_AUDMUX_V1_PCR_TCLKDIR |
+                       IMX_AUDMUX_V1_PCR_RFSDIR |
+                       IMX_AUDMUX_V1_PCR_RCLKDIR |
+                       IMX_AUDMUX_V1_PCR_TFCSEL(MX27_AUDMUX_HPCR3_SSI_PINS_4) |
+                       IMX_AUDMUX_V1_PCR_RFCSEL(MX27_AUDMUX_HPCR3_SSI_PINS_4) |
+                       IMX_AUDMUX_V1_PCR_RXDSEL(MX27_AUDMUX_HPCR3_SSI_PINS_4)
+               );
+               imx_audmux_v1_configure_port(MX27_AUDMUX_HPCR3_SSI_PINS_4,
+                       IMX_AUDMUX_V1_PCR_SYN |
+                       IMX_AUDMUX_V1_PCR_RXDSEL(MX27_AUDMUX_HPCR1_SSI0)
+               );
+       } else if (machine_is_eukrea_cpuimx25sd() ||
+                  machine_is_eukrea_cpuimx35sd() ||
+                  machine_is_eukrea_cpuimx51sd()) {
+               ext_port = machine_is_eukrea_cpuimx25sd() ? 4 : 3;
+               imx_audmux_v2_configure_port(int_port,
+                       IMX_AUDMUX_V2_PTCR_SYN |
+                       IMX_AUDMUX_V2_PTCR_TFSDIR |
+                       IMX_AUDMUX_V2_PTCR_TFSEL(ext_port) |
+                       IMX_AUDMUX_V2_PTCR_TCLKDIR |
+                       IMX_AUDMUX_V2_PTCR_TCSEL(ext_port),
+                       IMX_AUDMUX_V2_PDCR_RXDSEL(ext_port)
+               );
+               imx_audmux_v2_configure_port(ext_port,
+                       IMX_AUDMUX_V2_PTCR_SYN,
+                       IMX_AUDMUX_V2_PDCR_RXDSEL(int_port)
+               );
+       } else {
                /* return happy. We might run on a totally different machine */
                return 0;
+       }
 
        eukrea_tlv320_snd_device = platform_device_alloc("soc-audio", -1);
        if (!eukrea_tlv320_snd_device)