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.)

                [EMAIL PROTECTED] {
                        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.

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to