私のx86_64ボードには、MFDデバイスからi2cバスが出ています。このi2cバスにはデバイスがあります。私はこれらのデバイスをi2cdetectプログラムを使って検出することができます。x86_64にi2cクライアントデバイスを追加する
# i2cdetect -y 0
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- 4c -- -- --
50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
私は、コードの下に与えられたのようにi2c_board_info書いてみましたが、それでも、カーネルが自動的にこれらのデバイスを検出することができない、自動的にこれらのデバイスを検出するために、カーネルが必要なので。
#include <linux/init.h>
#include <linux/i2c.h>
#define BUS_NUMBER 0
static struct __init i2c_board_info tst_i2c0_board_info[] = {
{
I2C_BOARD_INFO("ltc2990", 0x4c),
},
{
I2C_BOARD_INFO("24c128", 0x57),
},
};
static int tst_i2c_board_setup(void)
{
int ret=-1;
ret = i2c_register_board_info(BUS_NUMBER, tst_i2c0_board_info, ARRAY_SIZE(tst_i2c0_board_info));
return ret;
}
device_initcall(tst_i2c_board_setup);
どのように私はこれを解決できますか? Documentation/i2c/instantiating-devicesを通過した後
I2Cバス0の登録後にtst_i2c_board_setup()が呼び出されます – Ash
@Ash私は両方のシナリオ、つまりバス0の登録前と後の呼び出しをテストしました。 device_initcallをarch_initcallに変更します。それは助けません – rk1825
あなたはそれのためにACPIを使用する必要があります。私は休暇後の例でこれに答えるでしょう、元のアイデアを得るためにGithubの* meta-acpi *プロジェクトのgoogleを使ってください。 – 0andriy