ccrome
unread,May 19, 2011, 6:11:11 PM5/19/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Sign in to report message
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to Beagle Board
Hi All,
I wonder if anybody has any experience with building a drvier for a
card with multiple codecs in TDM mode.
I have built a board that uses the beagleboard expansion connector,
using MCBSP3. There are a total of 9 different I2C devices on the
board -- a microcontroller, and 8 TLV320AIC33 codecs.
The Codecs and the mcbsp must be configured in TDM mode, and I want
all 8 codecs to show up as a single 16 channel sound card.
There is already a driver for a single TLV320AIC33 driver (in sound/
soc/codecs/tlv320aic3x.c, and I have one of those going.
My question is: how do i get all 8 codecs to show up in one sound
card?
Do I instantiate 8 AIC33s? I tried that, but I get an error when
registering the SOC_DOUBLE_R_TLV.... and friends -- the second time
around, they fail because the mixer controls are already inserted with
those names.
Does anybody know how this is supposed to be done with multiple codecs
per board?
There seem to be different concepts that I'm not clear on:
substreams, subdevices, etc.
I tried something like this:
static struct snd_soc_dai_link puppy_dai[] =
{
{
.name = "tlv320aic33-se-a",
.stream_name = "tlv320aic33-se",
.cpu_dai_name = "omap-mcbsp-dai.2",
.platform_name = "omap-pcm-audio",
.codec_dai_name = "tlv320aic3x-se-hifi",
.codec_name = "tlv320aic3x-se-codec.2-0018",
.ops = &puppy_ops,
.symmetric_rates = 1, // I think this requires send
and receive be the same
rate.
.init = puppy_dai_link_init,
},
{
.name = "tlv320aic33-se-b",
.stream_name = "tlv320aic33-se",
.cpu_dai_name = "omap-mcbsp-dai.2",
.platform_name = "omap-pcm-audio",
.codec_dai_name = "tlv320aic3x-se-hifi",
.codec_name = "tlv320aic3x-se-codec.2-0019",
.ops = &puppy_ops,
.symmetric_rates = 1, // I think this requires send
and receive be the same
rate.
.init = puppy_dai_link_init,
},
};
static struct snd_soc_card snd_soc_puppy = {
.name = "tlv320aic33-se",
.owner = THIS_MODULE,
.dai_link = puppy_dai,
.num_links = ARRAY_SIZE(puppy_dai),
};
and then this:
platform_set_drvdata(puppy_snd_device, &snd_soc_puppy);
But it fails when trying to instantiate the 2nd device.
Any thoughts?
Thanks,
-Caleb