Audio codec device tree entries
Timur Tabi
timur at freescale.com
Fri Oct 26 02:14:22 EST 2007
Jon Smirl wrote:
> This could work. The generic codec is a alsa soc_device_driver, not a
> of_device_driver. The codec node could instantiate the fabric as a
> of_device_driver which could then instantiate the soc_device_driver
> for the generic codec.
>
> The generic codecs are supposed to work cross platform so they can't
> include code that munges the of device tree.
My understanding of ASoC is that the fabric driver is supposed to be OF-aware,
and the codec and other drivers are not. The other drivers have ASoC entry
points that the fabric driver calls to provide information.
Example:
Fabric driver:
static int mpc8610hpcd_startup(struct snd_pcm_substream *substream)
{
...
if (codec_dai->dai_ops.set_fmt) {
ret = codec_dai->dai_ops.set_fmt(codec_dai, machine_data->dai_format);
if (ret < 0) {
printk(KERN_ERR "mpc8610-hpcd: could not set codec "
"driver audio format (ret=%i)\n", ret);
return ret;
}
}
codec driver:
static int cs4270_set_dai_fmt(struct snd_soc_codec_dai *codec_dai,
unsigned int format)
{
...
switch (format & SND_SOC_DAIFMT_FORMAT_MASK) {
case SND_SOC_DAIFMT_I2S:
case SND_SOC_DAIFMT_LEFT_J:
cs4270->mode = format & SND_SOC_DAIFMT_FORMAT_MASK;
break;
In my device tree, the I2S node specifies the interface (this node layout is
what I came up with 6 months ago when I started working on this.)
ssi at 16000 {
compatible = "fsl,ssi";
reg = <16000 100>;
interrupt-parent = <&mpic>;
interrupts = <3e 2>;
/* This is probably not the right way to tell the
SSI driver how to configure the interface */
fsl,mode = "i2s-slave";
codec {
compatible = "cs4270";
};
};
The fabric driver reads "i2s-slave" and converts that to SND_SOC_DAIFMT_I2S.
More information about the Linuxppc-dev
mailing list