rk3576 Android14 深度休眠时控制rk806的pwrctrl2引脚
正常工作情况下pwrctrl2是低电平,深度休眠时pwrctrl2是1.8v,我需要深度休眠的时候该引脚也是低电平,请问应该怎么修改?



rk3576 Android14 深度休眠时控制rk806的pwrctrl2引脚
正常工作情况下pwrctrl2是低电平,深度休眠时pwrctrl2是1.8v,我需要深度休眠的时候该引脚也是低电平,请问应该怎么修改?



晚上好🌙🌙🌙
本答案参考通义千问
在 RK3576 平台运行 Android 14 的情况下,如果你希望在**深度休眠(Deep Sleep)**时控制 RK806 芯片的 PWRCTRL2 引脚保持为低电平,而不是默认的 1.8V,你需要从以下几个方面进行分析和修改:
pwrctrl2-gpios 或类似字段。&rk806 {
compatible = "rockchip,rk806";
pwrctrl2-gpios = <&gpio0 RK_GPIO_A0 GPIO_ACTIVE_HIGH>;
};
drivers/mfd/rk806.cstatic int rk806_set_pwrctrl2(struct rk806 *rk806, bool enable)
{
gpio_set_value(rk806->pwrctrl2_gpio, enable ? 1 : 0);
}
rk806_set_pwrctrl2(rk806, false) 来保持低电平。static int rk806_suspend(struct device *dev)
{
struct rk806 *rk806 = dev_get_drvdata(dev);
rk806_set_pwrctrl2(rk806, false); // 保持低电平
return 0;
}
static int rk806_resume(struct device *dev)
{
struct rk806 *rk806 = dev_get_drvdata(dev);
rk806_set_pwrctrl2(rk806, true); // 恢复正常状态
return 0;
}
如果 PWRCTRL2 是由某个 GPIO 控制的,你可以在设备树中修改其默认值:
&pinctrl {
rk806_pwrctrl2: rk806-pwrctrl2 {
rockchip,pins = <0 0 0 0 0>; // 根据实际 GPIO 编号调整
rockchip,drive = <0>;
rockchip,pull = <0>;
};
};
&rk806 {
compatible = "rockchip,rk806";
pwrctrl2-gpios = <&gpio0 RK_GPIO_A0 GPIO_ACTIVE_LOW>;
};
注意: 如果你使用的是 GPIO_ACTIVE_LOW,则表示低电平有效。否则,可能会导致误判。
adb shell 或 gpioget 工具检查 PWRCTRL2 的电平状态:
gpioget /dev/gpiochip0 0
0 是 GPIO 编号,根据你的硬件配置调整。| 步骤 | 内容 | |------|------| | 1 | 查找设备树中 PWRCTRL2 的配置 | | 2 | 检查内核驱动中对 PWRCTRL2 的控制逻辑 | | 3 | 在 suspend/resume 流程中强制设置 PWRCTRL2 为低电平 | | 4 | 可选:修改设备树中的 GPIO 枚举值 | | 5 | 重新编译内核并测试结果 |
以下是一个简化版的内核驱动修改示例:
static int rk806_suspend(struct device *dev)
{
struct rk806 *rk806 = dev_get_drvdata(dev);
if (rk806->pwrctrl2_gpio) {
gpio_set_value(rk806->pwrctrl2_gpio, 0); // 设置为低电平
}
return 0;
}
static int rk806_resume(struct device *dev)
{
struct rk806 *rk806 = dev_get_drvdata(dev);
if (rk806->pwrctrl2_gpio) {
gpio_set_value(rk806->pwrctrl2_gpio, 1); // 恢复为高电平
}
return 0;
}
如果你有具体的设备树文件或驱动代码,我可以进一步帮助你定位具体需要修改的部分。