Linux下的i2c驱动

chenchengnet 2009-12-21 04:32:19
我使用 pca9564芯片挂在地址数据线上实现i2c功能。目前正在写驱动程序,使用到了内核提供的 i2c-pca-platform。

我看到资料说,在注册驱动之前必须实例化一个设备。使用类似 i2c_register_board_info(), platform_add_devices()的函数。


我应该在驱动的哪部份写这些函数呢? 这些函数又是如何与i2c-pca-platform中的函数关联呢?或者说我在编译驱动的时候需要把添加设备的这些函数也编译进去么??

我第一次写驱动程序,大虾们帮帮忙啊,先谢谢了。
...全文
220 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
memu512 2010-04-11
  • 打赏
  • 举报
回复
学习中
yangb2014# 2010-01-01
  • 打赏
  • 举报
回复
去看ldd。。。
niehaidie 2010-01-01
  • 打赏
  • 举报
回复
很好很喜欢
fengshl 2009-12-31
  • 打赏
  • 举报
回复
内核 i2c分 控制器, 协议控制 层次吧, 研究下吧,挺有意思的
yinfuyong 2009-12-31
  • 打赏
  • 举报
回复
学习
hallowwar 2009-12-30
  • 打赏
  • 举报
回复
这种驱动函数里面有没有直接对硬件进行操作了?内核里面的平台函数是否如windows里面的API封装一样,用户还是不需要关注硬件动作呢?
joyself 2009-12-29
  • 打赏
  • 举报
回复
忘了说了,在实现i2c controller驱动的时候,主要就是实现i2c bus的驱动,
按照惯例都放在drivers/i2c/busses/目录下,由于本身是把它当作一个platform driver/device来实现的,所以就有了platform_add_devices()(当然platform_device_register亦可)的说法。这个是linux的platform这类虚拟总线的设备模型。

在实现i2c device驱动的时候,通过填充i2c_driver并调用i2c_add_driver即可--不需要platform_add_devices
joyself 2009-12-29
  • 打赏
  • 举报
回复
lz说得比较含糊,没说清楚是i2c controll的驱动,还是i2c device的驱动。

我估计你想说i2c device的驱动

在i2c_register_board_info里完成两个**重要**功能
1)设置.type, 最终会在i2c_new_device里会被设成client->name
由i2c_add_adapter/i2c_add_numbered_adapter->i2c_register_adapter->i2c_scan_static_board_info->
i2c_new_device调用。
2) 设置slave的地址

对于1)
在device的驱动里必须实现 i2c_device_id, 不然i2c_driver的probe就会失败,因为i2c是通过
判断i2c_device_id.name和client->name(即i2c_board_info.type)来判断的。
看drivers/i2c/i2c-core.c里的i2c_device_probe函数便知。

对于2)
在进行i2c命令/数据传输的时候就会用到了。


另外可以参考:
Documentation/i2c/writing-clients
denniswuu 2009-12-26
  • 打赏
  • 举报
回复
内核里面i2c-pca-algo里面应该是有关于9564的相关驱动吧
先去看看吧
wxdcxp 2009-12-22
  • 打赏
  • 举报
回复
查看内核自带的
hefuhua 2009-12-22
  • 打赏
  • 举报
回复
先再内核源码里找个同类的驱动看懂,再修改个i2c地址,一般就可以了

4,436

社区成员

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

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