[alsa-devel] [PATCH v4 1/4] ARM: DaVinci: ASoC: Add the platform devices for ASP

chaithrika chaithrika at ti.com
Mon Jun 15 10:58:30 CEST 2009


On Thu, Jun 11, 2009 at 22:42:42, Kevin Hilman wrote:
> Chaithrika U S <chaithrika at ti.com> writes:
> 
> > 1) Registers the platform devices for ASP on dm355, dm644x and dm646x so
that
> > the machine driver can probe to get ASP related platform data.
> > 2) Move towards definition of the asp clocks using physical name(for
dm355 and
> > dm644x)
> 
> Why do you want to move towards the clock name approach?  
> 
> I much prefer the approach where clock naming details do not need to
> be visible outside of arch code.
> 

Kevin,

This change has been done as per the discussion in this thread
http://linux.omap.com/pipermail/davinci-linux-open-source/2009-March/011898.
html

Regards,
Chaithrika

> Kevin
> 
> 
> > 3) Add platform data to board specific files.
> >
> > Signed-off-by: Naresh Medisetty <naresh at ti.com>
> > Signed-off-by: Chaithrika U S <chaithrika at ti.com>
> > ---
> > This patch applies to the DaVinci git tree available at
> > http://git.kernel.org/?p=linux/kernel/git/khilman/linux-davinci.git
> >
> >  arch/arm/mach-davinci/board-dm355-evm.c     |    7 +++
> >  arch/arm/mach-davinci/board-dm644x-evm.c    |    5 ++
> >  arch/arm/mach-davinci/board-dm646x-evm.c    |   33 ++++++++++++
> >  arch/arm/mach-davinci/dm355.c               |   43 +++++++++++++++-
> >  arch/arm/mach-davinci/dm644x.c              |   36 +++++++++++++-
> >  arch/arm/mach-davinci/dm646x.c              |   74
+++++++++++++++++++++++++++
> >  arch/arm/mach-davinci/include/mach/asp.h    |   35 ++++++++++++-
> >  arch/arm/mach-davinci/include/mach/dm355.h  |    5 ++
> >  arch/arm/mach-davinci/include/mach/dm644x.h |    2 +
> >  arch/arm/mach-davinci/include/mach/dm646x.h |    3 +
> >  10 files changed, 238 insertions(+), 5 deletions(-)
> >
> > diff --git a/arch/arm/mach-davinci/board-dm355-evm.c
b/arch/arm/mach-davinci/board-dm355-evm.c
> > index 5ac2f56..78a9604 100644
> > --- a/arch/arm/mach-davinci/board-dm355-evm.c
> > +++ b/arch/arm/mach-davinci/board-dm355-evm.c
> > @@ -118,6 +118,10 @@ static struct davinci_i2c_platform_data i2c_pdata =
{
> >  	.bus_delay	= 0	/* usec */,
> >  };
> >  
> > +static struct snd_platform_data dm355_evm_snd_data = {
> > +	.clk_name	= "asp1",
> > +};
> > +
> >  static int dm355evm_mmc_gpios = -EINVAL;
> >  
> >  static void dm355evm_mmcsd_gpios(unsigned gpio)
> > @@ -280,6 +284,9 @@ static __init void dm355_evm_init(void)
> >  
> >  	dm355_init_spi0(BIT(0), dm355_evm_spi_info,
> >  			ARRAY_SIZE(dm355_evm_spi_info));
> > +
> > +	/* DM335 EVM uses ASP1; line-out is a stereo mini-jack */
> > +	dm355_init_asp1(ASP1_TX_EVT_EN | ASP1_RX_EVT_EN,
&dm355_evm_snd_data);
> >  }
> >  
> >  static __init void dm355_evm_irq_init(void)
> > diff --git a/arch/arm/mach-davinci/board-dm644x-evm.c
b/arch/arm/mach-davinci/board-dm644x-evm.c
> > index d9d4045..30b2fd4 100644
> > --- a/arch/arm/mach-davinci/board-dm644x-evm.c
> > +++ b/arch/arm/mach-davinci/board-dm644x-evm.c
> > @@ -226,6 +226,10 @@ static struct platform_device ide_dev = {
> >  	},
> >  };
> >  
> > +static struct snd_platform_data dm644x_evm_snd_data = {
> > +	.clk_name	= "asp0",
> > +};
> > +
> >
/*----------------------------------------------------------------------*/
> >  
> >  /*
> > @@ -667,6 +671,7 @@ static __init void davinci_evm_init(void)
> >  	davinci_setup_mmc(0, &dm6446evm_mmc_config);
> >  
> >  	davinci_serial_init(&uart_config);
> > +	dm644x_init_asp(&dm644x_evm_snd_data);
> >  
> >  	soc_info->emac_pdata->phy_mask = DM644X_EVM_PHY_MASK;
> >  	soc_info->emac_pdata->mdio_max_freq = DM644X_EVM_MDIO_FREQUENCY;
> > diff --git a/arch/arm/mach-davinci/board-dm646x-evm.c
b/arch/arm/mach-davinci/board-dm646x-evm.c
> > index e17de63..575c6ca 100644
> > --- a/arch/arm/mach-davinci/board-dm646x-evm.c
> > +++ b/arch/arm/mach-davinci/board-dm646x-evm.c
> > @@ -207,6 +207,37 @@ static struct at24_platform_data eeprom_info = {
> >  	.context	= (void *)0x7f00,
> >  };
> >  
> > +static u8 dm646x_iis_serializer_direction[] = {
> > +       TX_MODE, RX_MODE, INACTIVE_MODE, INACTIVE_MODE,
> > +};
> > +
> > +static u8 dm646x_dit_serializer_direction[] = {
> > +       TX_MODE,
> > +};
> > +
> > +static struct snd_platform_data dm646x_evm_snd_data[] = {
> > +	{
> > +		.clk_name       = "mcasp0",
> > +		.tx_dma_offset  = 0x400,
> > +		.rx_dma_offset  = 0x400,
> > +		.op_mode        = DAVINCI_MCASP_IIS_MODE,
> > +		.num_serializer =
ARRAY_SIZE(dm646x_iis_serializer_direction),
> > +		.tdm_slots      = 2,
> > +		.serial_dir     = dm646x_iis_serializer_direction,
> > +		.eventq_no      = EVENTQ_0,
> > +	},
> > +	{
> > +		.clk_name       = "mcasp1",
> > +		.tx_dma_offset  = 0x400,
> > +		.rx_dma_offset  = 0,
> > +		.op_mode        = DAVINCI_MCASP_DIT_MODE,
> > +		.num_serializer =
ARRAY_SIZE(dm646x_dit_serializer_direction),
> > +		.tdm_slots      = 32,
> > +		.serial_dir     = dm646x_dit_serializer_direction,
> > +		.eventq_no      = EVENTQ_0,
> > +	},
> > +};
> > +
> >  static struct i2c_board_info __initdata i2c_info[] =  {
> >  	{
> >  		I2C_BOARD_INFO("24c256", 0x50),
> > @@ -240,6 +271,8 @@ static __init void evm_init(void)
> >  
> >  	evm_init_i2c();
> >  	davinci_serial_init(&uart_config);
> > +	dm646x_init_mcasp0(&dm646x_evm_snd_data[0]);
> > +	dm646x_init_mcasp1(&dm646x_evm_snd_data[1]);
> >  
> >  	soc_info->emac_pdata->phy_mask = DM646X_EVM_PHY_MASK;
> >  	soc_info->emac_pdata->mdio_max_freq = DM646X_EVM_MDIO_FREQUENCY;
> > diff --git a/arch/arm/mach-davinci/dm355.c
b/arch/arm/mach-davinci/dm355.c
> > index 9baeed3..1298d8d 100644
> > --- a/arch/arm/mach-davinci/dm355.c
> > +++ b/arch/arm/mach-davinci/dm355.c
> > @@ -30,6 +30,7 @@
> >  #include <mach/time.h>
> >  #include <mach/serial.h>
> >  #include <mach/common.h>
> > +#include <mach/asp.h>
> >  
> >  #include "clock.h"
> >  #include "mux.h"
> > @@ -360,8 +361,8 @@ static struct davinci_clk dm355_clks[] = {
> >  	CLK(NULL, "uart1", &uart1_clk),
> >  	CLK(NULL, "uart2", &uart2_clk),
> >  	CLK("i2c_davinci.1", NULL, &i2c_clk),
> > -	CLK("soc-audio.0", NULL, &asp0_clk),
> > -	CLK("soc-audio.1", NULL, &asp1_clk),
> > +	CLK(NULL, "asp0", &asp0_clk),
> > +	CLK(NULL, "asp1", &asp1_clk),
> >  	CLK("davinci_mmc.0", NULL, &mmcsd0_clk),
> >  	CLK("davinci_mmc.1", NULL, &mmcsd1_clk),
> >  	CLK(NULL, "spi0", &spi0_clk),
> > @@ -623,6 +624,31 @@ static struct platform_device dm355_edma_device = {
> >  	.resource		= edma_resources,
> >  };
> >  
> > +static struct resource dm355_asp1_resources[] = {
> > +	{
> > +		.start	= DAVINCI_ASP1_BASE,
> > +		.end	= DAVINCI_ASP1_BASE + SZ_8K - 1,
> > +		.flags	= IORESOURCE_MEM,
> > +	},
> > +	{
> > +		.start	= DAVINCI_DMA_ASP1_TX,
> > +		.end	= DAVINCI_DMA_ASP1_TX,
> > +		.flags	= IORESOURCE_DMA,
> > +	},
> > +	{
> > +		.start	= DAVINCI_DMA_ASP1_RX,
> > +		.end	= DAVINCI_DMA_ASP1_RX,
> > +		.flags	= IORESOURCE_DMA,
> > +	},
> > +};
> > +
> > +static struct platform_device dm355_asp1_device = {
> > +	.name		= "davinci-asp",
> > +	.id		= -1,
> > +	.num_resources	= ARRAY_SIZE(dm355_asp1_resources),
> > +	.resource	= dm355_asp1_resources,
> > +};
> > +
> >
/*----------------------------------------------------------------------*/
> >  
> >  static struct map_desc dm355_io_desc[] = {
> > @@ -732,6 +758,19 @@ static struct davinci_soc_info
davinci_soc_info_dm355 = {
> >  	.sram_len		= SZ_32K,
> >  };
> >  
> > +void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data
*pdata)
> > +{
> > +	/* we don't use ASP1 IRQs, or we'd need to mux them ... */
> > +	if (evt_enable & ASP1_TX_EVT_EN)
> > +		davinci_cfg_reg(DM355_EVT8_ASP1_TX);
> > +
> > +	if (evt_enable & ASP1_RX_EVT_EN)
> > +		davinci_cfg_reg(DM355_EVT9_ASP1_RX);
> > +
> > +	dm355_asp1_device.dev.platform_data = pdata;
> > +	platform_device_register(&dm355_asp1_device);
> > +}
> > +
> >  void __init dm355_init(void)
> >  {
> >  	davinci_common_init(&davinci_soc_info_dm355);
> > diff --git a/arch/arm/mach-davinci/dm644x.c
b/arch/arm/mach-davinci/dm644x.c
> > index 1b3aec8..351a131 100644
> > --- a/arch/arm/mach-davinci/dm644x.c
> > +++ b/arch/arm/mach-davinci/dm644x.c
> > @@ -27,6 +27,7 @@
> >  #include <mach/time.h>
> >  #include <mach/serial.h>
> >  #include <mach/common.h>
> > +#include <mach/asp.h>
> >  
> >  #include "clock.h"
> >  #include "mux.h"
> > @@ -303,7 +304,7 @@ struct davinci_clk dm644x_clks[] = {
> >  	CLK("davinci_emac.1", NULL, &emac_clk),
> >  	CLK("i2c_davinci.1", NULL, &i2c_clk),
> >  	CLK("palm_bk3710", NULL, &ide_clk),
> > -	CLK("soc-audio.0", NULL, &asp_clk),
> > +	CLK(NULL, "asp0", &asp_clk),
> >  	CLK("davinci_mmc.0", NULL, &mmcsd_clk),
> >  	CLK(NULL, "spi", &spi_clk),
> >  	CLK(NULL, "gpio", &gpio_clk),
> > @@ -549,6 +550,32 @@ static struct platform_device dm644x_edma_device =
{
> >  	.resource		= edma_resources,
> >  };
> >  
> > +/* DM6446 EVM uses ASP0; line-out is a pair of RCA jacks */
> > +static struct resource dm644x_asp_resources[] = {
> > +	{
> > +		.start	= DAVINCI_ASP0_BASE,
> > +		.end	= DAVINCI_ASP0_BASE + SZ_8K - 1,
> > +		.flags	= IORESOURCE_MEM,
> > +	},
> > +	{
> > +		.start	= DAVINCI_DMA_ASP0_TX,
> > +		.end	= DAVINCI_DMA_ASP0_TX,
> > +		.flags	= IORESOURCE_DMA,
> > +	},
> > +	{
> > +		.start	= DAVINCI_DMA_ASP0_RX,
> > +		.end	= DAVINCI_DMA_ASP0_RX,
> > +		.flags	= IORESOURCE_DMA,
> > +	},
> > +};
> > +
> > +static struct platform_device dm644x_asp_device = {
> > +	.name		= "davinci-asp",
> > +	.id		= -1,
> > +	.num_resources	= ARRAY_SIZE(dm644x_asp_resources),
> > +	.resource	= dm644x_asp_resources,
> > +};
> > +
> >
/*----------------------------------------------------------------------*/
> >  
> >  static struct map_desc dm644x_io_desc[] = {
> > @@ -666,6 +693,13 @@ static struct davinci_soc_info
davinci_soc_info_dm644x = {
> >  	.sram_len		= SZ_16K,
> >  };
> >  
> > +void __init dm644x_init_asp(struct snd_platform_data *pdata)
> > +{
> > +	davinci_cfg_reg(DM644X_MCBSP);
> > +	dm644x_asp_device.dev.platform_data = pdata;
> > +	platform_device_register(&dm644x_asp_device);
> > +}
> > +
> >  void __init dm644x_init(void)
> >  {
> >  	davinci_common_init(&davinci_soc_info_dm644x);
> > diff --git a/arch/arm/mach-davinci/dm646x.c
b/arch/arm/mach-davinci/dm646x.c
> > index e4d7d0f..591aecd 100644
> > --- a/arch/arm/mach-davinci/dm646x.c
> > +++ b/arch/arm/mach-davinci/dm646x.c
> > @@ -27,6 +27,7 @@
> >  #include <mach/time.h>
> >  #include <mach/serial.h>
> >  #include <mach/common.h>
> > +#include <mach/asp.h>
> >  
> >  #include "clock.h"
> >  #include "mux.h"
> > @@ -587,6 +588,66 @@ static struct platform_device dm646x_edma_device =
{
> >  	.resource		= edma_resources,
> >  };
> >  
> > +static struct resource dm646x_mcasp0_resources[] = {
> > +	{
> > +		.name	= "mcasp0",
> > +		.start 	= DAVINCI_DM646X_MCASP0_REG_BASE,
> > +		.end 	= DAVINCI_DM646X_MCASP0_REG_BASE + (SZ_1K << 1) - 1,
> > +		.flags 	= IORESOURCE_MEM,
> > +	},
> > +	/* first TX, then RX */
> > +	{
> > +		.start	= DAVINCI_DM646X_DMA_MCASP0_AXEVT0,
> > +		.end	= DAVINCI_DM646X_DMA_MCASP0_AXEVT0,
> > +		.flags	= IORESOURCE_DMA,
> > +	},
> > +	{
> > +		.start	= DAVINCI_DM646X_DMA_MCASP0_AREVT0,
> > +		.end	= DAVINCI_DM646X_DMA_MCASP0_AREVT0,
> > +		.flags	= IORESOURCE_DMA,
> > +	},
> > +};
> > +
> > +static struct resource dm646x_mcasp1_resources[] = {
> > +	{
> > +		.name	= "mcasp1",
> > +		.start	= DAVINCI_DM646X_MCASP1_REG_BASE,
> > +		.end	= DAVINCI_DM646X_MCASP1_REG_BASE + (SZ_1K << 1) - 1,
> > +		.flags	= IORESOURCE_MEM,
> > +	},
> > +	/* DIT mode, only TX event */
> > +	{
> > +		.start	= DAVINCI_DM646X_DMA_MCASP1_AXEVT1,
> > +		.end	= DAVINCI_DM646X_DMA_MCASP1_AXEVT1,
> > +		.flags	= IORESOURCE_DMA,
> > +	},
> > +	/* DIT mode, dummy entry */
> > +	{
> > +		.start	= -1,
> > +		.end	= -1,
> > +		.flags	= IORESOURCE_DMA,
> > +	},
> > +};
> > +
> > +static struct platform_device dm646x_mcasp0_device = {
> > +	.name		= "davinci-mcasp",
> > +	.id		= 0,
> > +	.num_resources	= ARRAY_SIZE(dm646x_mcasp0_resources),
> > +	.resource	= dm646x_mcasp0_resources,
> > +};
> > +
> > +static struct platform_device dm646x_mcasp1_device = {
> > +	.name		= "davinci-mcasp",
> > +	.id		= 1,
> > +	.num_resources	= ARRAY_SIZE(dm646x_mcasp1_resources),
> > +	.resource	= dm646x_mcasp1_resources,
> > +};
> > +
> > +static struct platform_device dm646x_dit_device = {
> > +	.name	= "spdif-dit",
> > +	.id	= -1,
> > +};
> > +
> >
/*----------------------------------------------------------------------*/
> >  
> >  static struct map_desc dm646x_io_desc[] = {
> > @@ -697,6 +758,19 @@ static struct davinci_soc_info
davinci_soc_info_dm646x = {
> >  	.sram_len		= SZ_32K,
> >  };
> >  
> > +void __init dm646x_init_mcasp0(struct snd_platform_data *pdata)
> > +{
> > +	dm646x_mcasp0_device.dev.platform_data = pdata;
> > +	platform_device_register(&dm646x_mcasp0_device);
> > +}
> > +
> > +void __init dm646x_init_mcasp1(struct snd_platform_data *pdata)
> > +{
> > +	dm646x_mcasp1_device.dev.platform_data = pdata;
> > +	platform_device_register(&dm646x_mcasp1_device);
> > +	platform_device_register(&dm646x_dit_device);
> > +}
> > +
> >  void __init dm646x_init(void)
> >  {
> >  	davinci_common_init(&davinci_soc_info_dm646x);
> > diff --git a/arch/arm/mach-davinci/include/mach/asp.h
b/arch/arm/mach-davinci/include/mach/asp.h
> > index e0abc43..038ecb7 100644
> > --- a/arch/arm/mach-davinci/include/mach/asp.h
> > +++ b/arch/arm/mach-davinci/include/mach/asp.h
> > @@ -5,21 +5,52 @@
> >  #define __ASM_ARCH_DAVINCI_ASP_H
> >  
> >  #include <mach/irqs.h>
> > +#include <mach/edma.h>
> >  
> > -/* Bases of register banks */
> > +/* Bases of dm644x and dm355 register banks */
> >  #define DAVINCI_ASP0_BASE	0x01E02000
> >  #define DAVINCI_ASP1_BASE	0x01E04000
> >  
> > -/* EDMA channels */
> > +/* Bases of dm646x register banks */
> > +#define	DAVINCI_DM646X_MCASP0_REG_BASE		0x01D01000
> > +#define DAVINCI_DM646X_MCASP1_REG_BASE		0x01D01800
> > +
> > +/* EDMA channels of dm644x and dm355 */
> >  #define DAVINCI_DMA_ASP0_TX	2
> >  #define DAVINCI_DMA_ASP0_RX	3
> >  #define DAVINCI_DMA_ASP1_TX	8
> >  #define DAVINCI_DMA_ASP1_RX	9
> >  
> > +/* EDMA channels of dm646x */
> > +#define	DAVINCI_DM646X_DMA_MCASP0_AXEVT0	6
> > +#define	DAVINCI_DM646X_DMA_MCASP0_AREVT0	9
> > +#define	DAVINCI_DM646X_DMA_MCASP1_AXEVT1	12
> > +
> >  /* Interrupts */
> >  #define DAVINCI_ASP0_RX_INT	IRQ_MBRINT
> >  #define DAVINCI_ASP0_TX_INT	IRQ_MBXINT
> >  #define DAVINCI_ASP1_RX_INT	IRQ_MBRINT
> >  #define DAVINCI_ASP1_TX_INT	IRQ_MBXINT
> >  
> > +struct snd_platform_data {
> > +	char *clk_name;
> > +	u32 tx_dma_offset;
> > +	u32 rx_dma_offset;
> > +	enum dma_event_q eventq_no;	/* event queue number */
> > +	unsigned int codec_fmt;
> > +
> > +	/* McASP specific fields */
> > +	int tdm_slots;
> > +	u8 op_mode;
> > +	u8 num_serializer;
> > +	u8 *serial_dir;
> > +};
> > +
> > +#define INACTIVE_MODE	0
> > +#define TX_MODE		1
> > +#define RX_MODE		2
> > +
> > +#define DAVINCI_MCASP_IIS_MODE	0
> > +#define DAVINCI_MCASP_DIT_MODE	1
> > +
> >  #endif /* __ASM_ARCH_DAVINCI_ASP_H */
> > diff --git a/arch/arm/mach-davinci/include/mach/dm355.h
b/arch/arm/mach-davinci/include/mach/dm355.h
> > index 54903b7..03faaef 100644
> > --- a/arch/arm/mach-davinci/include/mach/dm355.h
> > +++ b/arch/arm/mach-davinci/include/mach/dm355.h
> > @@ -12,11 +12,16 @@
> >  #define __ASM_ARCH_DM355_H
> >  
> >  #include <mach/hardware.h>
> > +#include <mach/asp.h>
> > +
> > +#define ASP1_TX_EVT_EN	1
> > +#define ASP1_RX_EVT_EN	2
> >  
> >  struct spi_board_info;
> >  
> >  void __init dm355_init(void);
> >  void dm355_init_spi0(unsigned chipselect_mask,
> >  		struct spi_board_info *info, unsigned len);
> > +void __init dm355_init_asp1(u32 evt_enable, struct snd_platform_data
*pdata);
> >  
> >  #endif /* __ASM_ARCH_DM355_H */
> > diff --git a/arch/arm/mach-davinci/include/mach/dm644x.h
b/arch/arm/mach-davinci/include/mach/dm644x.h
> > index 15d42b9..8b157ce 100644
> > --- a/arch/arm/mach-davinci/include/mach/dm644x.h
> > +++ b/arch/arm/mach-davinci/include/mach/dm644x.h
> > @@ -25,6 +25,7 @@
> >  #include <linux/platform_device.h>
> >  #include <mach/hardware.h>
> >  #include <mach/emac.h>
> > +#include <mach/asp.h>
> >  
> >  #define DM644X_EMAC_BASE		(0x01C80000)
> >  #define DM644X_EMAC_CNTRL_OFFSET	(0x0000)
> > @@ -34,5 +35,6 @@
> >  #define DM644X_EMAC_CNTRL_RAM_SIZE	(0x2000)
> >  
> >  void __init dm644x_init(void);
> > +void __init dm644x_init_asp(struct snd_platform_data *pdata);
> >  
> >  #endif /* __ASM_ARCH_DM644X_H */
> > diff --git a/arch/arm/mach-davinci/include/mach/dm646x.h
b/arch/arm/mach-davinci/include/mach/dm646x.h
> > index 1fc764c..0585484 100644
> > --- a/arch/arm/mach-davinci/include/mach/dm646x.h
> > +++ b/arch/arm/mach-davinci/include/mach/dm646x.h
> > @@ -13,6 +13,7 @@
> >  
> >  #include <mach/hardware.h>
> >  #include <mach/emac.h>
> > +#include <mach/asp.h>
> >  
> >  #define DM646X_EMAC_BASE		(0x01C80000)
> >  #define DM646X_EMAC_CNTRL_OFFSET	(0x0000)
> > @@ -22,5 +23,7 @@
> >  #define DM646X_EMAC_CNTRL_RAM_SIZE	(0x2000)
> >  
> >  void __init dm646x_init(void);
> > +void __init dm646x_init_mcasp0(struct snd_platform_data *pdata);
> > +void __init dm646x_init_mcasp1(struct snd_platform_data *pdata);
> >  
> >  #endif /* __ASM_ARCH_DM646X_H */
> > -- 
> > 1.5.6
> >
> > _______________________________________________
> > Alsa-devel mailing list
> > Alsa-devel at alsa-project.org
> > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
> 




More information about the Alsa-devel mailing list