I won't be patching it for you. But I'll help you with analysing the debug output if you were to instrument your _BST method with ACPIDebug. Your hack... your responsibility to determine what is wrong.
Here is the code :
Method (_BST, 0, NotSerialized) // _BST: Battery Status
{
Store (Zero, Index (PBST, Zero))
Store (Ones, Index (PBST, One))
Store (Ones, Index (PBST, 0x02))
Store (Ones, Index (PBST, 0x03))
If (LNot (^^LPCB.EC0.BATP (Zero)))
{
Store (One, Index (PBST, Zero))
Return (PBST)
}
If (LEqual (^^LPCB.EC0.GBTT (Zero), 0xFF))
{
Return (PBST)
}
If (MES4)
{
Decrement (MES4)
Return (PBST)
}
BATO ()
BATS (Zero)
Store (^^LPCB.EC0.BSTS (), Local0)
Store (^^LPCB.EC0.BCRT (), Local1)
Store (^^LPCB.EC0.BRCP (), Local2)
Store (^^LPCB.EC0.BVOT (), Local3)
If (LNotEqual (Local0, Ones))
{
If (LNotEqual (Local1, Ones))
{
If (LNotEqual (Local2, Ones))
{
If (LNotEqual (Local3, Ones))
{
FBST (Local0, Local1, Local2, Local3)
CBST ()
}
}
}
}
BATR ()
\RMDT.P1 (DerefOf (Index (PBST, Zero)))
\RMDT.P1 (DerefOf (Index (PBST, One)))
\RMDT.P1 (DerefOf (Index (PBST, 0x02)))
\RMDT.P1 (DerefOf (Index (PBST, 0x03)))
Return (PBST)
}
Because the method will execute the last "Return (PBST)" So I just add fours debug commands before the last RETURN .And the debug output :
15/5/15 00:42:31.000 kernel[0]: ACPIDebug: 0x1
15/5/15 00:42:31.000 kernel[0]: ACPIDebug: 0x0
15/5/15 00:42:31.000 kernel[0]: ACPIDebug: 0x8cf2
15/5/15 00:42:31.000 kernel[0]: ACPIDebug: 0x39d0
15/5/15 00:43:01.000 kernel[0]: ACPIDebug: 0x1
15/5/15 00:43:01.000 kernel[0]: ACPIDebug: 0x0
15/5/15 00:43:01.000 kernel[0]: ACPIDebug: 0x8cf2
15/5/15 00:43:01.000 kernel[0]: ACPIDebug: 0x39d0
15/5/15 00:43:31.000 kernel[0]: ACPIDebug: 0x1
15/5/15 00:43:31.000 kernel[0]: ACPIDebug: 0x0
15/5/15 00:43:31.000 kernel[0]: ACPIDebug: 0x8cf2
15/5/15 00:43:31.000 kernel[0]: ACPIDebug: 0x39d0
15/5/15 00:44:01.000 kernel[0]: ACPIDebug: 0x1
15/5/15 00:44:01.000 kernel[0]: ACPIDebug: 0x0
15/5/15 00:44:01.000 kernel[0]: ACPIDebug: 0x8cf2
15/5/15 00:44:01.000 kernel[0]: ACPIDebug: 0x39d0
15/5/15 00:44:31.000 kernel[0]: ACPIDebug: 0x1
15/5/15 00:44:31.000 kernel[0]: ACPIDebug: 0x0
15/5/15 00:44:31.000 kernel[0]: ACPIDebug: 0x8cf2
15/5/15 00:44:31.000 kernel[0]: ACPIDebug: 0x39d0
15/5/15 00:45:01.000 kernel[0]: ACPIDebug: 0x1
15/5/15 00:45:01.000 kernel[0]: ACPIDebug: 0x0
15/5/15 00:45:01.000 kernel[0]: ACPIDebug: 0x8cf2
15/5/15 00:45:01.000 kernel[0]: ACPIDebug: 0x39d0 ......
every value comes from the Package PBST...I think it controls the status...And the first element should be 0x0 not 0x1 above if fully charged.I maybe wrong.