基于linux-3.14.16
一、注册I2C总线

 
 以上代码即完成了i2c总线的注册,并且添加了一个i2c驱动dummy_driver
 
 
二、注册适配器
1、平台总线匹配
设备树有i2c1设备
 
 平台总线匹配后执行probe
 

2、执行probe
获取中断号
 
 获取地址资源并映射
 
 填充i2c_adapter,
 
 获取时钟,并使能
 
 
 请求中断
 
 设置总线速率
 
 注册i2c总线
 
 总结:对于每款芯片而言,每个i2c控制器都将会抽象成一个适配器(i2c_adapter)注册成i2c总线设备。
3、注册适配器总线i2c_add_numbered_adapter
i2c_add_numbered_adapter是i2c core的接口,用于注册一个i2c适配器
 最终调用i2c_register_adapter注册
 
看看i2c_register_adapter里面干了什么
 设置适配名称,设置bus为之前注册的i2c总线
 调device_register注册,可以看到,适配器是作为一个i2c设备
 
 遍历该i2c下所有的设备,添加到总线(of_i2c_register_devices)
 
 看有没有匹配的i2c总线驱动跟设备匹配
 
bus_for_each_drv????
4、看如何添加i2c设备of_i2c_register_devices


 
 
 看i2c_new_device干了什么
 
 
 将i2c_borad_info转成i2c_client后最终注册为一个i2c设备,可知i2c_borad_info只是一个临时过渡作用
 
 
 至此完成了i2c控制器以及其下面所挂的设备的i2c设备添加,这里用到了很多接口,都是在i2c core中定义的。
三、i2c设备驱动
在设备树中,i2c3下面有一个ts设备
 
 找到匹配的i2c设备驱动
 
1、注册i2c驱动i2c_register_driver

 
 
2、probe
博客园:I2C总线驱动框架详解
















