
devm_of_platform_populate()主要用于父设备驱动 (通常是总线控制器、宿主设备或 MFD 设备)中,当其设备树节点包含需要自动实例化为平台设备的子节点时调用。典型场景包括:
| 场景 | 说明 |
|---|---|
| 总线控制器驱动 | 如 I2C、SPI、USB 等控制器,其设备树中定义了挂载的子设备(i2c@...、spi@...),驱动需在 probe()中调用此函数,将子节点转换为平台设备,以便子设备驱动绑定。 |
| **多功能设备(MFD)** | 一个硬件模块包含多个功能单元(如 PMIC),每个功能在设备树中作为子节点描述,父驱动调用此函数创建各功能对应的平台设备。 |
| **简单总线(simple-bus)** | 某些 SoC 中将一组外设挂在"简单总线"下,总线驱动需通过此函数枚举子设备。 |
关键点:
-
该函数是
of_platform_populate()的资源管理版本,会自动在设备卸载时清理创建的设备,避免内存泄漏。 -
调用时机通常在父设备驱动的
probe()阶段,确保子设备被正确注册。 -
若子设备不需要平台设备驱动(例如已通过其他总线类型处理),则无需调用。
示例:
I2C 控制器驱动中常见如下代码:
cpp
static int i2c_controller_probe(struct platform_device *pdev)
{
// ... 初始化硬件 ...
return devm_of_platform_populate(&pdev->dev);
}
这样,设备树中 i2c-controller节点下的所有子节点都会自动成为平台设备,匹配各自的驱动。