[alsa-devel] Need general idea how to architect driver for multi-codec board
Caleb Crome
caleb at crome.org
Fri May 27 23:36:58 CEST 2011
Mark,
Thanks, for the pointers. I now have a gazillion controls in my
alsamixer :-) The snd_soc_codec_conf works like a charm.
However, I'm still having problems getting the system set up with more than
2 channels. the rx51 and speyside don't quite do the same thing as far as I
can tell: the rx51 is close -- it very nearly brings up the 'b' codec in
the aic34, but I don't see how the TDM is set -- it appears to still be a
stereo configuration.
Do I need multiple snd_soc_dai_links when configuring? In hw_params, I only
seem to get 1 codec dai_link, so I can't set the TDM slots there.
Or are the extra codecs in the daisy chain considered 'aux' devices? I
guess I could set up the tdm slots in each of the snd_soc_aux_dev.init
functions. But that callback init function has a snd_soc_dapm_context a
parameter, which doesn't seem to be the right place for setting tdm slots
and pin directions.
My 'machine_hw_params' function allows for 1 through 16 channels, and my
machine_startup function calls snd_pcm_hw_contraint_minmax(runtime,
SNDRV_PCM_HW_PARAM_CHANNELS, 1, 16) to allow for 16 channels. But still
the only way I can get more than 2 channels from any user program (using
jackd), is to change the tlv320aic3x.c driver to set channels_max to 16,
which I'm pretty sure is not right.
It seems like I might need to do something like this in the hw_params
function:
int channel_map[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
for (codec_dai = 0; codec_dai < 8; codec_dai++) {
snd_soc_dai_set_tdm_slot(codec_dai_list[codec_dai], 0x3<<codec_dai*2,
0x3<<codec_dai*2, 2, 16);
snd_soc_dai_set_channel_map(codec_dai_list[codec_dai], 2,
&(channel_map[codec_dai*2]), 2, &(channel_map[codec_dai*2]));
}
but, I don't see any place where I have access to all 8 codec_dai's.
Any thoughts, suggestions?
Thanks again,
-Caleb
On Thu, May 26, 2011 at 6:27 PM, Mark Brown <
broonie at opensource.wolfsonmicro.com> wrote:
> On Thu, May 26, 2011 at 02:23:03PM -0700, Caleb Crome wrote:
>
> > You previously indicated that I can instantiate multiple tlv320aic33
> > drivers. Can you please give me a clue how to do that? I've been
> staring
> > at this for days, and I still don't really get how it's supposed to be
> done.
>
> With things like this it's always useful to look for other examples of
> whatever it is you're doing - there's systems like speyside and rx51 in
> mainline.
>
>
> fails because there are already controls with those names, like "Right PGA
> > Mixer" etc. The alsa layer doesn't seem to allow multiple registrations
> of
> > the same control. How do I give each instantiation a unique identifier?
>
> Set up a snd_soc_codec_conf for each CODEC and assign a name_prefix to
> it.
>
> > Since the tlv320aic33 has about 80 controls, I'm going to end up with
> over
> > 600 controls in alsamixer.
>
> Yes.
>
More information about the Alsa-devel
mailing list