|
@@ -20,7 +20,11 @@
|
|
|
#include <sound/soc-dapm.h>
|
|
|
|
|
|
#include <asm/dma.h>
|
|
|
-#include <mach/hardware.h>
|
|
|
+#include <asm/mach-types.h>
|
|
|
+
|
|
|
+#include <mach/asp.h>
|
|
|
+#include <mach/edma.h>
|
|
|
+#include <mach/mux.h>
|
|
|
|
|
|
#include "../codecs/tlv320aic3x.h"
|
|
|
#include "davinci-pcm.h"
|
|
@@ -150,7 +154,7 @@ static struct snd_soc_card snd_soc_card_evm = {
|
|
|
|
|
|
/* evm audio private data */
|
|
|
static struct aic3x_setup_data evm_aic3x_setup = {
|
|
|
- .i2c_bus = 0,
|
|
|
+ .i2c_bus = 1,
|
|
|
.i2c_address = 0x1b,
|
|
|
};
|
|
|
|
|
@@ -161,36 +165,73 @@ static struct snd_soc_device evm_snd_devdata = {
|
|
|
.codec_data = &evm_aic3x_setup,
|
|
|
};
|
|
|
|
|
|
+/* DM6446 EVM uses ASP0; line-out is a pair of RCA jacks */
|
|
|
static struct resource evm_snd_resources[] = {
|
|
|
{
|
|
|
- .start = DAVINCI_MCBSP_BASE,
|
|
|
- .end = DAVINCI_MCBSP_BASE + SZ_8K - 1,
|
|
|
+ .start = DAVINCI_ASP0_BASE,
|
|
|
+ .end = DAVINCI_ASP0_BASE + SZ_8K - 1,
|
|
|
.flags = IORESOURCE_MEM,
|
|
|
},
|
|
|
};
|
|
|
|
|
|
static struct evm_snd_platform_data evm_snd_data = {
|
|
|
- .tx_dma_ch = DM644X_DMACH_MCBSP_TX,
|
|
|
- .rx_dma_ch = DM644X_DMACH_MCBSP_RX,
|
|
|
+ .tx_dma_ch = DAVINCI_DMA_ASP0_TX,
|
|
|
+ .rx_dma_ch = DAVINCI_DMA_ASP0_RX,
|
|
|
+};
|
|
|
+
|
|
|
+/* DM335 EVM uses ASP1; line-out is a stereo mini-jack */
|
|
|
+static struct resource dm335evm_snd_resources[] = {
|
|
|
+ {
|
|
|
+ .start = DAVINCI_ASP1_BASE,
|
|
|
+ .end = DAVINCI_ASP1_BASE + SZ_8K - 1,
|
|
|
+ .flags = IORESOURCE_MEM,
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct evm_snd_platform_data dm335evm_snd_data = {
|
|
|
+ .tx_dma_ch = DAVINCI_DMA_ASP1_TX,
|
|
|
+ .rx_dma_ch = DAVINCI_DMA_ASP1_RX,
|
|
|
};
|
|
|
|
|
|
static struct platform_device *evm_snd_device;
|
|
|
|
|
|
static int __init evm_init(void)
|
|
|
{
|
|
|
+ struct resource *resources;
|
|
|
+ unsigned num_resources;
|
|
|
+ struct evm_snd_platform_data *data;
|
|
|
+ int index;
|
|
|
int ret;
|
|
|
|
|
|
- evm_snd_device = platform_device_alloc("soc-audio", 0);
|
|
|
+ if (machine_is_davinci_evm()) {
|
|
|
+ davinci_cfg_reg(DM644X_MCBSP);
|
|
|
+
|
|
|
+ resources = evm_snd_resources;
|
|
|
+ num_resources = ARRAY_SIZE(evm_snd_resources);
|
|
|
+ data = &evm_snd_data;
|
|
|
+ index = 0;
|
|
|
+ } else if (machine_is_davinci_dm355_evm()) {
|
|
|
+ /* 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);
|
|
|
+
|
|
|
+ resources = dm335evm_snd_resources;
|
|
|
+ num_resources = ARRAY_SIZE(dm335evm_snd_resources);
|
|
|
+ data = &dm335evm_snd_data;
|
|
|
+ index = 1;
|
|
|
+ } else
|
|
|
+ return -EINVAL;
|
|
|
+
|
|
|
+ evm_snd_device = platform_device_alloc("soc-audio", index);
|
|
|
if (!evm_snd_device)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
platform_set_drvdata(evm_snd_device, &evm_snd_devdata);
|
|
|
evm_snd_devdata.dev = &evm_snd_device->dev;
|
|
|
- platform_device_add_data(evm_snd_device, &evm_snd_data,
|
|
|
- sizeof(evm_snd_data));
|
|
|
+ platform_device_add_data(evm_snd_device, data, sizeof(*data));
|
|
|
|
|
|
- ret = platform_device_add_resources(evm_snd_device, evm_snd_resources,
|
|
|
- ARRAY_SIZE(evm_snd_resources));
|
|
|
+ ret = platform_device_add_resources(evm_snd_device, resources,
|
|
|
+ num_resources);
|
|
|
if (ret) {
|
|
|
platform_device_put(evm_snd_device);
|
|
|
return ret;
|