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

SC16IS750 GPIO0输出高电平GPIO hogging问题及驱动解析求助

SC16IS750 GPIO Hogging配置异常及驱动DTS解析疑问

问题概述

  • 需求:将SC16IS750的GPIO0配置为输出模式且默认高电平,采用GPIO hogging机制实现
  • 异常:未添加p0子节点时,可正常识别/dev/gpiochip2及所有GPIO名称;添加p0子节点后出现识别异常
  • 环境:Linux内核v5.4.148,使用官方sc16is7xx.c驱动
  • 参考:已对照GPIO绑定文档及相关技术问答完成DTS配置

当前DTS配置

/* I2C-to-UART converter */
sc16is750: sc16is750@48 {
   compatible = "nxp,sc16is750";
   reg = <0x48>;
   clock-frequency = <14746500>;
   interrupt-parent = <&gpio>;
   interrupts = <28 0>;
   gpio-controller;
   #gpio-cells = <2>;

   /* ngpios = <8>; */
   /* gpio-line-names = "Fan", "1", "TACO", "3", "4", "5", "6", "7"; */
   p0 {
      gpio-hog;
      gpios = <0x0 0x0>;
      output-high;
      line-name = "Fan";
   };
};

现象对比

  • 无p0子节点、开启ngpios和gpio-line-names:GPIO控制器正常识别,可看到所有GPIO名称
  • 有p0子节点、注释ngpios和gpio-line-names:GPIO控制器识别异常

驱动相关疑问

推测驱动读取DTS的入口为sc16is7xx_i2c_probe(),但难以梳理驱动中处理DTS GPIO配置(尤其是hogging)的具体逻辑,希望明确相关代码路径。

排查建议

  1. 恢复ngpios = <8>配置:SC16IS750原生支持8个GPIO,部分驱动版本依赖该属性确认GPIO数量,缺失可能导致GPIO控制器初始化失败,进而影响hog子节点解析
  2. 调整gpios属性格式:将gpios = <0x0 0x0>改为gpios = <0 GPIO_ACTIVE_HIGH>(DTS中可直接使用宏定义或对应数值),确保flags参数符合驱动预期
  3. 驱动代码梳理路径:
    • sc16is7xx_i2c_probe()会调用核心初始化函数sc16is7xx_probe()
    • GPIO控制器初始化逻辑在sc16is7xx_gpio_probe()中,该函数负责注册GPIO chip,并处理ngpios等属性
    • GPIO hogging由内核GPIO子系统统一解析,需驱动完成GPIO chip注册后才能生效;若注册流程因DTS配置错误中断,会导致hog子节点无法被处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:25:18