RK3568关于RK808的定时开关机
RK3568关于RK808的定时开关机
- 前言
- 一、补丁
- 二、测试方法
- 总结
前言
补丁
附件是以rk808为例实现的,使用rk809思路是一样的:
一、补丁
--- a/drivers/mfd/rk808.c
+++ b/drivers/mfd/rk808.c
@@ -61,7 +61,7 @@ static struct mfd_cell rk808s[] = {#define VOL_MIN_IDX 0x00
#define VOL_MAX_IDX 0x3f
-
+static int getalarm[6];
const static int buck_set_vol_base_addr[] = {RK808_BUCK1_ON_REG,RK808_BUCK2_ON_REG,
@@ -1017,6 +1017,31 @@ static ssize_t rk808_test_show(struct kobject *kobj, struct kobj_attribute *attr}+static ssize_t rk808_alarm_store(struct kobject *kobj, struct kobj_attribute *attr,
+ const char *buf, size_t n)
+{+ char cmd;
+ const char *buftmp = buf;
+
+ sscanf(buftmp, "%x%c%x%c%x%c%x%c%x%c%x", &getalarm[5],&cmd,&getalarm[4],&cmd,&getalarm[3],
+ &cmd,&getalarm[2],&cmd,&getalarm[1],&cmd,&getalarm[0]);
+ printk("year = %x\n", getalarm[5]);
+ printk("mon = %x\n", getalarm[4]);
+ printk("day = %x\n", getalarm[3]);
+ printk("hour = %x\n", getalarm[2]);
+ printk("min = %x\n", getalarm[1]);
+ printk("sec = %x\n", getalarm[0]);
+ return n;
+
+}
+
+static ssize_t rk808_alarm_show(struct kobject *kobj, struct kobj_attribute *attr,
+ char *buf)
+{+ return sprintf(buf, "%x%c%x%c%x%c%x%c%x%c%x\n", getalarm[5], '_', getalarm[4], '_', getalarm[3],
+ '_', getalarm[2], '_', getalarm[1], '_', getalarm[0]);
+}
+
static struct kobject *rk808_kobj;
struct rk808_attribute {struct attribute attr;
@@ -1029,6 +1054,7 @@ struct rk808_attribute {static struct rk808_attribute rk808_attrs[] = {/* node_name permision show_func store_func */__ATTR(rk808_test, S_IRUGO | S_IWUSR, rk808_test_show, rk808_test_store),
+ __ATTR(rk808_alarm, S_IRUGO | S_IWUSR, rk808_alarm_show, rk808_alarm_store),
};
#endif
#if 0
@@ -1141,8 +1167,10 @@ static void rk808_shutdown(void)printk("%s,line=%d dc[%d]= %d\n", __func__,__LINE__,(i+1),val);}/*****************************************************/
- ret = rk808_set_bits(rk808, RK808_INT_STS_MSK_REG1,(0x3<<5),(0x3<<5)); //close rtc int when power off
- ret = rk808_clear_bits(rk808, RK808_RTC_INT_REG,(0x3<<2)); //close rtc int when power off
+ //ret = rk808_set_bits(rk808, RK808_INT_STS_MSK_REG1,(0x3<<5),(0x3<<5)); //close rtc int when power off
+ //ret = rk808_clear_bits(rk808, RK808_RTC_INT_REG,(0x3<<2)); //close rtc int when power off
+ ret = rk808_clear_bits(rk808, RK808_INT_STS_MSK_REG1,(0x3<<5)); //open rtc int when power on
+ ret = rk808_set_bits(rk808, RK808_RTC_INT_REG,(0x1<<3),(0x1<<3)); //open rtc int when power onmutex_lock(&rk808->io_lock);mdelay(100);
}
@@ -1153,9 +1181,23 @@ static struct syscore_ops rk808_syscore_ops = {static void rk808_device_shutdown(void)
{- int ret,i;
+ int ret,i,j;u8 reg = 0;struct rk808 *rk808 = g_rk808;
+
+ for(j=0x0d; j>=0x08; j--)
+ {+ ret = rk808_i2c_write(rk808, j, 1,getalarm[j-8]);
+ if (ret <0)
+ printk("write alarm reg error!\n");
+ }
+ for (j = 0; j < 0x13; j++)
+ {+ ret=rk808_i2c_read(rk808,j,1,®);
+ if (ret <0)
+ printk("read rtc & alarm reg error!\n");
+ printk("reg[0x%x]:%x\n",j,reg);
+ }for(i=0;i < 10;i++){printk("%s\n",__func__);ret = rk808_i2c_read(rk808,RK808_DEVCTRL_REG,1,®);
@@ -1169,6 +1211,7 @@ static void rk808_device_shutdown(void)}while(1)wfi();
}
+
EXPORT_SYMBOL_GPL(rk808_device_shutdown);__weak void rk808_device_suspend(void) {}
二、测试方法
用adb或者串口都行
# su
# echo +60 > /sys/class/rtc/rtc0/wakealarm cat /sys/class/rtc/rtc0/wakealarm
#reboot -p
关机之后等60S系统自动开机了,验证成功
总结
1.在底层做一个独立的alarm接口(本patch中是提供的接口为rk808_rtc_setalarm_pwron),上层设定开机时间;
2.上层设置的时间会调到该接口,然后保存开机时间;
3.等到真正关机时,在关机函数里将rtc/alarm中断全部打开,并将开机时间写进alarm寄存器;
4.一旦到达设定的时间,rtc通过唤醒pmu达到给整个系统上电的效果;
5.定时关机的功能比较简单,自己根据需求调用关机函数即可,不在赘述;补丁是以4.4kernel的rk808为例实现的,上层只需通过ioctl方法往接口里写入开机时间
RK3568关于RK808的定时开关机相关推荐
- 文件服务器定时开关机,如何配置作服务器定时开关机.ppt
如何配置作服务器定时开关机 如何配置服务器定时开关机 注:本例中操作系统以Windows server2003.BIOS以phoenix-award为例 1.自动定时开机的实现 1.1启动计算机时,按 ...
- linux服务器定时关机重启,Ubuntu Server 10.10 每天定时开关机linux服务器应用 -电脑资料...
Ubuntu Server 10.10定时开机方法: 按F2进入BIOS设置,设置每天定时开机, 容易出现问题: BIOS时间比系统时间慢8小时.在BIOS设置中设置时间或在Ubuntu系统中设置BI ...
- 定时开关机实现原理-Android4.4/6.0
原址 一.寄存器介绍--RTCSA & RTCSAR 1.RTC是Real Time Clock的简称,它在硬件电路上单独供电,当系统关机时,CPU和其他外部硬件设备全部掉电,但是RTC仍然继 ...
- Win10、Win7定时开关机
Win10.Win7定时开关机 Win10.Win7定时开关机 补充重点:必须取消选择"自动重新启动"--解决休眠重启问题 知识补充: 电脑在关机后有两个用户只默认登陆一个 Win ...
- w ndows 10关机,Win10设置定时开关机休眠唤醒的方法
Win10如何设置定时开关机休眠唤醒?我们在没有硬件支持的情况下,可以利用Wndows系统自带的任务计划程序和休眠功能,实现计算的定时开关机,解决休眠重启问题.那要如何设置定时开关机休眠唤醒呢?下面, ...
- win10定时关机c语言,win10定时关机怎么设置,win10设置定时关机设置方法-电脑怎么定时开关机...
很多时候我们都会选择在空闲的时候下载一些文件或视频,如果文件或视频比较大,那么下载的时间就会比较长,所以我们一般都会选择下载完关机的软件功能!那么如果不是利用软件下载的呢?我们总不能傻傻的等着下载完成 ...
- 定时开关机-Android4.4/6.0
一.寄存器介绍--RTCSA & RTCSAR 1.RTC是Real Time Clock的简称,是一个时钟芯片.它在硬件电路上单独供电,当系统关机时,CPU和其他外部硬件设备全部掉电,但是R ...
- 【经验分享】设置电脑定时开关机
文章目录 1.定时开机设置(BIOS固件设置) 2.定时关机设置 放长假回家,不想拷贝资料,因此打算用todesk远程连接办公.但是工位电脑一直开着,还不能睡眠,担心会过热,可能对硬件不太好.于是我和 ...
- 定时开关机(二):AlarmManager的使用及对定时不准问题的修改
定时开关机(二):AlarmManager的使用及对定时不准问题的修改 AlarmManager是系统提供的定时服务,通过AlarmManager发送一个定时广播,接收方收到广播后,启动关机活动,这样 ...
最新文章
- #ifdef __cplusplus extern C { #endif”的定义的含义
- react 拖拽生成html,[React] 基于react 拖拽时间选择器
- DirectX视口变换矩阵详解
- butterknife 源码分析
- c# groupbox大小_【已解决】C#中使得控件随着WinForm窗体的大小改变而自动变化
- 编辑器内容FCKeditor的js验证以及FCKeditor内容是否为空判断
- Higher level thinking
- R和Tableau平行坐标图
- JavaScript基础流程控制(3)
- 【解题报告】Vijos1143 三取方格数
- 软件开发的201个原则
- 山东省第二届数据应用创新大赛日照赛区-公积金贷款逾期预测-赛后总结
- 按键精灵使用百度文字识别(百度ocr)教程
- 进图形界面黑屏的解决办法
- php实现转盘游戏后台奖品按照概率发放
- Rust编程语言入门教程(一)-什么是Rust
- 【图像分类损失】PolyLoss:一个优于 Cross-entropy loss和Focal loss的分类损失
- 使用MetaMask客户端获取以太坊测试网络ropsten测试币
- 一分钟了解“matlab得到自然常数e”
- java.lang.UnsatisfiedLinkError: Unable to load library ‘D:\dll\DwgOperInterface‘: 找不到指定的模块
热门文章
- 第006话 皮皮和月亮石!
- 周大福守护一生 | 在520奔赴一场终身浪漫的约会
- cod12正版链接在线服务器6,cod6盗版服务器管理命令(Cod6 pirated server management commands).doc...
- hdmi网线延长器_HDMI单网线延长器50米高清传输解决方案
- 如何用Excel做一个战斗模拟器(三)战斗过程模拟
- r55600h和i79750h哪个好
- 重塑 Google 搜索、Android 13 新版发布,这届 I/O 大会为开发者带来了什么?
- Android基础知识——Android SDK Manager详解
- 如何搭建多功能会议室
- 20200228视频播放器的字幕支持