阅读aml_i2c的代码时,发现在probe函数直接调用了platform_get_resource获取io内存,但是却没有做任何检测!probe函数怎么知道这块io内存属于这个驱动呢?
后来发现原来在arch目录下的对应目录里面有个board-8726m-refa00.c文件,这个文件里面声明了一个platform设备的资源数组platform_devs,原型如下:
static struct platform_device __initdata *platform_devs[]= {
#if defined(CONFIG_TOUCHSCREEN_ADS7846)
&spi_gpio,
#endif
#if defined(CONFIG_AML_RTC)
&aml_rtc_device,
#endif
#if defined(CONFIG_SUSPEND)
&aml_pm_device,
#endif
...
#if defined(CONFIG_I2C_AML)
&aml_i2c_device,
#endif
...
}
这个数组里面包含了所有platform设备的资源信息。例如:aml_i2c设备的资源声明如下:
#if defined(CONFIG_I2C_AML)
static struct aml_i2c_platform aml_i2c_plat = {
.wait_count = 1000000,
.wait_ack_interval = 5,
.wait