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

如何在dts文件中正确配置GPIO以在Suspend-to-RAM模式下断电

问题根因

TI tca6424属于pca953x系列GPIO扩展器,内核原生的gpio-pca953x驱动仅实现了GPIO控制器功能,不支持直接在设备子节点解析regulator配置,你直接在tca6424节点下新增regulator子节点不会被内核识别处理。

现成实现方案(无需自定义驱动)

用内核自带的regulator-gpio通用驱动实现GPIO控制的电源开关,操作步骤如下:

  • 第一步:确认内核配置开启CONFIG_REGULATOR_GPIO=y(编译进内核)或CONFIG_REGULATOR_GPIO=m(编译为模块)
  • 第二步:修正设备树配置,首先保留原有tca6424节点的GPIO控制器配置,单独新增GPIO regulator节点:
    保留的tca6424节点示例:
hu_u1740: tca6424_hu_u1740@22 {
    compatible = "ti,tca6424";
    reg = <0x22>;
    gpio-controller;
    #gpio-cells = <2>;
};

新增的regulator节点示例:

pw_bt_reg: regulator-pw-bt {
    compatible = "regulator-gpio";
    regulator-name = "pw_bt";
    /* 修正原配置的电压错误:33000000为33V,3.3V正确值为3300000 */
    regulator-min-microvolt = <3300000>;
    regulator-max-microvolt = <3300000>;
    regulator-always-on;
    enable-active-high;
    /* 引用tca6424的17号引脚,极性为高有效 */
    gpios = <&hu_u1740 17 GPIO_ACTIVE_HIGH>;
    regulator-state-mem {
        regulator-off-in-suspend;
    };
};
  • 第三步(可选):如果下游蓝牙芯片在设备树中有对应节点,在该节点下添加vcc-supply = <&pw_bt_reg>;绑定供电关系,符合设备树规范。
注意事项
  • 如果你使用的内核版本未定义GPIO_ACTIVE_HIGH宏,直接替换为数值0即可,对应tca6424节点#gpio-cells = <2>的第二个参数极性定义
  • 需确认tca6424挂载的I2C控制器在suspend阶段未被断电,否则regulator无法通过I2C写入寄存器修改引脚电平,这种情况需要额外配置I2C控制器的suspend唤醒属性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:09:05