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 파일에 설정됩니다.범죄문제를 해결하세요.

관련 정보