【分享】i2c地址0x80导致Linux i2c驱动的probe函数不能被执行

作者: 付汉杰 hankf@xilinx.com hankf@amd.com
测试环境: Vivado/PetaLinux 2021.2, Linux 5.10.0

在给Xilinx Versal的Linux Kernel添加i2c驱动后,发现probe函数没有被执行。
检查编译过程,i2c驱动被编译成了ko文件。
检查编单板的文件系统,i2c驱动已经在文件系统中。
手动加载ko文件,linux报告驱动已经存在。
卸载驱动后,再手动加载ko文件,执行正常,linux没有报告错误。检查内核输出,没有probe里的printk打印,即使是err级别的打印信息。
交换能正常加载的i2c驱动和新驱动的i2c地址,新驱动的probe函数能被执行,原来能正常加载的i2c驱动的probe函数也不能被执行。这说明probe和地址有关。
检查linux内核信息,由警告说0x80是无效地址。
原来设备树根据厂商的手册,把i2c的地址设置成了0x80。0x80可能是计算了r/w位的值,真实地址是0x40。
更改i2c为0x40,新驱动的probe函数能正常执行。

posted @ 2022-03-01 11:03  HankFu  阅读(474)  评论(0编辑  收藏  举报