基于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总线驱动框架详解















