Linux PowerPC I2C驱动 之 I2C Adapter层的注册过程
Linux PowerPC I2C驱动 之 I2C Adapter层的注册过程
I2c的adapter层驱动,首先是其probe函数,adapter的结构体如下:
上面的结构体中其中algo实现i2c设备的读写操作函数
对于i2c_algorithm结构体,其中的functionality用来说明该算法所支持的i2c模式(有I2C_FUNC_I2C、I2C_FUNC_10BIT_ADDR、I2C_FUNC_SMBUS_BYTE、
I2C_FUNC_SMBUS_BYTE_DATA、I2C_FUNC_SMBUS_WORD_DATA等模式,具体看i2c.h中的定义)
对于master_xfer是i2c的读写函数,主要是根据i2c的时序图实现i2c的读出与写入操作,而smbus_xfer则用来实现smbus的读写函数,有些adapter的algo只实现了i2c的读写函数,当支持smbus操作时,就会使用i2c的读写函数来模拟smbus操作。
(在i2c核心层,i2c的通用读写函数i2c_transfer、i2c_master_send就是通过调用adapter的algo来实现对不同cpu的i2c总线进行读写的,而用户只需调用i2c_transfer、i2c_master_send等函数就可以实现i2c/smbus的读写,而不必关心其底层是怎么实现的)
下面的结构体是用来注册总线adapter驱动的注册有关的,当进行platform驱动注册时,就会将具体的adapter设备与总线adapter驱动实现交互
在上面的结构体中,xx_i2c_of_match用于和adapter的设备id进行比较,以实现adapter驱动与adapter设备的比较。而xx_i2c_of_probe
则用来实现adapters的声明与注册以及i2c设备的发现与注册
在adapter的probe函数里,调用了iomap,该函数通过调用ioremap来实现地址映射,也就是将一个IO地址空间映射到内核的虚拟
|
评论暂时关闭