This looks like the wrong approach. On Thursday 28 May 2009, Chaithrika U S wrote: > --- a/arch/arm/mach-davinci/dm355.c > +++ b/arch/arm/mach-davinci/dm355.c > @@ -278,6 +282,7 @@ static __init void dm355_evm_init(void) > > dm355_init_spi0(BIT(0), dm355_evm_spi_info, > ARRAY_SIZE(dm355_evm_spi_info)); > + dm355_init_asp(&dm355_evm_snd_data); Surely that should be "init_asp1()"? You are hard-wiring an assumption that only ASP1 will ever be used on a DM355, which is unwise. What will happen when a board uses ASP0 instead? What will happen when a board uses ASP0 *and* ASP1? What will happen when a board wants to use ASP1, but not the same way the EVM uses it? > --- a/arch/arm/mach-davinci/dm355.c > +++ b/arch/arm/mach-davinci/dm355.c > @@ -624,6 +625,32 @@ static struct platform_device dm355_edma_device = { > .resource = edma_resources, > }; > > +/* DM335 EVM uses ASP1; line-out is a stereo mini-jack */ Why are you putting EVM-specific assumptions into a file which is intended to be generic for *ALL* boards using the DM355 chip? > +static struct resource dm355_asp_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_asp_device = { > + .name = "davinci-asp", > + .id = -1, > + .num_resources = ARRAY_SIZE(dm355_asp_resources), > + .resource = dm355_asp_resources, > +}; > + > /*----------------------------------------------------------------------*/ > > static struct map_desc dm355_io_desc[] = { > @@ -733,6 +760,16 @@ static struct davinci_soc_info davinci_soc_info_dm355 > = { .sram_len = SZ_32K, > }; > > +void __init dm355_init_asp(struct evm_snd_platform_data *pdata) > +{ This would sort of make sense as a "dm355_init_asp1()" routine, except that you're hard-wiring the platform data to use a data type that's specific to the EVM. Also, hard-wiring the use of both DMA channels ... even though there's no reason a board would not want to use ASP1 in input-only or output-only mode, and use the other DMA channel for something other than ASP1_[RT]X. This is no way to have a generic platform device creation hook; but that's the only kind of hook that belongs in this file. > + /* we don't use ASP1 IRQs, or we'd need to mux them ... */ > + davinci_cfg_reg(DM355_EVT8_ASP1_TX); > + davinci_cfg_reg(DM355_EVT9_ASP1_RX); > + > + dm355_asp_device.dev.platform_data = pdata; > + platform_device_register(&dm355_asp_device); > +} > + > void __init dm355_init(void) > { > davinci_common_init(&davinci_soc_info_dm355); _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel