如何将 i2c 总线设置为 soc 音频编解码器

如何将 i2c 总线设置为 soc 音频编解码器

我正在开发 cs4245 设备的音频编解码器驱动程序。它是由 i2c 控制的。我有 2 个硬件(开发板),其中一个的编解码器连接到 i2c-1,另一个连接到 i2c-2。第一个有效,但第二个无效。

我已经在第二块板上测试了与编解码器的通信(使用 i2cdetect、i2cget),并且它正在工作。它通信并接收芯片ID。

查看代码,我可以找到用于设置总线通信的 i2c 总线的定义:

static struct snd_soc_dai_link mod_duo_dai =
{
    .name = "MOD-DUO-I2S",
    .stream_name = "MOD-DUO-SUNXI-I2S",
    .cpu_dai_name = "sunxi-i2s.0",
    .codec_dai_name = "cs4245-dai",
    .platform_name = "sunxi-i2s-pcm-audio.0",
    .codec_name = "cs4245-codec.1-004c", // EDITED
    .ops = &mod_duo_ops,
    .init = &mod_duo_dai_link_init,
};

因此,我编辑了突出显示的行,"cs4245-codec.2-004c"但驱动程序仍在寻找 i2c-1。内核打印如下:

bus: 'i2c': really_probe: probing driver cs4245-codec with device 1-004c
[i2c_device_probe] client name: cs4245, adapter name: sunxi-i2c.1, adapter nr: 1

另外,我在 soc-core.c 中的函数 snd_soc_instantiate_card 中插入了一个打印内容,以确保它得到我的更改:

snd_soc_instantiate_card: cs4245-codec.2-004c

后来,内核到达编解码器探测函数,它显示:

[   11.907394] [CS4245]Failed to read i2c at addr 0x4C.
[   11.919643] cs4245-codec: probe of 1-004c failed with error -70

编辑的行是否足以更改 i2c 总线?

该代码可在以下位置获取:https://github.com/moddevices/linux-sunxi/blob/mod-duo/sound/soc/sunxi/mod-duo.c

我也尝试过更改评论中描述的以下行:

static const struct i2c_device_id cs4245_id[] = {
    {"cs4245", 1}, // changed to {"cs4245", 2}
    {}
};

也不起作用。这段代码存在于编解码器驱动程序中:https://github.com/moddevices/linux-sunxi/blob/mod-duo/sound/soc/codecs/cs4245.c

答案1

i2c 总线选项在 arch/arm/plat-sunxi/devices.c 文件中设置,如下犯罪修复它。

相关内容