谁在叫"探针QUOT;在司机code函数? [英] Who calls "probe" function in driver code?
问题描述
我想了解这个一> mcspi为OMAP2板熊猫司机code。
I am trying to understand this driver code of mcspi for omap2 panda board.
我不明白谁调用探头
功能是什么的这个司机code?
I don't understand who calls the probe
function and what is the call chain in this driver code?
设备如何连接时通知驾驶员?
How does the driver is informed when the device is connected?
推荐答案
从探头功能 SPI-OMAP2-mcspi.c
保存在静态结构的platform_driver omap2_mcspi_driver
,这与 module_platform_driver(omap2_mcspi_driver);
(在文件的结尾)。在 module_platform_driver
宏,中的 platform_device.h 将结构传递给 platform_driver_register
宏观和 __ platform_driver_register
从驱动器/基/ platform.c 功能一>
The probe function from spi-omap2-mcspi.c
is saved in the static struct platform_driver omap2_mcspi_driver
, which is registered with module_platform_driver(omap2_mcspi_driver);
(at the end of file). The module_platform_driver
macro, defined in platform_device.h will pass the struct to platform_driver_register
macro and __platform_driver_register
function from drivers/base/platform.c
527 /**
528 * __platform_driver_register - register a driver for platform-level devices
529 * @drv: platform driver structure
530 * @owner: owning module/driver
531 */
532 int __platform_driver_register(struct platform_driver *drv,
533 struct module *owner)
534 {
...
536 drv->driver.bus = &platform_bus_type;
537 if (drv->probe)
538 drv->driver.probe = platform_drv_probe;
...
544 return driver_register(&drv->driver);
545 }
546 EXPORT_SYMBOL_GPL(__platform_driver_register);
现在传递到 driver_register
从功能的驱动程序/基/ driver.c
139 /**
140 * driver_register - register driver with bus
141 * @drv: driver to register
142 *
143 * We pass off most of the work to the bus_add_driver() call,
144 * since most of the things we have to do deal with the bus
145 * structures.
146 */
147 int driver_register(struct device_driver *drv)
148 {
...
154 if ((drv->bus->probe && drv->probe) ||
...
167 ret = bus_add_driver(drv);
...
178 }
所以,现在司机在公交车登记( platform_bus_type
)。
要探针实际呼叫通过 driver_probe_device
做的驱动程序/基/ dd.c ,那么 really_probe
(同一文件行265):
Actual call to probe is done via driver_probe_device
drivers/base/dd.c, then really_probe
(same file line 265):
265 static int really_probe(struct device *dev, struct device_driver *drv)
266 {
...
270 pr_debug("bus: '%s': %s: probing driver %s with device %s\n",
271 drv->bus->name, __func__, drv->name, dev_name(dev));
...
287 if (dev->bus->probe) {
288 ret = dev->bus->probe(dev); /// <<<< HERE
289 if (ret)
290 goto probe_failed;
291 } else if (drv->probe) {
292 ret = drv->probe(dev); /// <<<< OR HERE
293 if (ret)
294 goto probe_failed;
295 }
296
297 driver_bound(dev);
298 ret = 1;
299 pr_debug("bus: '%s': %s: bound device %s to driver %s\n",
300 drv->bus->name, __func__, dev_name(dev), drv->name);
301 goto done;
这篇关于谁在叫&QUOT;探针QUOT;在司机code函数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!