linux 下的I2C驱动如何管理多个相同的设备,设备地址不同

a987860319 2014-07-30 03:05:37
使用linux提供的I2C的框架,通过id来匹配设备。
如何管理多个相同的设备,设备地址不同

static int pca9548_probe(struct i2c_client *client, const struct i2c_device_id *id)
{
int err;

if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C))
{
err = -EPFNOSUPPORT;
goto err_out;
}

err = sysfs_create_group(&client->dev.kobj, &attr_group);
if (err)
kobject_put(&client->dev.kobj);

err_out:
return err;
}

static int pca9548_remove(struct i2c_client *client)
{
sysfs_create_group(&client->dev.kobj, &attr_group);
return 0;
}

static const struct i2c_device_id pca9548_id[] = {
{"pca9548", 1},
{}
};
MODULE_DEVICE_TABLE(i2c, pca9548_id);

static struct i2c_driver pca9548_driver = {
.driver =
{
.name = "pca9548",
.owner = THIS_MODULE,
},
.probe = pca9548_probe,
.remove = pca9548_remove,
.id_table = pca9548_id,
};

static int __init pca9548_init(void)
{
return i2c_add_driver(&pca9548_driver);
}
module_init(pca9548_init);

static void __exit pca9548_exit(void)
{
i2c_del_driver(&pca9548_driver);
}
module_exit(pca9548_exit)
...全文
2388 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
车与我随 2016-01-15
  • 打赏
  • 举报
回复
描述的太到位了,就是这个问题。。现在正在试
曹大夯 2014-07-31
  • 打赏
  • 举报
回复
没有具体研究过I2C设备的ID是如何管理的。 试着这么理解: 你的驱动需要申明支持的设备ID列表,比如更新pca9548_id。该列表包含该驱动程序能够支持的I2C设备。

static const struct i2c_device_id pca9548_id[] = {
    {"pca9548", 1},
    {"xxxx-newID", 1}
    {}
};
MODULE_DEVICE_TABLE(i2c, pca9548_id);
每个设备加入系统的时候都应该会调用一次probe函数,由probe函数来确定是否支持该设备。
a987860319 2014-07-31
  • 打赏
  • 举报
回复
引用 3 楼 Huntercao 的回复:
驱动程序可能不需要做太多工作。 三个设备接入系统之后,I2C总线会创建3个不同的Node,然后,你的驱动程序就会被加载。最后结果是,每个设备都有自己的驱动程序实例,互相之间不会有干扰和依赖。
是不是这个意思?如果我在i2c_device_id 中位3个相同的设备去不同的名字,在板级配置文件中也写好这3个名字,然后在加载驱动的时候,3个名字都匹配了,是不是会调用三次probe函数,每次都是不同的实列,就是每次传递下来的client都不一样?
曹大夯 2014-07-31
  • 打赏
  • 举报
回复
驱动程序可能不需要做太多工作。 三个设备接入系统之后,I2C总线会创建3个不同的Node,然后,你的驱动程序就会被加载。最后结果是,每个设备都有自己的驱动程序实例,互相之间不会有干扰和依赖。
a987860319 2014-07-30
  • 打赏
  • 举报
回复
引用 1 楼 kangear 的回复:
管理多个设备?这个完全就是i2c协议定义中的。从设备是发了自己的地址了才会回信息的,这个就好比班上老师点名回答问题一样样的。本来就可以管理了的。
我的意思是,怎么让这一个驱动程序,管理三个设备。
袁保康 2014-07-30
  • 打赏
  • 举报
回复
管理多个设备?这个完全就是i2c协议定义中的。从设备是发了自己的地址了才会回信息的,这个就好比班上老师点名回答问题一样样的。本来就可以管理了的。

21,597

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧