接下来看初始化i2c-designware驱动init recovery时做了什么,其实完全是在填充i2c_bus_recovery_info结构体。 <drivers/i2c/busses/i2c-designware-master.c> 653 static int i2c_dw_init_recovery_info(struct dw_i2c_dev *dev) 654 { 655 struct i2
i2c_init_recovery(adap); /* create pre-declared device nodes */ of_i2c_register_devices(adap); i2c_acpi_register_devices(adap); i2c_acpi_install_space_handler(adap); if (adap->nr < __i2c_first_dynamic_bus_num) i2c_scan_static_board_info(adap); /* Notify drivers */ mutex_lock(&co...
id_table = xxx_id, }; /* 驱动入口函数 */ static int __init xxx_init(void) { int ret = 0; ret = i2c_add_driver(&xxx_driver); return ret; } /* 驱动出口函数 */ static void __exit xxx_exit(void) { i2c_del_driver(&xxx_driver); } module_init(xxx_init); module_exit(xxx_...
i2c_init主要的工作就是注册了i2c_bus_type,这个流程和统一设备模型》8-platform设备中介绍的bus_register(&platform_bus_type)类似。 struct bus_type i2c_bus_type = { .name = "i2c", .match = i2c_device_match, .probe = i2c_device_probe, .remove = i2c_device_remove, .shutdown = i2c_device...
struct i2c_bus_recovery_info *bus_recovery_info; const struct i2c_adapter_quirks *quirks; }; /* @ i2c_add_adapter 使用动态的总线号注册 @ 而 i2c_add_numbered_adapter 使用静态总线号注册 @ adapter或adap 要添加到 Linux 内核中的 i2c_adapter,也就是I2C 适配器 ...
structrt_mutexbus_lock;inttimeout;/* in jiffies */intretries;structdevicedev;/* the adapter device */intnr;//总线的编号charname[48];structcompletiondev_released;structmutexuserspace_clients_lock;structlist_headuserspace_clients;structi2c_bus_recovery_info*bus_recovery_info;conststructi2c_adapter_...
struct i2c_bus_recovery_info *bus_recovery_info; const struct i2c_adapter_quirks *quirks; struct irq_domain *host_notify_domain; struct regulator *bus_regulator; }; 几个重要的成员: name:适配器的名称。 nr:适配器的编号。 bus_lock 和 bus_unlock:用于保护对适配器的并发访问的锁机制。
struct i2c_bus_recovery_info *bus_recovery_info; const struct i2c_adapter_quirks *quirks; }; 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. ...
{struct i2c_adapter adapter;struct clk*clk;void__iomem*base;wait_queue_head_t queue;unsigned long i2csr;unsigned int disable_delay;int stopped;unsigned int ifdr;/* IMX_I2C_IFDR */unsigned int cur_clk;unsigned int bitrate;conststruct imx_i2c_hwdata*hwdata;struct i2c_bus_recovery_info r...
/* owned by the I2C core */#defineI2C_ALF_IS_SUSPENDED0#defineI2C_ALF_SUSPEND_REPORTED1intnr;/*I2C bus id*/charname[48];structcompletiondev_released;structmutexuserspace_clients_lock;structlist_headuserspace_clients;structi2c_bus_recovery_info*bus_recovery_info;conststructi2c_adapter_quirks*...