- Joined
- Jun 13, 2012
- Messages
- 152
- Motherboard
- Lenovo Ideapad Y510P
- CPU
- i7 4700MQ
- Graphics
- HD4600
- Mobile Phone
Hi all,
I have Lenovo Y510p and clean installed 10.11. I'm facing a battery problem where the it does not report the correct remaining time while charging. The state is correct, though, while discharging. Here's the steps I made:
1- I patched my native DSDT with the Y510p's battery patch available in Rehabman's repo
2- I have compared the native DSDT.dsl and the patched DSDT.dsl for SystemMemory differences and I can't see a real difference form the output:
3- Checked Method BSHK and added a case for _OSI ("Darwin") (everywhere)
4- I installed ACPIDebug.kext and patched my DSDT with debugging patches and added code to instrument _BST method while haunting for clues related to Amperage value:
5- I installed debug version of ACPIBatteryManager
6- This is the Amperage in mA at some point while charging (all reports the same value which is in the acceptable range according to ACPI specs):
I really not sure why would the AvgTimeToFull in IOREG while charging be 0x0 or 0x1 (which reflect 0:00 or 0:01 in battery indicator on menu bar) . I'm attaching a copy of IOREG while charging, my native DSDT.dsl, my patched DSDT.dsl and part of the log.
Thanks in advance.
I have Lenovo Y510p and clean installed 10.11. I'm facing a battery problem where the it does not report the correct remaining time while charging. The state is correct, though, while discharging. Here's the steps I made:
1- I patched my native DSDT with the Y510p's battery patch available in Rehabman's repo
2- I have compared the native DSDT.dsl and the patched DSDT.dsl for SystemMemory differences and I can't see a real difference form the output:
Code:
< OperationRegion (MBAR, SystemMemory, ((\_SB.PCI0.MHBR << 0x0F) + 0x5000), 0x1000)
> OperationRegion (MBAR, SystemMemory, Add (ShiftLeft (\_SB.PCI0.MHBR, 0x0F), 0x5000), 0x1000)
< OperationRegion (XHCP, SystemMemory, (PEBS + 0x000A0000), 0x0100)
> OperationRegion (XHCP, SystemMemory, Add (PEBS, 0x000A0000), 0x0100)
Code:
If (LOr(_OSI ("Darwin"), _OSI ("Windows 2012")))
{
Store (0x07DC, OSYS)
Store (0x04, Local1)
}
Code:
Method (_BST, 0, NotSerialized) // _BST: Battery Status
{
Name (PBST, Package (0x04)
{
Zero,
Ones,
Ones,
0x1770
})
Name (BAPR, Zero)
Name (RECA, Zero)
If (ECOK ())
{
Store (^^EC0.BST0, Index (PBST, Zero))
\rmdt.p2("Battery State PBST[0] is", ^^EC0.BST0)
Sleep (0x0A)
Store (^^EC0.BAC0, Local4)
Subtract (0xFFFF, Local4, Local4)
If (^^EC0.BAM0)
{
Store (Local4, Index (PBST, One))
\rmdt.p2("BAPR is", BAPR)
}
Else
{
Store (Local4, BAPR)
Multiply (BAPR, 0x0A, BAPR)
Store (BAPR, Index (PBST, One))
\rmdt.p2("Battery Present Rate PBST[1] is", BAPR)
}
Sleep (0x0A)
If (^^EC0.BAM0)
{
Store (^^EC0.BRC0, Index (PBST, 0x02))
}
Else
{
Store (^^EC0.BRC0, RECA)
Multiply (RECA, 0x0A, RECA)
Store (RECA, Index (PBST, 0x02))
\rmdt.p2("Battery Remaining Capacity PBST[2] is", RECA)
}
Sleep (0x0A)
Store (^^EC0.BPV0, Index (PBST, 0x03))
\rmdt.p2("Battery Present Voltage PBST[3] is", ^^EC0.BPV0)
Sleep (0x0A)
If (LNotEqual (^^EC0.BDN0, BMDL))
{
Notify (BAT1, 0x81)
}
}
// Calculating Amperage
// 1000 (dec) = 0x3E8 (hex)
Store (0x3E8,Local7)
Multiply (Local7, BAPR, Local7)
Divide (Local7, ^^EC0.BDV0, Local6, Local7)
\rmdt.p2 ("Amperage[mA] = 0x3E8 * PresentRate / DesignVoltage is", Local7)
// End Calculating Amperage
Return (PBST)
}
6- This is the Amperage in mA at some point while charging (all reports the same value which is in the acceptable range according to ACPI specs):
Code:
System Information: Amperage (mA): 59208
ACPIBatteryManager: fCurrentRate(mA) = 59208
IOREG Amperage = 0xe748
Calculated: ACPIDebug: { "Amperage[mA] = 0x3E8 * PresentRate / DesignVoltage is", 0xe748, }
I really not sure why would the AvgTimeToFull in IOREG while charging be 0x0 or 0x1 (which reflect 0:00 or 0:01 in battery indicator on menu bar) . I'm attaching a copy of IOREG while charging, my native DSDT.dsl, my patched DSDT.dsl and part of the log.
Thanks in advance.