文章目录power按键
~短按休眠和长按关机
关机命令
~poweroff命令关机
ok3399-c平台采用rk3399 主cpu芯片设计,支持底板power按键休眠唤醒以及关机功能,linux命令行也可以通过命令进行关机,下面对这两种方式进行简单的解析。
power按键power按键的休眠唤醒功能一般是与pmic芯片和cpu相关的,硬件上该按键会连接到pmic的pwron引脚和cpu对应的引脚上。
先来看power按键在pmic侧的响应机制,power键按下以后,经过tdbpwronf时间以后,int引脚变为低电平,触发中断。内核驱动响应中断,执行休眠程序。
如果pwron继续保持低电平超过tdpwronlp,pmic就会响应,rk3399板卡将进行关机。
rk3399短按休眠和长按关机log信息:
[ 10.250531] pm: syncing filesystems ... done. [ 10.255148] test message. //加入的测试信息 [ 10.256842] freezing user space processes ... (elapsed 0.003 seconds) done. [ 10.260770] freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. [ 10.263308] suspending console(s) (use no_console_suspend to debug) info: sleep mode config[0xde]: info: ap_pwroff info: slp_armpd info: slp_pllpd info: ddr_ret info: slp_center_pd info: wakeup source config[0x804]: info:
gpio
interrupt can wakeup system info: pwm interrupt can wakeup system info: pwm config[0x4]: info: pwm: pwm2d_regulator_en info: apios info[0x0]: info: not config info: gpio power info: info: gpio1_c1 info: gpio1_b6 info: pmu_mode_cong: 0x1477bf51
涉及驱动文件
kernel/kernel/power/suspend.c/** * enter_state - do common work needed to enter system sleep state. * @state: system sleep state to enter. * * make sure that no one else is trying to put the system into a sleep state. * fail if that's not the case. otherwise, prepare for system suspend, make the * system enter the given sleep state and clean up after wakeup. */ static int enter_state(suspend_state_t state) { int error; trace_suspend_resume(tps(suspend_enter), state, true); if (state == pm_suspend_freeze) { #ifdef config_pm_debug if (pm_test_level != test_none && pm_test_level dev, have no rk808, so do nothing here\n); return; } /* close rtc int when power off */ regmap_update_bits(rk808->regmap, rk808_int_sts_msk_reg1, (0x3 << 5), (0x3
rtc
_int_reg, (0x3 << 2), (0x0 regmap); if (ret) dev_err(&rk808_i2c_client->dev, system power off error!\n); mdelay(10); dev_info(&rk808_i2c_client->dev, cpu should never reach here, stop!\n); while (1) ; } } }#define dev_off_rst bit(3) static int rk808_shutdown(struct regmap *regmap) { int ret; ret = regmap_update_bits(regmap, rk808_devctrl_reg, dev_off_rst, dev_off_rst); return ret; }
最终调用的的rk808shutdown接口函数,对rk808devctrlreg寄存器写入devoff_rst,触发rk3399主板关机。
进入飞凌嵌入式官网>>了解关于ok3399-c开发板的更多信息。
选择最佳PCB通孔选项的7个技巧
2019年全球TV市场总结和2020年展望:预则立,不预则“怠”
诺基亚为何精简业务
如何利用树莓派的手势控制全息音频可视化器
魅族16th拆机图解 这样的做工用料还是相当超值的
研发干货丨关于RK3399 开发板休眠、关机功能简析
采用PCM编码原理及FPGA编程技术实现PCM数字基群接口传
人工智能和云计算方面的盈利怎样
巧用Altium Transparent 2D视图布置电源过孔
研华科技与讯连科技合作推出“ FaceView” AI面部识别工业应用程序
比亚迪被低估56%,到底如何才能在竞争激励的汽车市场脱颖而出?
圆形连接器报到!汽车高压连接家族再添一枚大将
电机烧机判定标准是什么样的
用算力制造算力,揭秘中兴通讯服务器及存储智能工厂
美格智能LXC容器化解决方案,轻松玩转多系统虚拟化
伺服电机靠什么为动力源进行移动
智算中心网络架构设计及组网实践案例
小米全面屏电视E55A的出色体验
助听器简介和重要的设计注意事项
数字功放芯片NTP8835和TAS5731M的对比测评