Hi again, I've been poking through the soc-core.c and other soc files, and I'm still at a bit of a loss how to add 8 cocdecs on 3 different I2C (virtual) busses onto one card.
Do I set up my 'card' with multiple codecs as multiple dai links?
static struct snd_soc_dai_link puppy_dai[] = { { .name = "puppy", .stream_name = "puppy", .cpu_dai_name = "omap-mcbsp-dai.0", .platform_name = "omap-pcm-audio", .codec_dai_name = "tlv320aic3x-se-hifi", .codec_name = "tlv320aic3x-se-codec.4-0018", .ops = &puppy_ops, }, { .name = "puppy", .stream_name = "puppy", .cpu_dai_name = "omap-mcbsp-dai.0", .platform_name = "omap-pcm-audio", .codec_dai_name = "tlv320aic3x-se-hifi", .codec_name = "tlv320aic3x-se-codec.4-0019", .ops = &puppy_ops, }, ... 6 more codecs ... }
static struct snd_soc_card snd_soc_puppy = { .name = "tlv320aic33-se", .owner = THIS_MODULE, .dai_link = puppy_dai, .num_links = ARRAY_SIZE(puppy_dai),
};
I'm afraid I don't understand how it's supposed to work. How do I get the sound card to understand the multiple codecs? Is the above the right direction, or am I way off?
All the examples of multiple links on one card all seemed to be exlcusive of one another, and ran over different cpu DAIs. I need these all to run on the same CPU DAI but TDMd.
Is each codec supposed to have its own substream, or do they all get aggregated into one 16-channel substream?
Thanks again, -Caleb
On Wed, May 11, 2011 at 11:29 AM, Caleb Crome caleb@crome.org wrote:
Well, that does sound easier than rewriting the whole thing. I'll give it a go at instantiating multiple codecs.
Would this be 'substreams' or is that something else?
Sorry to be ignorant, but I'm a newbie to kernel development (I've successfully brought up GPIOs and the I2C mux on my board, so I at least have some simple stuff under my belt).
Thanks again, -Caleb
On Wed, May 11, 2011 at 10:50 AM, Mark Brown < broonie@opensource.wolfsonmicro.com> wrote:
On Wed, May 11, 2011 at 10:31:15AM -0700, Caleb Crome wrote:
- Simply instantiate multiple TLV320IAC33 codec drivers, as the AIC33
driver is already written.
Yes.
This seems like it won't work because I'd end up with multiple
user-space 'cards', yet I want the card to appear as a single 16-channel sound card. Also, when you start one PCM interface for one codec, they
No, you shouldn't. You'll end up with a single card.
would all start automatically, which I imagine the linux system wouldn't get. Also, the PCM interface needs to be configured differently for
each
codec (the TDM offset must be 0, 16, 32, 48, etc. bits).
The TDM stuff should be configured with the existing TDM API (you may need to implement this in the CODEC driver).