Linux I2C触摸驱动probe函数未被调用问题排查求助
Focaltech I2C触摸驱动probe函数未触发问题排查
你的驱动初始化函数fts_ts_init()执行正常,但probe不触发,且platform驱动模式下能正常匹配,说明问题集中在I2C总线的设备匹配流程上,以下是具体排查方向:
1. 确认I2C控制器驱动正常加载
- 检查dmesg日志中是否有i2c4控制器初始化成功的信息:
正常应该输出类似dmesg | grep "i2c4"i2c i2c-4: Ingenic I2C adapter registered的内容,如果没有,说明ingenic,x2000-i2c控制器驱动未正确加载,需先解决控制器的问题。 - 查看sysfs中是否存在i2c4总线节点:
若节点不存在,说明控制器未完成初始化,挂接在其下的触摸设备无法被枚举。ls /sys/bus/i2c/devices/i2c-4
2. 验证设备树中I2C设备的配置合法性
- 地址正确性:确认触摸IC的硬件I2C地址确实是
0x38,部分Focaltech型号(如FT5x06)支持地址切换引脚,若硬件配置为0x39,则需修改设备树中reg = <0x38>为0x39。 - GPIO与中断配置:检查
gpa节点是否在设备树中正确定义且status = "okay",同时确认GPIO_ACTIVE_LOW、0x2(对应中断类型)等宏在内核中已正确定义,避免因GPIO解析错误导致设备被标记为不可用。 - 设备树解析日志:查看dmesg中是否有设备树节点解析错误:
若出现dmesg | grep "focaltech"of_i2c: failed to register i2c device focaltech@38之类的错误,需修正设备树节点的语法或属性。
3. 检查内核I2C相关配置
确保以下内核配置项已开启:
CONFIG_I2C=y:启用I2C核心CONFIG_I2C_OF=y:启用I2C设备树支持(这是I2C设备通过设备树匹配的关键,仅开启CONFIG_OF不够)CONFIG_I2C_CHARDEV=y:可选,用于用户空间调试I2C设备
4. 调试I2C设备匹配流程
- 查看内核日志中I2C匹配相关信息:
正常匹配时会输出类似dmesg | grep "match" | grep "i2c"i2c-core: driver fts_ts matched device focaltech@38的日志,若没有则说明匹配逻辑未触发。 - 可尝试将驱动的
.probe_type设置为PROBE_PREFER_ASYNCHRONOUS,部分场景下异步probe能解决匹配延迟问题:static struct i2c_driver fts_ts_driver = { .probe = fts_ts_probe, .remove = fts_ts_remove, .driver = { .name = FTS_DRIVER_NAME, .owner = THIS_MODULE, .of_match_table = of_match_ptr(fts_dt_match), .probe_type = PROBE_PREFER_ASYNCHRONOUS, // 添加此行 }, .id_table = fts_ts_id, };
5. 排查硬件层面问题
- 用I2C工具(如
i2cdetect)扫描i2c4总线,确认触摸IC是否存在:
若输出中i2cdetect -y 40x38位置显示UU或设备地址,说明硬件连接正常;若为空,需检查I2C SDA/SCL引脚连接、触摸IC供电及复位引脚状态。
内容的提问来源于stack exchange,提问作者adams
相关产品推荐
相关产品推荐

