Linux PowerPC I2C驱动 之 I2C Adapter层的注册过程


I2cadapter层驱动,首先是其probe函数,adapter的结构体如下:

111

上面的结构体中其中algo实现i2c设备的读写操作函数


对于i2c_algorithm结构体,其中的functionality用来说明该算法所支持的i2c模式(有I2C_FUNC_I2CI2C_FUNC_10BIT_ADDRI2C_FUNC_SMBUS_BYTE

I2C_FUNC_SMBUS_BYTE_DATAI2C_FUNC_SMBUS_WORD_DATA等模式,具体看i2c.h中的定义)

对于master_xferi2c的读写函数,主要是根据i2c的时序图实现i2c的读出与写入操作,而smbus_xfer则用来实现smbus的读写函数,有些adapteralgo只实现了i2c的读写函数,当支持smbus操作时,就会使用i2c的读写函数来模拟smbus操作。

(在i2c核心层,i2c的通用读写函数i2c_transferi2c_master_send就是通过调用adapteralgo来实现对不同cpui2c总线进行读写的,而用户只需调用i2c_transferi2c_master_send等函数就可以实现i2c/smbus的读写,而不必关心其底层是怎么实现的)

下面的结构体是用来注册总线adapter驱动的注册有关的,当进行platform驱动注册时,就会将具体的adapter设备与总线adapter驱动实现交互


在上面的结构体中,xx_i2c_of_match用于和adapter的设备id进行比较,以实现adapter驱动与adapter设备的比较。而xx_i2c_of_probe

则用来实现adapters的声明与注册以及i2c设备的发现与注册


adapterprobe函数里,调用了iomap,该函数通过调用ioremap来实现地址映射,也就是将一个IO地址空间映射到内核的虚拟

  • 1
  • 2
  • 3
  • 4
  • 下一页

相关内容