- 积分
- 73
- 最后登录
- 2020-11-16
- 精华
- 0
- 阅读权限
- 20
- 主题
- 4
- UID
- 1939996
- 帖子
- 108
- PB币
- 38
- 威望
- 5
- 贡献
- 0
- 技术
- 1
- 活跃
- 109
- UID
- 1939996
- 帖子
- 108
- PB币
- 38
- 贡献
- 0
- 技术
- 1
- 活跃
- 109
|
本帖最后由 429839446 于 2015-7-31 14:30 编辑
根据daxuexinsheng的[教程] [重新整理逻辑] 电量补丁制作教程制作了华硕R556LJ5200的电量补丁,配合Rehabman的ACPIBatteryManager成功显示电量。
但是现在出现了几个问题。
1、系统计算出来的估计剩余时间错误,导致电池在高电量状态下即出现红色电池图标。
2、充满电后不能维持适配器供电,自动切换至电池。
3、充满电后拔掉适配器,屏幕亮度降低到最低档黑屏。
4、反复插入\拔除适配器,屏幕亮度能够自动升高\降低,但是随着每次插入\拔除,总体的亮度越来越高,即每次插入、拔除后亮度与前一次不一致,均比前一次升高。
对于这些问题,有何解决方案?
下面就是我照猫画虎制作的电量补丁。
- # ==== Field devide 字段拆分 ====
- # 16-bit registers
- into device label EC0 code_regex TAH0,\s+16, replace_matched begin
- TAHA,8,TAHB,8, end;
- into device label EC0 code_regex TAH1,\s+16, replace_matched begin
- TAHC,8,TAHD,8, end;
- into device label EC0 code_regex B0C3,\s+16, replace_matched begin
- B0CA,8,B0CB,8, end;
- into device label EC0 code_regex B0SN,\s+16, replace_matched begin
- B0SA,8,B0SB,8, end;
- into device label EC0 code_regex DT2B,\s+16 replace_matched begin
- DT2C,8,DT2D,8, end;
- into device label EC0 code_regex B1SN,\s+16 replace_matched begin
- B0N0,8,B0N1,8 end;
- # ==== Replace called method 替换调用方法 ====
- # fix 16-bit methods
- into method label TACH code_regex TAH0 replaceall_matched begin B1B2(TAHA,TAHB) end;
- into method label TACH code_regex TAH1 replaceall_matched begin B1B2(TAHC,TAHD) end;
- into_all method label _BIX code_regex \^\^LPCB.EC0.B0C3 replaceall_matched begin B1B2 (^^LPCB.EC0.B0CA, ^^LPCB.EC0.B0CB) end;
- into method label BIFA code_regex B0SN replaceall_matched begin B1B2(B0SA,B0SB) end;
- into method label BIFA code_regex B1SN replaceall_matched begin B1B2(B0N0,B0N1) end;
- into method label SMBR code_regex DT2B replaceall_matched begin B1B2(DT2C,DT2D) end;
- into method label SMBW code_regex DT2B\s=\sArg4 replaceall_matched begin Store (ShiftRight(Arg4,8),DT2C)\nStore (Arg4,DT2D) end;
- # fix 256-bit methods
- #BDAT
- into method label SMBR code_regex Index\s\(Local0,\s0x02\)\s=\sBDAT replaceall_matched begin Index (Local0, 0x02) = RECB(0x1c, 256) end;
- into method label ECSB code_regex Index\s\(Local1,\s0x04\)\s=\sBDAT replaceall_matched begin Index (Local1, 0x04) = RECB(0x1c, 256) end;
- into method label SMBR code_regex BDAT\s=\sZero replaceall_matched begin WECB(0x1c,256,0) end;
- into method label SMBW code_regex BDAT\s=\sZero replaceall_matched begin WECB(0x1c,256,0) end;
- into method label SMBW code_regex BDAT\s=\sArg4 replaceall_matched begin WECB(0x1c,256,Arg4) end;
- into method label ECSB code_regex BDAT\s=\sDerefOf\s\(Index\s\(Arg6,\sOne\)\) replaceall_matched begin WECB(0x1c,256,DerefOf (Index (Arg6, One))) end;
- #BDA2
- into method label ECSB code_regex Index\s\(Local1,\s0x04\)\s\=\sBDA2 replaceall_matched begin Index (Local1, 0x04) =RECB(0x44, 256) end;
- into method label ECSB code_regex BDA2\s=\sDerefOf\s\(Index\s\(Arg6,\sOne\)\) replaceall_matched begin WECB(0x44,256,DerefOf (Index (Arg6, One))) end;
- # ==== Data handling method 数据处理方法 ====
- #16
- into method label B1B2 remove_entry;
- into definitionblock code_regex . insert
- begin
- Method (B1B2, 2, NotSerialized)\n
- {\n
- Return(Or(Arg0, ShiftLeft(Arg1, 8)))\n
- }\n
- end;
- #256
- # utility methods to read/write buffers from/to EC
- into method label RE1B parent_label EC0 remove_entry;
- into method label RECB parent_label EC0 remove_entry;
- into device label EC0 insert
- begin
- Method (RE1B, 1, NotSerialized)\n
- {\n
- OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
- Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
- Return(BYTE)\n
- }\n
- Method (RECB, 2, Serialized)\n
- // Arg0 - offset in bytes from zero-based EC\n
- // Arg1 - size of buffer in bits\n
- {\n
- ShiftRight(Arg1, 3, Arg1)\n
- Name(TEMP, Buffer(Arg1) { })\n
- Add(Arg0, Arg1, Arg1)\n
- Store(0, Local0)\n
- While (LLess(Arg0, Arg1))\n
- {\n
- Store(RE1B(Arg0), Index(TEMP, Local0))\n
- Increment(Arg0)\n
- Increment(Local0)\n
- }\n
- Return(TEMP)\n
- }\n
- end;
- into method label WE1B parent_label EC0 remove_entry;
- into method label WECB parent_label EC0 remove_entry;
- into device label EC0 insert
- begin
- Method (WE1B, 2, NotSerialized)\n
- {\n
- OperationRegion(ERAM, EmbeddedControl, Arg0, 1)\n
- Field(ERAM, ByteAcc, NoLock, Preserve) { BYTE, 8 }\n
- Store(Arg1, BYTE)\n
- }\n
- Method (WECB, 3, Serialized)\n
- // Arg0 - offset in bytes from zero-based EC\n
- // Arg1 - size of buffer in bits\n
- // Arg2 - value to write\n
- {\n
- ShiftRight(Arg1, 3, Arg1)\n
- Name(TEMP, Buffer(Arg1) { })\n
- Store(Arg2, TEMP)\n
- Add(Arg0, Arg1, Arg1)\n
- Store(0, Local0)\n
- While (LLess(Arg0, Arg1))\n
- {\n
- WE1B(Arg0, DerefOf(Index(TEMP, Local0)))\n
- Increment(Arg0)\n
- Increment(Local0)\n
- }\n
- }\n
- end;
复制代码
说明一下,iasl反编译可能会开启优化,那么数学运算之类的Method将会优化为数学符号,这时候需要修改一下补丁以适应dsdt。 |
|