[alsa-devel] How to use soc API without codec driver
Hi,
I need to receive and transmit PCM data through SSC port of a sam9261 to a device which doesn't have any kind of I/O controls (neither i2c nor spi). So, I wonder how to deal with the codec driver side. Someone could explain me what are the minimum requirements to write a Asoc driver of this kind?
On Tue, Dec 08, 2009 at 03:46:53PM +0100, Marc Garnier wrote:
I need to receive and transmit PCM data through SSC port of a sam9261 to a device which doesn't have any kind of I/O controls (neither i2c nor spi). So, I wonder how to deal with the codec driver side. Someone could explain me what are the minimum requirements to write a Asoc driver of this kind?
There's a couple of drivers for such CODECs in the tree already - have a look at the wm8727 driver for one example. You need to register at least a DAI with whatever the capabilities of the hardware are and can leave all the operations blank.
You mean I just have to use snd_soc_register_dai()? Things like soc_init_card() and snd_soc_new_pcms() are not mandatory? So, i think code like this one could be ok :
#define Q2686_RATES (SNDRV_PCM_RATE_8000_192000)
#define Q2686_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\ SNDRV_PCM_FMTBIT_S24_LE)
static struct snd_soc_dai_ops q2686_dai_ops = { };
struct snd_soc_dai q2686_dai = { .name = "Q2686", .playback = { .stream_name = "Playback", .channels_min = 2, .channels_max = 2, .rates = Q2686_RATES, .formats = Q2686_FORMATS, }, .capture = { .stream_name = "Capture", .channels_min = 2, .channels_max = 2, .rates = Q2686_RATES, .formats = Q2686_FORMATS,}, .ops = &wm8728_dai_ops, }; EXPORT_SYMBOL_GPL(q2686_dai);
static int __init q2686_modinit(void) { return snd_soc_register_dai(&q2686_dai); } module_init(q2686_modinit);
static void __exit q2686_exit(void) { snd_soc_unregister_dai(&q2686_dai); } module_exit(q2686_exit);
MODULE_DESCRIPTION("ASoC Q2686 driver"); MODULE_AUTHOR("Marc Garnier"); MODULE_LICENSE("GPL");
Mark Brown wrote:
On Tue, Dec 08, 2009 at 03:46:53PM +0100, Marc Garnier wrote:
I need to receive and transmit PCM data through SSC port of a sam9261 to a device which doesn't have any kind of I/O controls (neither i2c nor spi). So, I wonder how to deal with the codec driver side. Someone could explain me what are the minimum requirements to write a Asoc driver of this kind?
There's a couple of drivers for such CODECs in the tree already - have a look at the wm8727 driver for one example. You need to register at least a DAI with whatever the capabilities of the hardware are and can leave all the operations blank.
On Wed, Dec 09, 2009 at 07:39:19AM +0100, Marc Garnier wrote:
You mean I just have to use snd_soc_register_dai()? Things like soc_init_card() and snd_soc_new_pcms() are not mandatory?
init_card() has been removed now, but new_pcms() is still required - like I say, look at one of the existing drivers like the spdif transciever driver for examples of drivers which do what you're trying to do here.
static int __init q2686_modinit(void) { return snd_soc_register_dai(&q2686_dai); } module_init(q2686_modinit);
This should be done from a platform device, not from module init.
participants (2)
-
Marc Garnier
-
Mark Brown