You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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 4
    
    若输出中0x38位置显示UU或设备地址,说明硬件连接正常;若为空,需检查I2C SDA/SCL引脚连接、触摸IC供电及复位引脚状态。

内容的提问来源于stack exchange,提问作者adams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 19:20:24