I2C子系统之platform(2)

if (pdrv->id_table)           return platform_match_id(pdrv->id_table, pdev) != NULL;  

相关语句。

此处就是根据platfor_device和platform_driver的名字来实现配对。但是platform_driver有好几个名字

可以选择,通过id_table来实现配对。执行到此处,之前已注册到platform_bus的platform_device

型设备s3c_devicei2c0和现在刚注册到platform_bus总线的platfor_drver型驱动s3c24xx_i2c_drive将

实现配对成功。

成功配对之后将尝试进行probe

static int really_probe(struct device *dev, struct device_driver *drv)   {                。。。 。。。          if (dev->bus->probe) {           ret = dev->bus->probe(dev);           if (ret)               goto probe_failed;       } else if (drv->probe) {           ret = drv->probe(dev);           if (ret)               goto probe_failed;       }           。。。 。。。   }   

有上述代码可知,成功配对后首先调用的是总线的probe,假如总线未初始化probe方法才会去

调用驱动中的probe,即platform_driver.drv->probe,而platform_bus本身未初始化probe方法,

所以此处调用驱动的probe方法,驱动的probe在注册过程中已被初始化

int platform_driver_register(struct platform_driver *drv)   {       drv->driver.bus = &platform_bus_type;       if (drv->probe)           drv->driver.probe = platform_drv_probe;       if (drv->remove)           drv->driver.remove = platform_drv_remove;       if (drv->shutdown)           drv->driver.shutdown = platform_drv_shutdown;          return driver_register(&drv->driver);   }  

即直接调用函数platform_drv_probe,函数如下:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d0552e49df047155f600a0a04bfc62fc.html