i2c设备加载驱动后没有执行probe

qq69696698 2012-08-05 07:03:10
向大家请教下,
一个i2c设备执行i2c_add_driver()后返回值是0,但是却没有调用相应的probe函数,可能是什么原因导致的呢?
...全文
1413 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq69696698 2012-08-13
  • 打赏
  • 举报
回复
我的问题已经解决了,是总线上该设备的信息不全,谢谢大家!
Wenxy1 2012-08-09
  • 打赏
  • 举报
回复
把从设备的地址等信息加入到总线控制器数组里。

例如:

static struct i2c_board_info i2c_devs0[] __initdata = {
{ I2C_BOARD_INFO("24c08", 0x50), },
{ I2C_BOARD_INFO("ov965x", 0x30), },
};

flyfishbones 2012-08-07
  • 打赏
  • 举报
回复
ls说的对,在你的i2c驱动程序注册到系统的时候,系统会对每一个注册的i2c_client调用i2c总线的match函数,match函数通过id_table來判断这个驱动是否支持这个设备,如果支持则会调用i2c_drvier的probe函数,当然如果你没有注册i2c_client或者id_table写的不对,就不会调用probe函数。
#Page# 2012-08-07
  • 打赏
  • 举报
回复
我也遇到这个问题了,看的有点头晕。
id_table,driver都有。

1、在同一个module_init()里先
i2c_register_board_info()再调用i2c_add_driver()的话,probe()不执行。

2、在平台文件里调用i2c_register_board_info(),然后module_init改为late_initcall就可以probe()。

是不是哪里漏了?
zhangzhaozaki 2012-08-06
  • 打赏
  • 举报
回复
可能原理:
1.没有定义i2c device.
2.没有i2c host驱动.

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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