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