日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RK3568关于RK808的定时开关机

發(fā)布時(shí)間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RK3568关于RK808的定时开关机 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

RK3568關(guān)于RK808的定時(shí)開關(guān)機(jī)

  • 前言
  • 一、補(bǔ)丁
  • 二、測(cè)試方法
  • 總結(jié)


前言

補(bǔ)丁
附件是以rk808為例實(shí)現(xiàn)的,使用rk809思路是一樣的:


一、補(bǔ)丁

--- 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,&reg); + 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,&reg); @@ -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) {}

二、測(cè)試方法

用adb或者串口都行

# su # echo +60 > /sys/class/rtc/rtc0/wakealarm cat /sys/class/rtc/rtc0/wakealarm #reboot -p

關(guān)機(jī)之后等60S系統(tǒng)自動(dòng)開機(jī)了,驗(yàn)證成功

總結(jié)

1.在底層做一個(gè)獨(dú)立的alarm接口(本patch中是提供的接口為rk808_rtc_setalarm_pwron),上層設(shè)定開機(jī)時(shí)間;
2.上層設(shè)置的時(shí)間會(huì)調(diào)到該接口,然后保存開機(jī)時(shí)間;
3.等到真正關(guān)機(jī)時(shí),在關(guān)機(jī)函數(shù)里將rtc/alarm中斷全部打開,并將開機(jī)時(shí)間寫進(jìn)alarm寄存器;
4.一旦到達(dá)設(shè)定的時(shí)間,rtc通過喚醒pmu達(dá)到給整個(gè)系統(tǒng)上電的效果;
5.定時(shí)關(guān)機(jī)的功能比較簡(jiǎn)單,自己根據(jù)需求調(diào)用關(guān)機(jī)函數(shù)即可,不在贅述;補(bǔ)丁是以4.4kernel的rk808為例實(shí)現(xiàn)的,上層只需通過ioctl方法往接口里寫入開機(jī)時(shí)間

總結(jié)

以上是生活随笔為你收集整理的RK3568关于RK808的定时开关机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。