rk3568 长按电源键关机修改

news2024/10/6 18:30:02

rk3568 电源键强制关机触发时间修改


Rockchip系列主控芯片配套PMIC支持长按电源键强制关闭PMU,也就是标题中的强制关机。rk3568使用I2C通信与PMIC(rk809/rk817),power(电源)键则是与PMIC相连,PMIC监测按键状态控制RK3568的上下电,实现短按开机、长按强制断电关机。电源键触发rk809/rk817开启供电时间同样可有相关寄存器调整。

作者:炭烤毛蛋 ,点击博主了解更多。


提示:PMU多个工作状态寄存器,可修改相关参数实现调整强制关机时间,开机触发时间。

文章目录

  • rk3568 电源键强制关机触发时间修改
  • 1. 核查硬件,适配硬件强制关机
    • 1.1 PMIC(rk809、rk817) 电源键设备树注册
    • 1.2 PMIC(rk809、rk817) 电源键强制关机触发时间修改
    • 1.3 PMIC(rk809、rk817) 屏蔽电源键强制关机
  • Tips
  • 总结


1. 核查硬件,适配硬件强制关机

RK809、RK817 电源键是直接与 PWRON(pin) 连接,电源键被按下时与GND导通,PWRON 信号被拉低;PMIC检测到该信号变化后触发相关操作。
rk809 电源键

1.1 PMIC(rk809、rk817) 电源键设备树注册

RK809、RK817 的电源键需要在 PMIC驱动中增加相关设备树描述。

&i2c0 {
	status = "okay";

	rk809: pmic@20 {
		pwrkey {
			status = "okay";
		};
	};
};

1.2 PMIC(rk809、rk817) 电源键强制关机触发时间修改

rk817_PWRON_KEY

--- a/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
@@ -1141,6 +1141,10 @@
                /* not save the PMIC_POWER_EN register in uboot */
                not-save-power-en = <1>;
 
+               /* PWRON_LP_OFF_TIME: PWRON long press time:
+               * 6s, 8s, 10s, 12s */
+               pwron-lp-off-time = <10>;
+
                vcc1-supply = <&vcc3v3_sys>;
                vcc2-supply = <&vcc3v3_sys>;
                vcc3-supply = <&vcc3v3_sys>;
diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c
index 8c207a2899d4..f6befe99eb33 100644
--- a/drivers/mfd/rk808.c
+++ b/drivers/mfd/rk808.c
@@ -1126,6 +1126,7 @@ static void rk817_of_property_prepare(struct rk808 *rk808, struct device *dev)
        u32 inner;
        int ret, func, msk, val;
        struct device_node *np = dev->of_node;
+       uint32_t value;
 
        ret = of_property_read_u32_index(np, "fb-inner-reg-idxs", 0, &inner);
        if (!ret && inner == RK817_ID_DCDC3)
@@ -1160,6 +1161,25 @@ static void rk817_of_property_prepare(struct rk808 *rk808, struct device *dev)
        ret = register_reboot_notifier(&rk817_reboot_data.reboot_notifier);
        if (ret)
                dev_err(dev, "failed to register reboot nb\n");
+
+       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 <= 6)
+                       val = RK817_PWRON_LP_OFF_TIME_6S;
+               else if (value <= 8)
+                       val = RK817_PWRON_LP_OFF_TIME_8S;
+               else if (value <= 10)
+                       val = RK817_PWRON_LP_OFF_TIME_10S;
+               else
+                       val = RK817_PWRON_LP_OFF_TIME_12S;
+               regmap_update_bits(rk808->regmap, RK817_PMIC_PWRON_KEY,
+                       RK817_PMIC_PWRON_KEY_MSK,
+                       val);
+       }
 }
 
 static struct kobject *rk8xx_kobj;

1.3 PMIC(rk809、rk817) 屏蔽电源键强制关机

diff --git a/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi b/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
index 1bfaeb681069..7183b00904dc 100644
--- a/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
+++ b/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi
@@ -1141,6 +1141,11 @@
                /* not save the PMIC_POWER_EN register in uboot */
                not-save-power-en = <1>;
 
+               /* PWRON_LP_OFF_TIME: PWRON long press time:
+               * 6s, 8s, 10s, 12s */
+               pwron-lp-off-time = <12>;
+               pwron_lp_act = <0>;
+
                vcc1-supply = <&vcc3v3_sys>;
                vcc2-supply = <&vcc3v3_sys>;
                vcc3-supply = <&vcc3v3_sys>;
diff --git a/drivers/mfd/rk808.c b/drivers/mfd/rk808.c
index 8c207a2899d4..844adc944a0a 100644
--- a/drivers/mfd/rk808.c
+++ b/drivers/mfd/rk808.c
@@ -1126,6 +1126,7 @@ static void rk817_of_property_prepare(struct rk808 *rk808, struct device *dev)
        u32 inner;
        int ret, func, msk, val;
        struct device_node *np = dev->of_node;
+       uint32_t value;
 
        ret = of_property_read_u32_index(np, "fb-inner-reg-idxs", 0, &inner);
        if (!ret && inner == RK817_ID_DCDC3)
@@ -1160,6 +1161,41 @@ static void rk817_of_property_prepare(struct rk808 *rk808, struct device *dev)
        ret = register_reboot_notifier(&rk817_reboot_data.reboot_notifier);
        if (ret)
                dev_err(dev, "failed to register reboot nb\n");
+
+       ret = device_property_read_u32(dev,
+               "pwron_lp_act",
+               &value);
+       if (ret < 0) {
+               dev_info(dev, "pwron-lp-off-time missing!\n");
+       } else {
+               if (value)
+                       regmap_update_bits(rk808->regmap, RK817_PMIC_PWRON_KEY,
+                               RK817_PWRON_LP_ACT_MSK,
+                               RK817_PWRON_LP_ACT_ON);
+               else
+                       regmap_update_bits(rk808->regmap, RK817_PMIC_PWRON_KEY,
+                               RK817_PWRON_LP_ACT_MSK,
+                               RK817_PWRON_LP_ACT_OFF);
+       }
+
+       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 <= 6)
+                       val = RK817_PWRON_LP_OFF_TIME_6S;
+               else if (value <= 8)
+                       val = RK817_PWRON_LP_OFF_TIME_8S;
+               else if (value <= 10)
+                       val = RK817_PWRON_LP_OFF_TIME_10S;
+               else
+                       val = RK817_PWRON_LP_OFF_TIME_12S;
+               regmap_update_bits(rk808->regmap, RK817_PMIC_PWRON_KEY,
+                       RK817_PMIC_PWRON_KEY_MSK,
+                       val);
+       }
 }
 
 static struct kobject *rk8xx_kobj;

Tips

  1. 确认rk809、rk817寄存器是否正常设置,可以使用 i2cdump命令回读数据。
  2. 验证寄存器是否有效,可使用命令 i2c_set 手动设置寄存器取值,然后验证设置效果。

总结

不枉博主详细讲解,欢迎订阅博主–炭烤毛蛋 。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/661664.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新增每日个股涨停原因及概念题材统计!股票量化分析工具QTYX-V2.6.6

功能概述 目前A股市场主旋律仍然是以行业及题材板块的热点轮动为主&#xff0c;因此从某种意义上来说&#xff0c;板块的强弱决定了选出个股的强弱。 我们的股票量化分析工具QTYX目前已经支持了统计行业板块内涨停板数量功能。‍ 为了进一步分析出市场上启动的热点概念题材。我…

vscode远程连接linux服务器

Linux服务器&#xff08;或虚拟机&#xff09;条件&#xff1a; 开启ssh服务 客户端&#xff1a; vscode 1.服务端 服务端需要开启ssh服务vscode才能连接&#xff0c;首先检验linux是否开启了ssh服务 systemctl status sshd servie sshd status 运行命令&#xff0c;如果可…

视频基础知识——编码时,帧率、码率、分辨率之间的联系

本文主要补充基础概念&#xff0c;在设置编码器的时候&#xff0c;参数设置不对&#xff0c;录制的屏幕就会出现花屏。所以梳理了基础知识&#xff0c;就知道哪里设置不对了。 如下是ffmpeg自带的sample&#xff0c;encode_video的例子&#xff0c;选取H264的编码器&#xff0c…

基于SpringBoot和协同过滤算法的体育商城系统的实现

最近帮小伙伴做了个基于SpringBoot和协同过滤算法的体育商城系统。 文章目录 一&#xff0c;SpingBoot介绍二&#xff0c;协同过滤算法介绍三&#xff0c;系统功能需求四&#xff0c;系统功能演示五&#xff0c;系统核心代码演示 一&#xff0c;SpingBoot介绍 现如今后台开源框…

企业寻求最大化投资回报率的24个社交媒体技巧

社交媒体营销不是银弹。它不会解决您所有的业务问题&#xff0c;也不会让您一夜成名。但是&#xff0c;如果您愿意投入时间和精力&#xff0c;社交媒体可以成为建立关系、建立信誉和发展业务的强大工具。 在这篇文章中&#xff0c;我们将分享24个社交媒体技巧&#xff0c;以帮…

React 演示Hook中发送网络请求

我这里本地用java写了个接口 当我访问 http://localhost:8080/books 就会发出一个无惨的 get请求 返回内容如下 这里 我返回了一个 json对象 然后 我们在react项目的src目录下创建setupProxy.js 参考代码如下 const proxy require(http-proxy-middleware)module.exports f…

您的Android密钥安全吗?一招教你安全加固

您的Android密钥安全吗&#xff1f;一招教你安全加固 你是否担心你的Android应用中的敏感数据会被披露出去&#xff1f;如果是的话&#xff0c;别担心&#xff0c;你并不是唯一一个有这样担忧的人。在今天的世界里&#xff0c;保护你的应用的URL和密钥免受逆向工程的风险变得比…

前端Vue图片上传组件支持单个文件多个文件上传 自定义上传数量 预览删除图片 图片压缩

前端Vue图片上传组件支持单个文件多个文件上传 自定义上传数量 预览删除图片 图片压缩&#xff0c; 下载完整代码请访问uni-app插件市场址:https://ext.dcloud.net.cn/plugin?id13099 效果图如下&#xff1a; ## 1.0.0&#xff08;2023-06-18&#xff09; 组件初始化 #### …

三、多层感知机及模型优化

文章目录 前言一、多层感知机1.1 隐藏层1.1.1 什么叫隐藏层1.1.2 为什么需要隐藏层 1.2 激活函数1.2.1 ReLU函数1.2.2 Sigmoid函数1.2.3 tanh函数 1.3 多层感知机的代码实现 二、模型选择、欠拟合和过拟合2.1 训练误差和泛化误差2.2 模型选择2.2.1 模型复杂性2.2.2 验证集2.2.3…

机器学习强基计划9-1:图解匹配追踪(MP)与正交匹配追踪(OMP)算法

目录 0 写在前面1 字典学习2 稀疏表示与稀疏编码3 匹配追踪MP算法4 正交匹配追踪OMP算法 0 写在前面 机器学习强基计划聚焦深度和广度&#xff0c;加深对机器学习模型的理解与应用。“深”在详细推导算法模型背后的数学原理&#xff1b;“广”在分析多个机器学习模型&#xff…

CSS小技巧之悬停3D发光效果

今天要实现的效果如图所示&#xff0c;鼠标悬停是图片卡片会有3D翻转的效果&#xff0c;且动画过程中还带有发光的效果。类似这种3D悬停效果日常看到的比较多&#xff0c;但是今天实现的这个效果有以下几个亮点&#xff1a; 核心CSS代码不超过10行没有额外的元素&#xff08;只…

STM32 MCO+SPI获取24位模数转换(24bit ADC)高速芯片ADS1271采样数据

STM32 MCOSPI获取24位模数转换&#xff08;24bit ADC&#xff09;高速芯片ADS1271采样数据 STM32大部分芯片只有12位的ADC采样性能&#xff0c;如果要实现更高精度的模数转换如24位ADC采样&#xff0c;则需要连接外部ADC实现。ADS1271是 TI公司一款高速24位Σ-Δ型模数转换器(…

[每周一更]-(第50期):Go的垃圾回收GC

参考文章&#xff1a; https://juejin.cn/post/7111515970669117447https://draveness.me/golang/docs/part3-runtime/ch07-memory/golang-garbage-collector/https://colobu.com/2022/07/16/A-Guide-to-the-Go-Garbage-Collector/https://liangyaopei.github.io/2021/01/02/g…

【前端布局篇】浮动、定位、弹性布局,固比固、双飞翼、圣杯布局

一、布局方式介绍 布局模型是基于盒模型基础上进行的拓展&#xff0c;关于布局有流式布局&#xff08;标准的布局&#xff09;&#xff0c;浮动布局、定位布局、flex布局等。 1.1 标准流&#xff08;流动模型&#xff09; 描述&#xff1a;元素按照自己默认的元素类型在页面…

社区问答精选——长安链开发知多少?(6月)

此次整理的内容为5-6月社群内的问答供更多开发者参考&#xff08;社群中部分优质问题连贯性不足未能收录&#xff0c;欢迎点击公众号菜单栏加入社群共同交流&#xff09;。有更多问答在社区issue中描述更为细致&#xff0c;开发者提问前可以先按照关键词进行搜索。欢迎各位开发…

Doris FE启动流程源码解读

FE启动流程分析 Doris中FE主要负责接收和返回客户端请求、元数据以及集群管理、查询计划生成等工作。 本文主要看一下Doris的fe在启动时做了什么。 启动流程分析 启动流程图&#xff1a; 代码路径&#xff1a; doris/fe/fe-core/src/main/java/org/apache/doris/DorisFE.j…

华为云CodeArts Build快速上手编译构建-进阶玩家体验

华为云CodeArts Build编译构建为开发者提供配置简单的混合语言构建平台&#xff0c;实现编译构建云端化&#xff0c;支撑企业实现持续交付&#xff0c;缩短交付周期&#xff0c;提升交付效率。支持编译构建任务一键创建、配置和执行&#xff0c;实现获取代码、构建、打包等活动…

react+antd实现表格封装,可动态控制列显示隐藏。

实现效果 import { Table, Pagination, Button, Dropdown, Checkbox, message } from antd; import { useState, useEffect } from react; import { PicRightOutlined } from ant-design/icons;import ./index.less;const TableComponent (props) > {const powerList JSON…

【方法】Excel表格的“打开密码”不想要了,如何取消?

对于重要的Excel表格&#xff0c;很多小伙伴都会设置“打开密码”&#xff0c;这样就无法随意打开表格&#xff0c;只有输入正确的密码才可以打开。 如果后续表格不再需要保护&#xff0c;每次打开都要输一次密码&#xff0c;这样操作也是很麻烦。 那不想要“打开密码”&…

(5)(5.8) 保存微调和自动微调

文章目录 前言 1 保存微调 2 自动微调 3 保存微调和自动微调的视频演示 4 桌面方法 前言 当然&#xff0c;风对你的旋翼飞机有很大的影响&#xff0c;会把它推来推去。然而&#xff0c;你可能也会发现&#xff0c;在自稳模式下飞行时&#xff0c;即使在无风的环境中&#xff0…