Failed to register i2c client错误
最近最韦东山的I2C实验,用的是3.4.2内核
# insmod at24cxx_dev.ko出错提示
i2c i2c-0: Failed to register i2c clientat24c08 at 0x50 (-16)
打log跟踪,是i2c_new_device函数中i2c_check_addr_busy后打出来的,发现将地址改为0x60可以正常加载,看来是有人占用了0x50这个地址
make menuconfig发现I2C EEPROMSfrom most vendors是自动勾选的。
Device Drivers--->Miscdevices--->EEPROM support-->
将arch/arm/mach-s3c24xx的Kconfig中将select EEPROM_AT24注释掉即可。
重新make menuconfig看一下:
发现还是不行0x50地址还是被占用,发现arch/arm/mach-s3c24xx/mach-mini2440.c
static struct i2c_board_infomini2440_i2c_devs[] __initdata = {
{
I2C_BOARD_INFO("24c08", 0x50),
.platform_data = &at24c08,
},
};
原来是它使用这个地址。看来是因为我用的机器ID是7cf所以会出这个问题machid=7cf。
在函数mini2440_init中
将此行注释掉i2c_register_board_info(0,mini2440_i2c_devs,ARRAY_SIZE(mini2440_i2c_devs));
问题解决。