1:
a) sys/bus/pci/drivers/i2c-designware-pci ----controller driver
b) sys/bus/platform/drivers/i2c-gpio --- controller driver
! note: sys/bus/i2c/drivers/* -- these are i2c slave devices drivers, not controller.
2:
Code:
drivers/i2c/busses
下面有很多i2c controller的文件,到底是哪一个,同理与:http://blog.csdn.net/tangkegagalikaiwu/article/details/8615995
结合makefile 和 build之后的config 来查看,只有如下2个.o , 一个是i2c-pci相关的,一个是i2c-gpio相关的
obj-$(CONFIG_I2C_DESIGNWARE_PCI) += i2c-designware-pci.o
i2c-designware-pci-objs := i2c-designware-pcidrv.o i2c-designware-core.o
obj-$(CONFIG_I2C_GPIO) += i2c-gpio.o
可以印证了1中,确实存在2个gpio controller
i2c-designware-pci:pci-i2c driver
dw_pci_controllers数组预定义了多个controller设备,对于clover platform 来说,是 cloverview_0~~~cloverview_5; 每当pci总线枚举出一个,就会调用这个driver的 probe一次。
(这些i2c controller在原理图中,其实也是soc上的gpio pin,那么他们在何处被声明成 pci设备,而不是gpio了呢? 是在sfi里面被intel fw team做掉的)
ps: 之后是可以再kernel里面进行更改的:lnw_gpio_set_alt ( 最后操作的是GAFR)
i2c-gpio.o:platform-i2c driver
可以在probe函数中打印出pdata->sda_pin, pdata->scl_pin,得知是哪2个gpio来模拟i2c controller(我现在的项目中,就是hdmi的2个 gpio)
platform设备何处注册生成?
Platform_i2c_gpio.c (z:\jb_intel\hardware\intel\linux-2.6\arch\x86\platform\intel-mid\device_libs