#Patch for working battery status on Yoga 3 14 # Patch 16 Bit fields #First the declaration into device label EC0 code_regex B1RC,\s+16, replace_matched begin IRC0,8,IRC1,8, end; into device label EC0 code_regex B1SN,\s+16, replace_matched begin ISN0,8,ISN1,8, end; into device label EC0 code_regex B1FV,\s+16, replace_matched begin IFV0,8,IFV1,8, end; into device label EC0 code_regex B1DV,\s+16, replace_matched begin IDV0,8,IDV1,8, end; into device label EC0 code_regex B1DC,\s+16, replace_matched begin IDC0,8,IDC1,8, end; into device label EC0 code_regex B1FC,\s+16, replace_matched begin IFC0,8,IFC1,8, end; into device label EC0 code_regex B1CR,\s+16, replace_matched begin ICR0,8,ICR1,8, end; into device label EC0 code_regex B1AC,\s+16, replace_matched begin IAC0,8,IAC1,8, end; into device label EC0 code_regex B1CC,\s+16, replace_matched begin ICC0,8,ICC1,8, end; into device label EC0 code_regex B1SM,\s+16, replace_matched begin ISM0,8,ISM1,8, end; into device label EC0 code_regex B1C1,\s+16, replace_matched begin IC10,8,IC11,8, end; into device label EC0 code_regex B1C2,\s+16, replace_matched begin IC20,8,IC21,8, end; into device label EC0 code_regex B1C3,\s+16, replace_matched begin IC30,8,IC31,8, end; into device label EC0 code_regex B1C4,\s+16, replace_matched begin IC40,8,IC41,8, end; into device label EC0 code_regex B1DA,\s+16, replace_matched begin IDA0,8,IDA1,8, end; into device label EC0 code_regex LUXV,\s+16, replace_matched begin UXV0,8,UXV1,8, end; #Now the function for access into method label B1B2 remove_entry; into definitionblock code_regex . insert begin Method (B1B2, 2, NotSerialized) { Return(Or(Arg0, ShiftLeft(Arg1, 8))) }\n end; #now the access into method label _BIF code_regex \(B1DC, replaceall_matched begin (B1B2(IDC0,IDC1), end; into method label _BIF code_regex \(B1FC, replaceall_matched begin (B1B2(IFC0,IFC1), end; into method label _BIF code_regex \(B1DV, replaceall_matched begin (B1B2(IDV0,IDV1), end; into method label _BST code_regex \(B1AC, replaceall_matched begin (B1B2(IAC0,IAC1), end; into method label _BST code_regex \(B1RC, replaceall_matched begin (B1B2(IRC0,IRC1), end; into method label _BST code_regex \(B1FV, replaceall_matched begin (B1B2(IFV0,IFV1), end; into method label SMTF code_regex \(B1FV, replaceall_matched begin (B1B2(IFV0,IFV1), end; into method label SMTF code_regex \(B1AC, replaceall_matched begin (B1B2(IAC0,IAC1), end; into method label SMTF code_regex \(B1FC, replaceall_matched begin (B1B2(IFC0,IFC1), end; into method label SMTF code_regex \(B1RC, replaceall_matched begin (B1B2(IRC0,IRC1), end; ########now get the bigger fields done #into device label EC0 code_regex (FWBT,)\s+(64) replace_matched begin FWBX,%2,//%1%2 end; #into device label EC0 code_regex (SMDA,)\s+(256) replace_matched begin SMDX,%2,//%1%2 end; #into device label EC0 code_regex (BMN0,)\s+(72) replace_matched begin BMNX,%2,//%1%2 end; #into device label EC0 code_regex (BDN0,)\s+(64) replace_matched begin BDNX,%2,//%1%2 end; ####### access to variables reading into method label MHIF code_regex \(FWBT, replaceall_matched begin (RECB(0x14,64), end; into method label GBID code_regex \(FWBT, replaceall_matched begin (RECB(0x14,64), end; into method label MHPF code_regex \(SMDA, replaceall_matched begin (RECB(0x64,256), end; into method label MHPF code_regex \Store (FB4, SMDA) replaceall_matched begin WECB(0x64,256, FB4) end; ################################ 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;