Hi,
I was testing Audio with 2.6.37 on DA850 from Kevin Hilman Linux tree at [1] and found that audio is broken. Below patch fixes the issue.
--- From: Rajashekhara, Sudhakar sudhakar.raj@ti.com
davinci: fixes for audio on da850/omap-l138/am18x
On DA850/OMAP-L138/AM18x, AIC3x codec is at 0x18 slave address. But in sound/soc/davinci/davinci-evm.c file, "struct snd_soc_dai_link" has the wrong AIC3x codec slave address. This patch fixes this issue.
Also, this patch registers the platform device for davinci-pcm-audio.
Signed-off-by: Rajashekhara, Sudhakar sudhakar.raj@ti.com --- arch/arm/mach-davinci/devices-da8xx.c | 12 ++++++++++++ sound/soc/davinci/davinci-evm.c | 2 +- 2 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/arch/arm/mach-davinci/devices-da8xx.c b/arch/arm/mach-davinci/devices-da8xx.c index 9eec630..17c0dbc 100644 --- a/arch/arm/mach-davinci/devices-da8xx.c +++ b/arch/arm/mach-davinci/devices-da8xx.c @@ -473,6 +473,11 @@ static struct resource da850_mcasp_resources[] = { }, };
+struct platform_device davinci_pcm_device = { + .name = "davinci-pcm-audio", + .id = -1, +}; + static struct platform_device da850_mcasp_device = { .name = "davinci-mcasp", .id = 0, @@ -480,8 +485,15 @@ static struct platform_device da850_mcasp_device = { .resource = da850_mcasp_resources, };
+static void davinci_init_pcm(void) +{ + platform_device_register(&davinci_pcm_device); +} + void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata) { + davinci_init_pcm(); + /* DA830/OMAP-L137 has 3 instances of McASP */ if (cpu_is_davinci_da830() && id == 1) { da830_mcasp1_device.dev.platform_data = pdata; diff --git a/sound/soc/davinci/davinci-evm.c b/sound/soc/davinci/davinci-evm.c index bc9e6b0..07db881 100644 --- a/sound/soc/davinci/davinci-evm.c +++ b/sound/soc/davinci/davinci-evm.c @@ -224,7 +224,7 @@ static struct snd_soc_dai_link da8xx_evm_dai = { .stream_name = "AIC3X", .cpu_dai_name= "davinci-mcasp.0", .codec_dai_name = "tlv320aic3x-hifi", - .codec_name = "tlv320aic3x-codec.0-001a", + .codec_name = "tlv320aic3x-codec.1-0018", .platform_name = "davinci-pcm-audio", .init = evm_aic3x_init, .ops = &evm_ops, ---
Also, I found that either CONFIG_REGULATOR should not be defined or if CONFIG_REGULATOR is defined then CONFIG_REGULATOR_DUMMY should also be defined. Without this menuconfig fix, Soundcard does not get detected.
With the above fixes, arecord and aplay does not work for the first time. Couple of times I get the below error:
root@da850-omapl138-evm:~# arecord -f dat | aplay -f dat arecord: main:608: audio open error: Invalid argument aplay: playback:2297: read error root@da850-omapl138-evm:~# arecord -f dat | aplay -f dat aplay: main:608: audio open error: Invalid argument Recording WAVE 'stdin' : Signed 16 bit Little Endian, Rate 48000 Hz, Stereo
Third time arecord and aplay work normally.
Has anyone seen such issues on DA850 or any other platform?
I am currently debugging this issue. I'll submit the above patch to community once the issue of fixed.
[1] http://git.kernel.org/?p=linux/kernel/git/khilman/linux-davinci.git;a=summar...
Regards, Sudhakar