節點創建
i2c_add_adapter、i2c_add_numbered_adapter 是注冊 i2c_adapter,這兩個 API 最終是調用 i2c_register_adapter。
static int i2c_register_adapter(struct i2c_adapter *adap)
{
......
dev_set_name(&adap- >dev, "i2c-%d", adap- >nr);
adap- >dev.bus = &i2c_bus_type;
adap- >dev.type = &i2c_adapter_type;
res = device_register(&adap- >dev);
/* create pre-declared device nodes */
of_i2c_register_devices(adap);
i2c_acpi_install_space_handler(adap);
i2c_acpi_register_devices(adap);
.....
}
dev_set_name(&adap->dev, "i2c-%d", adap->nr) 會在 Linux 中自動創建 /sys/devices/platform/11f00000.i2c6/i2c-6 節點。
of_i2c_register_devices 會調用 i2c_new_client_device
struct i2c_client *i2c_new_client_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
{
......
client- >dev.parent = &client- >adapter- >dev;
client- >dev.bus = &i2c_bus_type;
client- >dev.type = &i2c_client_type;
client- >dev.of_node = of_node_get(info- >of_node);
client- >dev.fwnode = info- >fwnode;
device_enable_async_suspend(&client- >dev);
i2c_dev_set_name(adap, client, info);
......
status = device_register(&client- >dev);
......
}
i2c_dev_set_name 會在 Linux 系統中自動創建 /sys/devices/platform/11f00000.i2c6/i2c-6/6-0058 ,這里是掛在某個 i2c bus 上的,從機地址為 0x58 的設備節點。
到這里,大家應該能看懂下圖,這些節點在 I2C 控制器驅動加載時,自動創建的。大家在 I2C 控制器的子節點中聲明的 I2C 從機設備,也會在這一步創建節點。
-
控制器
+關注
關注
112文章
16433瀏覽量
178937 -
節點
+關注
關注
0文章
220瀏覽量
24477 -
I2C
+關注
關注
28文章
1495瀏覽量
124216
發布評論請先 登錄
相關推薦
評論