未调用Linux I2C设备驱动程序探测功能

时间:2015-01-12 12:37:36

标签: linux linux-device-driver embedded-linux i2c

我正在尝试连接具有I2C通信的ADI公司ADV7182视频编码器芯片,以配置芯片并通过CSI-2控制MIPI视频数据。

问题是除非我在__init函数中手动创建新的I2C设备,否则不会调用驱动程序的探测功能。像这样:

static struct i2c_board_info i2c_board_info_adv[] = {
{  
     I2C_BOARD_INFO("adv7281-m", 0x21)
}};

static int __init adv7180_initialize (void) {

struct i2c_client *client;
struct i2c_adapter *adapter;
int i2c_bus_number = 3;

int ret = i2c_register_board_info(i2c_bus_number, i2c_board_info_adv, ARRAY_SIZE(i2c_board_info_adv));
if (ret) {
    printk("ADV7180 i2c_register_board_info failed. Result %d\n", ret);
    return -EINVAL;
}

ret = i2c_add_driver(&adv7180_driver);
if (ret) {
    printk("ADV7180 i2c_add_driver failed. Result %d\n", ret);
    return -EINVAL;
}

adapter = i2c_get_adapter(i2c_bus_number);
if (!adapter) {
    printk("ADV7180 i2c_get_adapter failed. Result %d\n", ret);
    return -EINVAL;
}

client = i2c_new_device(adapter, &i2c_board_info_adv[0]);
if (!client) {
    printk("ADV7180 i2c_new_device failed. Result %d\n", ret);
    return -EINVAL;
}

return 0; }

在ADV7xxx设备的原始驱动程序中,只在init函数中调用了i2c_add_driver。 https://github.com/analogdevicesinc/linux/tree/adv7280遗憾的是,我不能直接使用该驱动程序,因为它有不同的内核版本(因为它使用了后向不兼容的Linux版本),内核升级似乎对我使用的设备(NanoPC)无效。

我是linux驱动程序的新手,所以我觉得我对这个平台并不了解。有什么帮助吗?

0 个答案:

没有答案