diff mbox

[v2] ARM: DaVinci: Audio support for DA830 EVM

Message ID 1250024519-27100-1-git-send-email-chaithrika@ti.com (mailing list archive)
State Accepted
Headers show

Commit Message

chaithrika@ti.com Aug. 11, 2009, 9:01 p.m. UTC
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>
---
Applies to DaVinci GIT tree.
In this version of the patch, the init fucntion, resource and platform device
definitions have neen moved to the devices-da8xx.c file.

 arch/arm/mach-davinci/board-da830-evm.c    |   27 +++++++++++++++++++++
 arch/arm/mach-davinci/da830.c              |    7 +++--
 arch/arm/mach-davinci/devices-da8xx.c      |   36 ++++++++++++++++++++++++++++
 arch/arm/mach-davinci/include/mach/asp.h   |   15 +++++++++++
 arch/arm/mach-davinci/include/mach/da8xx.h |    3 ++
 5 files changed, 85 insertions(+), 3 deletions(-)

Comments

Kevin Hilman Aug. 12, 2009, 6:29 p.m. UTC | #1
Chaithrika U S <chaithrika@ti.com> writes:

> 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>
> ---
> Applies to DaVinci GIT tree.
> In this version of the patch, the init fucntion, resource and platform device
> definitions have neen moved to the devices-da8xx.c file.

Looks fine.

I'll merge these two 'ARM: DaVinci: *' patches via DaVinci git (after
changing the subject prefix to just davinci:)

Merging them via davinci git will prevent conflicts in linux-next because
these are touching code that is being changed from multiple directions.

Kevin


>  arch/arm/mach-davinci/board-da830-evm.c    |   27 +++++++++++++++++++++
>  arch/arm/mach-davinci/da830.c              |    7 +++--
>  arch/arm/mach-davinci/devices-da8xx.c      |   36 ++++++++++++++++++++++++++++
>  arch/arm/mach-davinci/include/mach/asp.h   |   15 +++++++++++
>  arch/arm/mach-davinci/include/mach/da8xx.h |    3 ++
>  5 files changed, 85 insertions(+), 3 deletions(-)
>
> diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c
> index 9025669..a45340d 100644
> --- a/arch/arm/mach-davinci/board-da830-evm.c
> +++ b/arch/arm/mach-davinci/board-da830-evm.c
> @@ -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
> diff --git a/arch/arm/mach-davinci/da830.c b/arch/arm/mach-davinci/da830.c
> index 3a9b634..19b2748 100644
> --- a/arch/arm/mach-davinci/da830.c
> +++ b/arch/arm/mach-davinci/da830.c
> @@ -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),
> diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
> index 11c0971..fe0baaf 100644
> --- a/arch/arm/mach-davinci/devices-da8xx.c
> +++ b/arch/arm/mach-davinci/devices-da8xx.c
> @@ -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);
> +	}
> +}
> diff --git a/arch/arm/mach-davinci/include/mach/asp.h b/arch/arm/mach-davinci/include/mach/asp.h
> index cdf1f44..f3c97ac 100644
> --- a/arch/arm/mach-davinci/include/mach/asp.h
> +++ b/arch/arm/mach-davinci/include/mach/asp.h
> @@ -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
> @@ -26,6 +29,10 @@
>  #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
> diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
> index a8cb570..30c5c40 100644
> --- a/arch/arm/mach-davinci/include/mach/da8xx.h
> +++ b/arch/arm/mach-davinci/include/mach/da8xx.h
> @@ -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[]);
>  
> -- 
> 1.5.6
diff mbox

Patch

diff --git a/arch/arm/mach-davinci/board-da830-evm.c b/arch/arm/mach-davinci/board-da830-evm.c
index 9025669..a45340d 100644
--- a/arch/arm/mach-davinci/board-da830-evm.c
+++ b/arch/arm/mach-davinci/board-da830-evm.c
@@ -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
diff --git a/arch/arm/mach-davinci/da830.c b/arch/arm/mach-davinci/da830.c
index 3a9b634..19b2748 100644
--- a/arch/arm/mach-davinci/da830.c
+++ b/arch/arm/mach-davinci/da830.c
@@ -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),
diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c
index 11c0971..fe0baaf 100644
--- a/arch/arm/mach-davinci/devices-da8xx.c
+++ b/arch/arm/mach-davinci/devices-da8xx.c
@@ -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);
+	}
+}
diff --git a/arch/arm/mach-davinci/include/mach/asp.h b/arch/arm/mach-davinci/include/mach/asp.h
index cdf1f44..f3c97ac 100644
--- a/arch/arm/mach-davinci/include/mach/asp.h
+++ b/arch/arm/mach-davinci/include/mach/asp.h
@@ -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
@@ -26,6 +29,10 @@ 
 #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
diff --git a/arch/arm/mach-davinci/include/mach/da8xx.h b/arch/arm/mach-davinci/include/mach/da8xx.h
index a8cb570..30c5c40 100644
--- a/arch/arm/mach-davinci/include/mach/da8xx.h
+++ b/arch/arm/mach-davinci/include/mach/da8xx.h
@@ -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[]);