Linux i2c子系统(三)

如果你也遇到了填充了id_match_table,compitible怎么看都一样,但probe就是不执行(让我哭一会),你可以回头看一下上一篇的模板,我们这里虽然使用的是设备树匹配,但和platform的设备树匹配只填充i2c_match_table不同,i2c_driver的设备树匹配需要同时填充i2c_match_table和id_table两个域,虽然后者是个空。如果你没有填充后面的成员,不妨试一下我的这种写法,我敢打赌你的probe也没有执行^-^。
问题是明确的,探索是漫长的,但是至少答案一定在源码中,也一定出在匹配的源码中,带着这样的思路,我从"i2c_add_driver"开始一路狂追,结论是使用设备树的话,只要id_match_table,不需要id_table!, 下面的i2c_device_match即可看出。

i2c_add_driver()
        └── i2c_register_driver
                └── driver_register
                        ├── driver_find
                        │  ├── kset_find_obj
                        │  ├── kobject_put
                        │  └── to_driver
                        └── bus_add_driver
                                └── driver_attach
                                        └── bus_for_each_dev
                                                ├── next_device
                                                └── __driver_attach
                                                        └─ driver_match_device
                                                                └── i2c_device_match
                                                                        ├── acpi_driver_match_device
                                                                        ├── i2c_match_id
                                                                        └── of_driver_match_device
                                                                        └── of_match_device
                                                                                └── of_match_node
                                                                                        └── __of_match_node
                                                                                                └── __of_device_is_compatible

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

转载注明出处:https://www.heiqu.com/74b533cb5a2d613f224e7631a03fbb7b.html