20250709榮品RD-RK3588開發板的Android13系統下修改為連續長按10s開機
2025/7/9 10:11
緣起:由于榮品RD-RK3588開發板使用的PMIC是RK806。
以前在榮品PRO-RK3566開發板上使用的PMIC是RK809上做過了長按開機的。
直接遷移過來了!
1、根據RK809的DATASHEET,短按開機【100ms/500ms】/長按關機,長按關機。6s/8s/10s
我在網上找到的DATASHEET是V1.0的,據說有V1.4的或者更新的?
如果有,方便的話,發一下。
2、我們希望長按2s開機。
如果 RK809的開機模式是寫死了。我司需要 等待 2s時間 【以防 誤操作/誤觸發】
可以使用這個上電邏輯不?
先讓 RK809檢測到500ms 開機指令,如果檢測到,先【清除掉 寄存器中的開機指示?】,然后讓 RK809等待1.5s == 1500ms,
現在 在 檢測 電源鍵 是否還是按下的。如果是的。走正常的開機邏輯。
如果不是,就判定為 誤操作,關機了。
或者您這邊有更好的 上電邏輯/建議?
【榮品RD-RK3588開發板使用RK806這顆PMIC,看驅動名稱使用了PMIC接口】
Z:\14TB\versions\RD-RK3588_Android13\u-boot\drivers\power\pmic\rk8xx_spi.c
【榮品PRO-RK3566開發板使用RK809這顆PMIC】
Z:\14TB\versions\pro3566_Android13.0\u-boot\drivers\power\pmic\rk8xx.c
Z:\14TB\versions\RD-RK3588_Android13\u-boot\drivers\power\pmic\rk8xx_spi.c
本次修改存在的問題:
1、uboot啟動到pmic的probe大概1-2s。
之后需要檢測POWERKEY按鍵是否連續按10s。
本程序簡單的處理為10s的最后階段檢測一次。
實際上,需要在循環的每一次/一秒的延遲/間隔期間都需要檢測,沒有按POWER按鍵就直接走關機流程了!
2、本次關機流程,直接COPY了關機的代碼。
實際上調用關機函數更好!
static int rk8xx_spi_probe(struct udevice *dev)
{
struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
struct rk8xx_priv *priv = dev_get_priv(dev);
struct udevice *spi = dev_get_parent(dev);
struct spi_slave *slave = NULL;
u8 on_source, off_source;
u8 msb, lsb, value = 0;
int ret;
printf("**** wyb 2025/6/26 16:58 %s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
?? ?if (spi->seq < 0) {
dev_err(dev, "Failed to configure the spi num\n");
return -EINVAL;
}
?? ?slave = spi_setup_slave(spi->seq, plat->cs, plat->max_hz,
plat->mode);
if (!slave)
return -ENODEV;
priv->slave = slave;
?? ?/* read Chip variant */
ret = rk806_spi_read(dev, RK806_CHIP_NAME, &msb, 1);
if (ret) {
dev_err(dev, "rk806 name read error: %d\n", ret);
return ret;
}
?? ?ret = rk806_spi_read(dev, RK806_CHIP_VER, &lsb, 1);
if (ret) {
dev_err(dev, "rk806 version read error: %d\n", ret);
return ret;
}
?? ?priv->variant = ((msb << 8) | lsb) & RK8XX_ID_MSK;
printf("spi%d: RK%x%x: %d\n", spi->seq, msb, (lsb >> 4), lsb & 0x0f);
?? ?rk806_spi_read(dev, RK806_ON_SOURCE, &on_source, 1);
rk806_spi_read(dev, RK806_OFF_SOURCE, &off_source, 1);
printf("ON=0x%02x, OFF=0x%02x\n", on_source, off_source);
?? ?ret = rk806_spi_read(dev, RK806_HW_VER, &value, 1);
if (ret)
panic("RK806: read RK806_HW_VER error!\n");
/* dual rk806 dev name: "rk806master@0", "rk806slave@1"
* single rk806 dev name: " rk806single@0"
*/
if ((!strcmp(dev->name, "rk806master@0")) || (!strcmp(dev->name, "rk806slave@1"))) {
if (value != HW_DUAL_PMIC) {
dev_err(dev, "HW single pmic, the firmware dual pmic(0x%x)!\n", value);
run_command("download", 0);
}
} else {
if (value != HW_SINGLE_PMIC) {
dev_err(dev, "HW dual pmic, the firmware single pmic(0x%x)!\n", value);
run_command("download", 0);
}
}
?? ?if ((lsb & 0x0f) == VERSION_AB) {
ret = rk806_spi_read(dev, RK806_SYS_CFG1, &value, 1);
if (ret) {
dev_err(dev, "rk806 RK806_SYS_CFG1 read error: %d\n", ret);
return ret;
}
value |= 0x80;
rk806_spi_write(dev, RK806_SYS_CFG1, &value, 1);
}
?? ?if (priv->rst_fun) {
rk806_spi_read(dev, RK806_SYS_CFG3, &value, 1);
value &= 0x3f;
if (priv->rst_fun == RK806_RST_MODE1) {
value |= (RK806_RST_MODE1 << 6);
rk806_spi_write(dev, RK806_SYS_CFG3, &value, 1);
} else if (priv->rst_fun == RK806_RST_MODE2) {
value |= (RK806_RST_MODE2 << 6);
rk806_spi_write(dev, RK806_SYS_CFG3, &value, 1);
}
}
?? ?rk8xx_spi_irq_chip_init(dev);
///* 10*100ms */
//mode = rockchip_get_boot_mode();
//printf("xxxx: mode: %d\n", mode);
//value=pmic_reg_read(dev, 0xf0)&0x80;
//printf("value=0x%x\n",value );
//if((pmic_reg_read(dev, 0xf0)&0x80) && mode == BOOT_MODE_UNDEFINE )
//{
//?? ?printf("xxxx: power off\n");
//?? ?rk8xx_shutdown(dev);
//}
//if ((pmic_reg_read(dev, 0xf0) & 0x80)==0 &&
// ? ?mode == BOOT_MODE_UNDEFINE) {
//?? ?i = 0;
//?? ?while (i < 10) {
//?? ??? ?value = pmic_reg_read(dev, 0xf0) & 0x80;
//?? ??? ?printf("value=0x%x\n",value );
//?? ??? ?if ((value & 0x80)) {
//?? ??? ??? ?printf("xxxx: power off\n");
//?? ??? ??? ?rk8xx_shutdown(dev);
//?? ??? ?}
//?? ??? ?mdelay(100);
//?? ??? ?i++;
//?? ?}
//?? ?printf("xxxx: power on\n");
//}
////for j = 0;
//for(j=0; j<256; j++)
//{
//?? ?//printf("0x%02x, ", pmic_reg_read(dev, j) );
//?? ?printf("0x%02x = 0x%02x\n", j, pmic_reg_read(dev, j) );
//}
?? ?//int j = 0;
//for(j=0; j<256; j++)
//{
//?? ?//printf("0x%02x, ", pmic_reg_read(dev, j) );
//?? ?//ret = rk806_spi_read(dev, RK806_SYS_CFG1, &value, 1);
//?? ?ret = rk806_spi_read(dev, j, &value, 1);
//?? ?//printf("0x%02x = 0x%02x\n", j, pmic_reg_read(dev, j) );
//?? ?printf("0x%02x = 0x%02x\n", j, value );
//}
?? ?int j = 0;
for(j=0; j<10; j++)
{
mdelay(1000);
printf("**** wyb 2025/6/26 16:58 %s %s %d j=%d\n", __FILE__, __FUNCTION__, __LINE__, j);
}
//ret = rk806_spi_read(dev, RK806_SYS_CFG3, &dev_off, 1);
ret = rk806_spi_read(dev, 0x5D, &value, 1);
if (0x80 == value)
{
u8 dev_off;
int ret = 0;
printf("**** wyb 2025/6/26 16:58 %s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
ret = rk806_spi_read(dev, RK806_SYS_CFG3, &dev_off, 1);
if (ret)
return ret;
dev_off |= RK806_DEV_OFF;
ret = rk806_spi_write(dev, RK806_SYS_CFG3, &dev_off, 1);
if (ret) {
dev_err(dev, "rk806 shutdown error: %d\n", ret);
return ret;
}
while (1)
;
}
?? ?return 0;
}
static int rk8xx_spi_shutdown(struct udevice *dev)
{
u8 dev_off;
int ret = 0;
printf("**** wyb 2025/6/26 16:58 %s %s %d\n", __FILE__, __FUNCTION__, __LINE__);
?? ?ret = rk806_spi_read(dev, RK806_SYS_CFG3, &dev_off, 1);
if (ret)
return ret;
?? ?dev_off |= RK806_DEV_OFF;
ret = rk806_spi_write(dev, RK806_SYS_CFG3, &dev_off, 1);
if (ret) {
dev_err(dev, "rk806 shutdown error: %d\n", ret);
return ret;
}
?? ?while (1)
;
?? ?return 0;
}
參考資料:
https://blog.csdn.net/Y1anH/article/details/146641944?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-146641944-blog-127852443.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.2&utm_relevant_index=3
RK806S PMIC電源管理芯片調試
https://blog.csdn.net/Y1anH/article/details/146641944
解析此處的核心代碼
當點按PWRON按鍵時,rk806上電開始啟動bootloader和uboot,在執行到此處時檢測到是由于按鍵啟動的,所以0x5d的值是0x80,0x74的值是0x80,在一般情況下,mode都默認是none的,所以mode值為11,因此就進入了我們的if判斷,若是由于按鍵啟動的,則直接調用rk8xx_shutdown函數關掉,進入這個函數會看到實際是通過i2c給0x72寄存器的BIT(0)寫1,使其關機。
所以此操作就實現了點按PWRON按鍵無法開機,避免了誤觸情況。
在判斷里加上0x74寄存器為0x40的情況,則避免了12V電源插入自動啟動
而長按開機時,0x5d實際讀到的值是0x00,所以不會進入此處的判斷
關于此處按鍵寄存器檢測的值,從邏輯上來看更像是按下為0x00,不按為0x80,這里后續還要再想辦法測試一下,即rk806芯片手冊與實際描述是相反的。或者與PWRON按鍵接vcc或GND有關,因為rk806手冊按下按鍵時電平狀態是拉低的
總之實現的邏輯是這樣的,具體的場景需要微調寄存器判斷的值
https://blog.csdn.net/u011774634/article/details/130585756?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-6-130585756-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ECtr-6-130585756-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=11
RK3588S Android12修改PMIC(RK806)長按電源鍵強制關機的時長為10秒
https://blog.csdn.net/u011774634/article/details/130585756
--- a/kernel-5.10/drivers/mfd/rk806-core.c
+++ b/kernel-5.10/drivers/mfd/rk806-core.c
@@ -677,6 +677,8 @@ static int rk806_parse_dt(struct rk806 *rk806)
/* PWRON_ON_TIME: 0:500mS; 1:20mS */
if (device_property_read_bool(dev, "pwron-on-time-500ms"))
rk806_field_write(rk806, PWRON_ON_TIME, 0x00);
+ ? ? ??
+ ? ? ? rk806_field_write(rk806,PWRON_LP_OFF_TIME,0x02);
return 0;
}
https://blog.csdn.net/u011774634/article/details/132744969?spm=1001.2101.3001.6650.7&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-132744969-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-7-132744969-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=12
RK3588S Android12修改短按電源鍵的開機按鍵時長
https://blog.csdn.net/u011774634/article/details/132744969
RK806的power按鍵開機時長有2種選擇,通過如下寄存器進行配置:
默認為20mS,如果要改為500mS,則將0x76寄存器的第7位寫0即可。
dts修改方法為在rk806的節點中增加如下屬性即可,如下修改:
--- a/kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
+++ b/kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
@@ -43,6 +43,8 @@
* ? ?and simultaneously pull down the RESETB PIN for 5mS before releasing
*/
pmic-reset-func = <1>;
+ ? ? ? ? ? ? ??
+ ? ? ? ? ? ? ? pwron-on-time-500ms;
vcc1-supply = <&vcc5v0_sys>;
vcc2-supply = <&vcc5v0_sys>;
pwron-on-time-500ms的解析參考kernel-5.10\drivers\mfd\rk806-core.c中如下代碼:
? ? /* PWRON_ON_TIME: 0:500mS; 1:20mS */
if (device_property_read_bool(dev, "pwron-on-time-500ms"))
rk806_field_write(rk806, PWRON_ON_TIME, 0x00);
https://blog.csdn.net/weixin_43245753/article/details/127852443
RK3588長按power鍵強制關機的按鍵時間設置
https://wenku.csdn.net/answer/4cc3d5c9b6ae43f09a8c301a1ec7a02d?spm=1001.2101.3001.6650.20&utm_medium=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7ECTRLIST%7EPosition-20-4cc3d5c9b6ae43f09a8c301a1ec7a02d-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-chatgpt-2%7Edefault%7ECTRLIST%7EPosition-20-4cc3d5c9b6ae43f09a8c301a1ec7a02d-blog-127852443.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=25
RK3568 Android11 去除長按power鍵關機的功能 - CSDN文庫.mhtml
https://wenku.csdn.net/answer/4cc3d5c9b6ae43f09a8c301a1ec7a02d
RK3568 Android11 去除長按power鍵關機的功能?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
時間: 2023-09-11 13:10:10 瀏覽: 545?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
您可以通過修改系統源代碼來實現去除長按power鍵關機的功能。具體的實現步驟如下:?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
1、打開系統源代碼,并找到 frameworks/base/packages/systemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java 文件。?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
2、在該文件中找到 mPowerOptions = (Linearlayout) mDialog.findViewById(R.id.power_options);代碼行。?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
3、在該代碼行后面添加以下代碼:?? ?
// 關閉長按 power 鍵關機功能
mPowerOptions.findViewById(R.id.shutdown).setVisibility(View.GONE);復制代碼?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
4、保存文件并重新編譯系統源代碼。?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
5、在設備上安裝編譯后的系統鏡像,并測試長按 power 鍵是否已經無法關機。?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?
注意:該方法需要您具備一定的 Android 系統開發經驗,并且需要對設備進行 ROOT 操作才能實現。另外,修改系統源代碼可能會導致系統不穩定或無法正常升級,請謹慎操作。?? ?
https://www.rockchip.fr/RK809%20datasheet%20V1.01.pdf
RK809 Datasheet
【付費下載】
https://bbs.16rd.com/thread-566291-1-1.html
[瑞芯微RK資料]?瑞芯微RK809 datasheet數據手冊1.4修訂版本
如果 RK809的開機模式是寫死了。我司需要 等待 2s時間 【以防 誤操作/誤觸發】
可以使用這個上電邏輯不?
先讓 RK809檢測到500ms 開機指令,如果檢測到,先【清除掉 寄存器中的開機指示?】,然后讓 RK809等待1.5s == 1500ms,
現在 在 檢測 電源鍵 是否還是按下的。如果是的。走正常的開機邏輯。
如果不是,就判定為 誤操作,關機了。
或者您這邊有更好的 上電邏輯/建議?
沒有這樣改過不清楚是否可行 ,如果是完全掉電的情況下rk809的寄存器是會重新初始化的,需要注意完全掉電的情況下 這個長按短按開機的判斷不會生效@造詣==灶燚?
1、我們地面站的電池是 直接 焊接到板上的。只要電池有電,可以保證 RK3566總是有電的。
2、我的考慮是在UBOOT階段 使用2000 ms來判斷RK809是 真實 需求上電?
還是 誤觸發。
【如果是誤觸發,直接在uboot階段就關機了】
就算RK809掉電 也沒有關系吧?
請問RK809的0xF7,里面的 PWRON_LP_TM 可以配置成為長按2秒鐘開機嗎??
不清楚這個寄存器實際對應的是哪個,你可以用i2cget ?與i2cset 工具查看默認值 ,修改對應寄存器值測試
可以嘗試在uboot 啟動的時候在rk809的驅動 初始化部分添加操作寄存器的部分 ?通過這兩個去獲取對應pmic的引腳狀態或著這個按鍵按下的狀態看下
https://www.elecfans.com/d/2092347.html
【深圳觸覺智能技術分享】RK3568 RK809電量計電池調試
https://www.elecfans.com/d/2089149.html
基于IDO-SBC3568主板說明PMIC RK809電量計的調試方法-電子發燒友網
https://blog.csdn.net/Industio_CSDN/article/details/130921874?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-130921874-blog-107173710.235^v43^pc_blog_bottom_relevance_base5&spm=1001.2101.3001.4242.2&utm_relevant_index=4
https://blog.csdn.net/Industio_CSDN/article/details/130921874
【深圳觸覺智能技術分享】RK3568 RK809電量計電池調試
https://blog.csdn.net/qq_40715266/article/details/130229120?spm=1001.2101.3001.6650.18&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-130229120-blog-107173710.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-18-130229120-blog-107173710.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=21
https://blog.csdn.net/qq_40715266/article/details/130229120
rk3568-rk809電池電量計
[*] CW2015 Battery driver
https://www.rockchip.fr/RK809%20datasheet%20V1.01.pdf
RK809 Datasheet
【PDF】
Rockchip RK809 Datasheet
文件格式:PDF/Adobe Acrobat -
翻譯此頁
7 RK809 Datasheet Rev 1.01 Chapter 1 Introduction 1.1 Overview The RK809 is a complex power-management integrated circuit (PMIC) integrated CODEC for multi-core system applications powered by an external power supply. The RK809 can provide a complete power management solution with very few ...
www.rockchip.fr/RK809 datasheet...
【參考資料:】
https://damodev.csdn.net/68243289a5baf817cf4bb2d5.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MjQwNTYwLCJleHAiOjE3NDk1Mzk2ODksImlhdCI6MTc0ODkzNDg4OSwidXNlcm5hbWUiOiJ3YjQ5MTYifQ.H5IbfRcXuGLiIByHSErH_Ot8Y5r_XJUMkbGuVadaNkw&spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-4-146173693-blog-107173710.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EYuanLiJiHua%7Eactivity-4-146173693-blog-107173710.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=7
https://damodev.csdn.net/68243289a5baf817cf4bb2d5.html
RK809-5電源管理芯片(PMIC)主要有以下幾種開機模式:
BING:RK809 dts press-on-time = <0>;
https://blog.csdn.net/cew333/article/details/126164529
[RK3568 Android11] RK809開機短按時間設置和長按電源鍵設置
https://www.codeleading.com/article/72216664876/
[RK3568 Android11] RK809開機短按時間設置和長按電源鍵設置
一、長按電源鍵 ? ? ? ? ? ? 關機
二、短按開機電源鍵響應時間 開機
https://www.uudwc.com/A/dMX9M/
rk3568 長按電源鍵關機修改
https://blog.csdn.net/u011774634/article/details/132744969?spm=1001.2101.3001.6650.17&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-17-132744969-blog-115718749.235%5Ev43%5Epc_blog_bottom_relevance_base5&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-17-132744969-blog-115718749.235%5Ev43%5Epc_blog_bottom_relevance_base5&utm_relevant_index=21
https://blog.csdn.net/u011774634/article/details/132744969
RK3588S Android12修改短按電源鍵的開機按鍵時長
RK806的power按鍵開機時長有2種選擇,通過如下寄存器進行配置:
默認為20mS,如果要改為500mS,則將0x76寄存器的第7位寫0即可。
dts修改方法為在rk806的節點中增加如下屬性即可,如下修改:
--- a/kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
+++ b/kernel-5.10/arch/arm64/boot/dts/rockchip/rk3588-rk806-single.dtsi
@@ -43,6 +43,8 @@
* ? ?and simultaneously pull down the RESETB PIN for 5mS before releasing
*/
pmic-reset-func = <1>;
+ ? ? ? ? ? ? ??
+ ? ? ? ? ? ? ? pwron-on-time-500ms;
vcc1-supply = <&vcc5v0_sys>;
vcc2-supply = <&vcc5v0_sys>;
pwron-on-time-500ms的解析參考kernel-5.10\drivers\mfd\rk806-core.c中如下代碼:
? ? /* PWRON_ON_TIME: 0:500mS; 1:20mS */
if (device_property_read_bool(dev, "pwron-on-time-500ms"))
rk806_field_write(rk806, PWRON_ON_TIME, 0x00);
https://blog.csdn.net/tianlai1009/article/details/107173710?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522d5016a5486700307a67c49ef8efaa4be%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=d5016a5486700307a67c49ef8efaa4be&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-8-107173710-null-null.142^v102^pc_search_result_base6&utm_term=RK3566%20uboot%20%E9%95%BF%E6%8C%89%20%E5%BC%80%E6%9C%BA&spm=1018.2226.3001.4187
https://blog.csdn.net/tianlai1009/article/details/107173710
RK809搞一下長按PWR鍵重啟
拿到的源碼默認長按關機,短按開機,
不要長按關機,
只要長按重啟
那么看一下規格書:
看一下驅動:
沒有做這個寄存器的配置?i2cset測試一下:
i2cget -f -y 0 0x20 0xf7
0x86
默認是86,長按關機,
那自己加一下試試:
i2cset -f -y 0 0x20 0xf7 0xc6
測試成功。
自己加一下寄存器初始化:
/* power down configuration 0xf7 */
#define RK817_PWR_KEY_LONG_PRESS_MASK ? ? ? ?BIT(6)
#define RK817_PWR_KEY_LONG_PRESS_H ? ? ? ? ? ?BIT(6)
#define RK817_PWR_KEY_LONG_PRESS_L ? ? ? ? ? ?(0)
static const struct rk808_reg_data rk817_pre_init_reg[] = {
? ? {RK817_RTC_CTRL_REG, RTC_STOP, RTC_STOP},
{RK817_GPIO_INT_CFG, RK817_INT_POL_MSK, RK817_INT_POL_L},
{RK817_SYS_CFG(1), RK817_HOTDIE_TEMP_MSK | RK817_TSD_TEMP_MSK,
RK817_HOTDIE_105 | RK817_TSD_140},
{RK817_PMIC_PWRON_KEY,RK817_PWR_KEY_LONG_PRESS_MASK,RK817_PWR_KEY_LONG_PRESS_H}
};