]> git.karo-electronics.de Git - linux-beck.git/commitdiff
davinci: Audio support for DA830 EVM
authorChaithrika U S <chaithrika@ti.com>
Tue, 11 Aug 2009 21:01:59 +0000 (17:01 -0400)
committerKevin Hilman <khilman@deeprootsystems.com>
Wed, 26 Aug 2009 08:55:52 +0000 (11:55 +0300)
Define resources for McASP1 used on DA830/OMAP-L137 EVM, add platform
device defintion, initialization function.  Additionally, this patch
also adds version and FIFO related members to platform data structure.

Signed-off-by: Chaithrika U S <chaithrika@ti.com>
Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
arch/arm/mach-davinci/board-da830-evm.c
arch/arm/mach-davinci/da830.c
arch/arm/mach-davinci/devices-da8xx.c
arch/arm/mach-davinci/include/mach/asp.h
arch/arm/mach-davinci/include/mach/da8xx.h

index 90256693b8d82dbec9b0b07bf35106f679c34322..a45340de74650529db20de3f6a990ceb00679c3c 100644 (file)
@@ -23,6 +23,7 @@
 #include <mach/irqs.h>
 #include <mach/cp_intc.h>
 #include <mach/da8xx.h>
+#include <mach/asp.h>
 
 #define DA830_EVM_PHY_MASK             0x0
 #define DA830_EVM_MDIO_FREQUENCY       2200000 /* PHY bus frequency */
@@ -51,6 +52,25 @@ static struct davinci_uart_config da830_evm_uart_config __initdata = {
        .enabled_uarts = 0x7,
 };
 
+static u8 da830_iis_serializer_direction[] = {
+       RX_MODE,        INACTIVE_MODE,  INACTIVE_MODE,  INACTIVE_MODE,
+       INACTIVE_MODE,  TX_MODE,        INACTIVE_MODE,  INACTIVE_MODE,
+       INACTIVE_MODE,  INACTIVE_MODE,  INACTIVE_MODE,  INACTIVE_MODE,
+};
+
+static struct snd_platform_data da830_evm_snd_data = {
+       .tx_dma_offset  = 0x2000,
+       .rx_dma_offset  = 0x2000,
+       .op_mode        = DAVINCI_MCASP_IIS_MODE,
+       .num_serializer = ARRAY_SIZE(da830_iis_serializer_direction),
+       .tdm_slots      = 2,
+       .serial_dir     = da830_iis_serializer_direction,
+       .eventq_no      = EVENTQ_0,
+       .version        = MCASP_VERSION_2,
+       .txnumevt       = 1,
+       .rxnumevt       = 1,
+};
+
 static __init void da830_evm_init(void)
 {
        struct davinci_soc_info *soc_info = &davinci_soc_info;
@@ -93,6 +113,13 @@ static __init void da830_evm_init(void)
        davinci_serial_init(&da830_evm_uart_config);
        i2c_register_board_info(1, da830_evm_i2c_devices,
                        ARRAY_SIZE(da830_evm_i2c_devices));
+
+       ret = da8xx_pinmux_setup(da830_mcasp1_pins);
+       if (ret)
+               pr_warning("da830_evm_init: mcasp1 mux setup failed: %d\n",
+                               ret);
+
+       da8xx_init_mcasp(1, &da830_evm_snd_data);
 }
 
 #ifdef CONFIG_SERIAL_8250_CONSOLE
index 3a9b6346c310e58a7eddf30d2512c99d6f2b0578..19b2748357fcba3ba6d907cb6bb01da5fb533e4b 100644 (file)
@@ -23,6 +23,7 @@
 #include <mach/common.h>
 #include <mach/time.h>
 #include <mach/da8xx.h>
+#include <mach/asp.h>
 
 #include "clock.h"
 #include "mux.h"
@@ -411,9 +412,9 @@ static struct davinci_clk da830_clks[] = {
        CLK("eqep.0",           NULL,           &eqep0_clk),
        CLK("eqep.1",           NULL,           &eqep1_clk),
        CLK("da830_lcdc",       NULL,           &lcdc_clk),
-       CLK("soc-audio.0",      NULL,           &mcasp0_clk),
-       CLK("soc-audio.1",      NULL,           &mcasp1_clk),
-       CLK("soc-audio.2",      NULL,           &mcasp2_clk),
+       CLK("davinci-mcasp.0",  NULL,           &mcasp0_clk),
+       CLK("davinci-mcasp.1",  NULL,           &mcasp1_clk),
+       CLK("davinci-mcasp.2",  NULL,           &mcasp2_clk),
        CLK("musb_hdrc",        NULL,           &usb20_clk),
        CLK(NULL,               "aemif",        &aemif_clk),
        CLK(NULL,               "aintc",        &aintc_clk),
index 11c0971e13a6832bceab05aba7775043ccdd0852..fe0baafcf6107558439e265ca634b803cf570cba 100644 (file)
@@ -281,7 +281,43 @@ static struct platform_device da8xx_emac_device = {
        .resource       = da8xx_emac_resources,
 };
 
+static struct resource da830_mcasp1_resources[] = {
+       {
+               .name   = "mcasp1",
+               .start  = DAVINCI_DA830_MCASP1_REG_BASE,
+               .end    = DAVINCI_DA830_MCASP1_REG_BASE + (SZ_1K * 12) - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       /* TX event */
+       {
+               .start  = DAVINCI_DA830_DMA_MCASP1_AXEVT,
+               .end    = DAVINCI_DA830_DMA_MCASP1_AXEVT,
+               .flags  = IORESOURCE_DMA,
+       },
+       /* RX event */
+       {
+               .start  = DAVINCI_DA830_DMA_MCASP1_AREVT,
+               .end    = DAVINCI_DA830_DMA_MCASP1_AREVT,
+               .flags  = IORESOURCE_DMA,
+       },
+};
+
+static struct platform_device da830_mcasp1_device = {
+       .name           = "davinci-mcasp",
+       .id             = 1,
+       .num_resources  = ARRAY_SIZE(da830_mcasp1_resources),
+       .resource       = da830_mcasp1_resources,
+};
+
 int __init da8xx_register_emac(void)
 {
        return platform_device_register(&da8xx_emac_device);
 }
+
+void __init da8xx_init_mcasp(int id, struct snd_platform_data *pdata)
+{
+       if (id == 1) { /* DA830/OMAP-L137 has 3 instances of McASP */
+               da830_mcasp1_device.dev.platform_data = pdata;
+               platform_device_register(&da830_mcasp1_device);
+       }
+}
index cdf1f444233021e7d23d99500ba6f6029adcee92..f3c97ac3425c89924699e245e484a76dd2960f96 100644 (file)
@@ -15,6 +15,9 @@
 #define        DAVINCI_DM646X_MCASP0_REG_BASE          0x01D01000
 #define DAVINCI_DM646X_MCASP1_REG_BASE         0x01D01800
 
+/* Bases of da830 McASP1 register banks */
+#define DAVINCI_DA830_MCASP1_REG_BASE  0x01D04000
+
 /* EDMA channels of dm644x and dm355 */
 #define DAVINCI_DMA_ASP0_TX    2
 #define DAVINCI_DMA_ASP0_RX    3
 #define        DAVINCI_DM646X_DMA_MCASP0_AREVT0        9
 #define        DAVINCI_DM646X_DMA_MCASP1_AXEVT1        12
 
+/* EDMA channels of da830 McASP1 */
+#define        DAVINCI_DA830_DMA_MCASP1_AREVT  2
+#define        DAVINCI_DA830_DMA_MCASP1_AXEVT  3
+
 /* Interrupts */
 #define DAVINCI_ASP0_RX_INT    IRQ_MBRINT
 #define DAVINCI_ASP0_TX_INT    IRQ_MBXINT
@@ -43,6 +50,14 @@ struct snd_platform_data {
        u8 op_mode;
        u8 num_serializer;
        u8 *serial_dir;
+       u8 version;
+       u8 txnumevt;
+       u8 rxnumevt;
+};
+
+enum {
+       MCASP_VERSION_1 = 0,    /* DM646x */
+       MCASP_VERSION_2,        /* DA8xx/OMAPL1x */
 };
 
 #define INACTIVE_MODE  0
index a8cb5709848d4e999e1c7966a00a1c46fdcd6c64..30c5c407ea8508c2be04284652121e67d6e74ced 100644 (file)
@@ -15,6 +15,7 @@
 #include <mach/edma.h>
 #include <mach/i2c.h>
 #include <mach/emac.h>
+#include <mach/asp.h>
 
 /*
  * The cp_intc interrupt controller for the da8xx isn't in the same
@@ -65,6 +66,7 @@ int da8xx_register_edma(void);
 int da8xx_register_i2c(int instance, struct davinci_i2c_platform_data *pdata);
 int da8xx_register_watchdog(void);
 int da8xx_register_emac(void);
+void __init da8xx_init_mcasp(int id, struct snd_platform_data *pdata);
 
 extern struct platform_device da8xx_serial_device;
 extern struct emac_platform_data da8xx_emac_pdata;
@@ -100,6 +102,7 @@ extern const short da850_uart2_pins[];
 extern const short da850_i2c0_pins[];
 extern const short da850_i2c1_pins[];
 extern const short da850_cpgmac_pins[];
+extern const short da850_mcasp_pins[];
 
 int da8xx_pinmux_setup(const short pins[]);