[alsa-devel] Adding an ASoC codec, ads1178 in TDM mode without a control interface
Marty Christian (cmarty@hsr.ch)
cmarty at hsr.ch
Fri Jul 27 10:40:44 CEST 2012
Hi
I'm running an Angstrom 2012.5 (3.2.18) on a Beaglebone. A daughterboard with an ads1278 ADC on it is connected to mcasp0, which I would like to use with alsa in TDM mode. This device does not have an I2C/SPI control interface. It is very similar to the ads1178 device, that's why I try to get this one running.
I assume that it is probably the best to use the davinci-pcm-audio platform driver.
I modified following:
Index: git/arch/arm/mach-omap2/devices.c
===================================================================
--- git.orig/arch/arm/mach-omap2/devices.c 2012-07-20 16:22:26.324602816 +0200
+++ git/arch/arm/mach-omap2/devices.c 2012-07-26 13:20:17.124821103 +0200
@@ -231,10 +231,16 @@
.id = -1,
};
+struct platform_device ads117x_codec= {
+ .name = "ads117x-codec",
+ .id = -1,
+};
+
static void am33xx_init_pcm(void)
{
- printk("cape: pcm register");
+ printk("Multisensor cape: pcm register");
platform_device_register(&am33xx_pcm_device);
+ platform_device_register(&ads117x_codec);
}
#else
After this changes, I can find codec and dai in /sys/kernel/debug/asoc:
root at beaglebone:/sys/kernel/debug/asoc# cat codecs
tlv320aic3x-codec.3-001b
ads117x-codec
root at beaglebone:/sys/kernel/debug/asoc# cat dais
davinci-mcasp.1
davinci-mcasp.0
tlv320aic3x-hifi
ads117x-hifi
root at beaglebone:/sys/kernel/debug/asoc# cat platforms
davinci-pcm-audio
snd-soc-dummy
root at beaglebone:/sys/kernel/debug/asoc#
If I now try to add this to snd_soc_dai_link, the kernel panics while booting:
{
.name = "ADS117X",
.stream_name = "ADS117X",
.cpu_dai_name = "davinci-mcasp.0",
.codec_dai_name = "ads117x-hifi",
.codec_name = "ads117x-codec",
.platform_name = "davinci-pcm-audio",
.init = evm_adsadc_init,
.ops = &evm_adc_ops,
}
Does anybody have an idea how it comes to this?
Another thing I don't understand is, why do we register a platform in ads117.c?
static int __init ads117x_init(void)
{
return platform_driver_register(&ads117x_codec_driver);
}
The old version used to register a snd_soc_dai_driver:
static int __init ads117x_modinit(void)
{
return snd_soc_register_dai(&ads117x_dai);
}
Thanks in advance!
hitsch
More information about the Alsa-devel
mailing list