i2cバスをsocオーディオコーデックに設定する方法

i2cバスをsocオーディオコーデックに設定する方法

私はcs4245デバイス用のオーディオコーデックドライバを開発しています。 i2cによって制御されます。私は2つのハードウェア(開発ボード)を持っています。1つはコーデックがi2c-1に接続され、もう1つがi2c-2に接続されています。最初は機能しますが、2番目は機能しません。

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 ファイルに設定されます。犯罪問題を解決してください。

おすすめ記事