RK3588长按power键强制关机的按键时间设置

RK3588长按power键强制关机的按键时间设置

本文适用于RK3588+RK806(电源管理芯片)的方案,power(电源)键是直接控制RK806来控制RK3588的上下电,可以实现短按开机、长按强制断电关机的功能,可以通过控制RK806的寄存器来设置长按的时间长短。

RK3588按power键强制关机的按键时间设置

RK806的power键长按时间可以配置为如下几个值:

  • 00: 6000ms,
  • 01: 8000ms,
  • 10: 10000ms,
  • 11: 12000ms
    下面以配置12秒为例进行说明,其中PMIC是单pmic的方案,如果是双pmic的话需要修改rk3588-rk806-dual.dtsi
:~/a2_Android13_29_sdk/kernel-5.10$ git diff
diff --git a/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi b/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
index 62f3403789b7..48e28aa0c85f 100644
--- a/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
@@ -44,6 +44,10 @@
                 */
                pmic-reset-func = <1>;

+               /* PWRON_LP_OFF_TIME: PWRON long press time:
+               * 00: 6000ms, 01: 8000ms, 10: 10000ms, 11: 12000ms */
+               pwron-lp-off-time = <12000>;
+
                vcc1-supply = <&vcc5v0_sys>;
                vcc2-supply = <&vcc5v0_sys>;
                vcc3-supply = <&vcc5v0_sys>;
diff --git a/drivers/mfd/rk806-core.c b/drivers/mfd/rk806-core.c
index 5421ac95578f..2fbc2e967fef 100644
--- a/drivers/mfd/rk806-core.c
+++ b/drivers/mfd/rk806-core.c
@@ -620,6 +620,7 @@ static int rk806_parse_dt(struct rk806 *rk806)
        struct device *dev = rk806->dev;
        int rst_fun;
        int ret;
+       int value;

        pdata = rk806->pdata;

@@ -678,6 +679,25 @@ static int rk806_parse_dt(struct rk806 *rk806)
        if (device_property_read_bool(dev, "pwron-on-time-500ms"))
                rk806_field_write(rk806, PWRON_ON_TIME, 0x00);

+       if (device_property_read_bool(dev, "pwron-lp-to-reset"))
+               rk806_field_write(rk806, PWRON_LP_ACT, 0x01);
+
+       ret = device_property_read_u32(dev,
+               "pwron-lp-off-time",
+               &value);
+       if (ret < 0) {
+               dev_info(dev, "pwron-lp-off-time missing!\n");
+       } else {
+               if (value <= 6000)
+                       rk806_field_write(rk806, PWRON_LP_OFF_TIME, 0x00);
+               else if (value <= 8000)
+                       rk806_field_write(rk806, PWRON_LP_OFF_TIME, 0x01);
+               else if (value <= 10000)
+                       rk806_field_write(rk806, PWRON_LP_OFF_TIME, 0x02);
+               else
+                       rk806_field_write(rk806, PWRON_LP_OFF_TIME, 0x03);
+       }
+
        return 0;
 }
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loitawu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值