ENGR00212251-1: sai: add platform support for SAI driver
authorAlison Wang <b18965@freescale.com>
Fri, 27 Jul 2012 03:06:36 +0000 (11:06 +0800)
committerJason Jin <Jason.jin@freescale.com>
Fri, 10 Aug 2012 10:19:11 +0000 (18:19 +0800)
Add platform support for SAI driver.

Signed-off-by: Alison Wang <b18965@freescale.com>
arch/arm/plat-mxc/devices/platform-mvf-sai.c [new file with mode: 0644]
arch/arm/plat-mxc/include/mach/sai.h [new file with mode: 0644]
include/linux/fsl_devices.h

diff --git a/arch/arm/plat-mxc/devices/platform-mvf-sai.c b/arch/arm/plat-mxc/devices/platform-mvf-sai.c
new file mode 100644 (file)
index 0000000..af57be1
--- /dev/null
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2012 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License version 2 as published by the
+ * Free Software Foundation.
+ */
+#include <mach/hardware.h>
+#include <mach/devices-common.h>
+
+#define mvf_sai_data_entry_single(soc, id, size)                       \
+       {                                                               \
+               .iobase = soc ## _SAI ## id ## _BASE_ADDR,              \
+               .iosize = size,                                         \
+               .irq = soc ## _INT_SAI ## id,                           \
+               .dmatx0 = DMA_MUX03_SAI ## id ## _TX,                   \
+               .dmarx0 = DMA_MUX03_SAI ## id ## _RX,                   \
+       }
+
+const struct mvf_sai_data mvfa5_sai_data[] __initconst = {
+       mvf_sai_data_entry_single(MVF, 0, SZ_4K),
+       mvf_sai_data_entry_single(MVF, 1, SZ_4K),
+       mvf_sai_data_entry_single(MVF, 2, SZ_4K),
+};
+
+struct platform_device *__init mvf_add_sai(
+               int id,
+               const struct mvf_sai_data *data,
+               const struct mvf_sai_platform_data *pdata)
+{
+       struct resource res[] = {
+               {
+                       .start = data->iobase,
+                       .end = data->iobase + data->iosize - 1,
+                       .flags = IORESOURCE_MEM,
+               }, {
+                       .start = data->irq,
+                       .end = data->irq,
+                       .flags = IORESOURCE_IRQ,
+               },
+#define DMARES(_name) {                                                        \
+       .name = #_name,                                                 \
+       .start = data->dma ## _name,                                    \
+       .end = data->dma ## _name,                                      \
+       .flags = IORESOURCE_DMA,                                        \
+}
+               DMARES(tx0),
+               DMARES(rx0),
+       };
+
+       return imx_add_platform_device("mvf-sai", data->id,
+                       res, ARRAY_SIZE(res),
+                       pdata, sizeof(*pdata));
+}
diff --git a/arch/arm/plat-mxc/include/mach/sai.h b/arch/arm/plat-mxc/include/mach/sai.h
new file mode 100644 (file)
index 0000000..f476300
--- /dev/null
@@ -0,0 +1,14 @@
+#ifndef __MACH_SAI_H
+#define __MACH_SAI_H
+
+struct mvf_sai_platform_data {
+       unsigned int flags;
+#define MVF_SAI_DMA            (1 << 0)
+#define MVF_SAI_USE_AC97       (1 << 1)
+#define MVF_SAI_NET            (1 << 2)
+#define MVF_SAI_TRA_SYN        (1 << 3)
+#define MVF_SAI_REC_SYN        (1 << 4)
+#define MVF_SAI_USE_I2S_SLAVE  (1 << 5)
+};
+
+#endif /* __MACH_SAI_H */
index 5b701a8c12f8549fede3963bc81b9c2c25157b05..2567d84afb73248e1bda35657915fb01476f588a 100644 (file)
@@ -344,6 +344,7 @@ struct mxc_otp_platform_data {
  */
 struct mxc_audio_platform_data {
        int ssi_num;
+       int sai_num;
        int src_port;
        int ext_port;