Baio1977 / EFI-Hackintosh-collection

EFI Hackintosh collection Laptop , Desktop
87 stars 123 forks source link

About learning patch battery #10

Closed hoaug-tran closed 9 months ago

hoaug-tran commented 11 months ago

I have an Asus S430FN Laptop that has an error of only receiving 50% battery, I'm trying to fix it. I see you have succeeded in fixing the battery on many device. Therefore, I wonder if you can share the original DSDT and SSDT which has the Battery fixed of the device or how to patch the battery for me. Thanks a lot

i try patch battery like that. Patch Battery.zip

`DefinitionBlock ("", "SSDT", 2, "ACDT", "BATT", 0x00000000) { External (SB.PCI0.LPCB.EC0_, DeviceObj) External (SB.PCI0.LPCB.EC0_.ACAP, MethodObj) // 0 Arguments External (SB.PCI0.LPCB.EC0_.BAT0, DeviceObj) External (SB.PCI0.LPCB.EC0_.BAT0._BIF, MethodObj) // 0 Arguments External (SB.PCI0.LPCB.EC0_.BAT0.BIXT, PkgObj) External (SB.PCI0.LPCB.EC0_.BAT0.NBIX, PkgObj) External (SB.PCI0.LPCB.EC0_.BAT0.PBIF, PkgObj) External (SB.PCI0.LPCB.EC0_.BAT0.XBIX, MethodObj) // 0 Arguments External (SB.PCI0.LPCB.EC0_.BATP, MethodObj) // 1 Arguments External (SB.PCI0.LPCB.EC0_.BLLO, IntObj) External (SB.PCI0.LPCB.EC0_.BRAD, FieldUnitObj) External (SB.PCI0.LPCB.EC0_.BRAH, FieldUnitObj) External (SB.PCI0.LPCB.EC0_.BRAI, FieldUnitObj) External (SB.PCI0.LPCB.EC0_.BSLF, IntObj) External (SB.PCI0.LPCB.EC0_.CHGS, MethodObj) // 1 Arguments External (SB.PCI0.LPCB.EC0_.CMUT, MutexObj) External (SB.PCI0.LPCB.EC0_.ECAV, MethodObj) // 0 Arguments External (SB.PCI0.LPCB.EC0_.GBTT, MethodObj) // 1 Arguments External (SB.PCI0.LPCB.EC0_.LFCC, IntObj) External (SB.PCI0.LPCB.EC0_.MBLF, IntObj) External (SB.PCI0.LPCB.EC0_.PBST, IntObj) External (SB.PCI0.LPCB.EC0_.PUNT, IntObj) External (SB.PCI0.LPCB.EC0_.STC4, MethodObj) // 1 Arguments External (BIXT, IntObj) External (BLLO, IntObj) External (BSLF, IntObj) External (LFCC, IntObj) External (PUNT, IntObj) External (SB.PCI0.LPCB.EC0.BAIX, FieldUnitObj) External (SB.PCI0.LPCB.EC0.BADX, FieldUnitObj)

Method (B1B2, 2, NotSerialized)
{
    Return ((Arg0 | (Arg1 << 0x08)))
}

Method (B1B4, 4, NotSerialized)
{
    Local0 = (Arg2 | (Arg3 << 0x08))
    Local0 = (Arg1 | (Local0 << 0x08))
    Local0 = (Arg0 | (Local0 << 0x08))
    Return (Local0)
}

Method (W16B, 3, NotSerialized)
{
    Arg0 = Arg2
    Arg1 = (Arg2 >> 0x08)
}

Scope (_SB.PCI0.LPCB.EC0)
{
    OperationRegion (BRIX, SystemIO, 0x0381, One)
    Field (BRIX, ByteAcc, Lock, Preserve)
    {
        BRAH,   8
    }

    OperationRegion (BRAX, SystemIO, 0x0382, 0x02)
    Field (BRAX, ByteAcc, Lock, Preserve)
    {
        BRAI,   8, 
        BRAD,   8
    }

    IndexField (BAIX, BADX, ByteAcc, NoLock, Preserve)
    {
        Offset (0x04), 
        Offset (0x40), 
        Offset (0x6E), 
        Offset (0x8E), 
        Offset (0x90), 
        EB0S,   8, 
        Offset (0x98), 
        Offset (0x9C), 
        BVL0,   8, 
        BVL1,   8, 
        BVL2,   8, 
        BVL3,   8, 
        BRC0,   8, 
        BRC1,   8, 
        BRC2,   8, 
        BRC3,   8, 
        BFC0,   8, 
        BFC1,   8, 
        BFC2,   8, 
        BFC3,   8, 
        BMD0,   8, 
        BMD1,   8, 
        BMD2,   8, 
        BMD3,   8, 
        BST0,   8, 
        BST1,   8, 
        BST2,   8, 
        BST3,   8, 
        BCC0,   8, 
        BCC1,   8, 
        BCC2,   8, 
        BCC3,   8, 
        BDC0,   8, 
        BDC1,   8, 
        BDC2,   8, 
        BDC3,   8, 
        BDV0,   8, 
        BDV1,   8, 
        BDV2,   8, 
        BDV3,   8
    }

    Method (BVOT, 0, NotSerialized)
    {
        Acquire (CMUT, 0xFFFF)
        If (BSLF)
        {
            BRAH = 0xC9
            Local0 = B1B4 (BVL0, BVL1, BVL2, BVL3)
        }

        Release (CMUT)
        Return (Local0)
    }

    Method (BRCP, 0, NotSerialized)
    {
        Acquire (CMUT, 0xFFFF)
        If (BSLF)
        {
            BRAH = 0xC9
            Local0 = B1B4 (BRC0, BRC1, BRC2, BRC3)
        }

        Release (CMUT)
        If ((Local0 == 0xFFFF))
        {
            Local0 = Ones
        }

        Return (Local0)
    }

    Method (BIF2, 0, NotSerialized)
    {
        If (ECAV ())
        {
            Acquire (CMUT, 0xFFFF)
            If (BSLF)
            {
                BRAH = 0xC9
                Local0 = B1B4 (BFC0, BFC1, BFC2, BFC3)
            }

            Release (CMUT)
            Local0 &= 0xFFFF
        }
        Else
        {
            Local0 = Ones
        }

        Return (Local0)
    }

    Method (BIF3, 0, NotSerialized)
    {
        If (ECAV ())
        {
            Acquire (CMUT, 0xFFFF)
            If (BSLF)
            {
                BRAH = 0xC9
                Local0 = B1B4 (BMD0, BMD1, BMD2, BMD3)
            }

            Release (CMUT)
            If ((Local0 != 0xFFFF))
            {
                Local0 >>= 0x09
                Local0 &= One
                Local0 ^= One
            }
        }
        Else
        {
            Local0 = Ones
        }

        Return (Local0)
    }

    Method (BIF0, 0, NotSerialized)
    {
        If (ECAV ())
        {
            Acquire (CMUT, 0xFFFF)
            If (BSLF)
            {
                BRAH = 0xC9
                Local0 = B1B4 (BMD0, BMD1, BMD2, BMD3)
            }

            Release (CMUT)
            If ((Local0 != 0xFFFF))
            {
                Local1 = (Local0 >> 0x0F)
                Local1 &= One
                Local0 = (Local1 ^ One)
            }
        }
        Else
        {
            Local0 = Ones
        }

        Return (Local0)
    }

    Method (BSTS, 0, NotSerialized)
    {
        Acquire (CMUT, 0xFFFF)
        If (BSLF)
        {
            BRAH = 0xC9
            Local0 = B1B4 (BST0, BST1, BST2, BST3)
        }

        Release (CMUT)
        Return (Local0)
    }

    Method (BCRT, 0, NotSerialized)
    {
        Acquire (CMUT, 0xFFFF)
        If (BSLF)
        {
            BRAH = 0xC9
            Local0 = B1B4 (BCC0, BCC1, BCC2, BCC3)
        }

        Release (CMUT)
        Return (Local0)
    }

    Method (BIF1, 0, NotSerialized)
    {
        If (ECAV ())
        {
            Acquire (CMUT, 0xFFFF)
            If (BSLF)
            {
                BRAH = 0xC9
                Local0 = B1B4 (BDC0, BDC1, BDC2, BDC3)
            }

            Release (CMUT)
            Local0 &= 0xFFFF
        }
        Else
        {
            Local0 = Ones
        }

        Return (Local0)
    }

    Method (BIF4, 0, NotSerialized)
    {
        If (ECAV ())
        {
            Acquire (CMUT, 0xFFFF)
            If (BSLF)
            {
                BRAH = 0xC9
                Local0 = B1B4 (BDV0, BDV1, BDV2, BDV3)
            }

            Release (CMUT)
        }
        Else
        {
            Local0 = Ones
        }

        Return (Local0)
    }

    Method (FBST, 4, NotSerialized)
    {
        Local1 = (Arg1 & 0xFFFF)
        Local0 = Zero
        If (ACAP ())
        {
            Local0 = One
        }

        If (Local0)
        {
            If (CHGS (Zero))
            {
                Local0 = 0x02
            }
            Else
            {
                Local0 = One
            }
        }
        Else
        {
            Local0 = One
        }

        If (BLLO)
        {
            Local2 = 0x04
            Local0 |= Local2
        }

        BRAH = 0xC9
        If ((EB0S & 0x08))
        {
            Local2 = 0x04
            Local0 |= Local2
        }

        If ((Local1 >= 0x8000))
        {
            Local1 = (0xFFFF - Local1)
        }

        Local2 = Arg2
        If ((PUNT == Zero))
        {
            Acquire (CMUT, 0xFFFF)
            BRAH = 0xC9
            Local1 *= B1B4 (BDV0, BDV1, BDV2, BDV3)
            Release (CMUT)
            Local2 *= 0x0A
        }

        Local3 = (Local0 & 0x02)
        If (!Local3)
        {
            Local3 = (LFCC - Local2)
            Divide (LFCC, 0xC8, Local4, Local5)
            If ((Local3 < Local5))
            {
                Local2 = LFCC /* External reference */
            }
        }
        Else
        {
            Divide (LFCC, 0xC8, Local4, Local5)
            Local4 = (LFCC - Local5)
            If ((Local2 > Local4))
            {
                Local2 = Local4
            }
        }

        If (!ACAP ())
        {
            Divide (Local2, MBLF, Local3, Local4)
            If ((Local1 < Local4))
            {
                Local1 = Local4
            }
        }

        PBST [Zero] = Local0
        PBST [One] = Local1
        PBST [0x02] = Local2
        PBST [0x03] = Arg3
    }

    Method (CBST, 0, NotSerialized)
    {
        If (PUNT)
        {
            Acquire (CMUT, 0xFFFF)
            BRAH = 0xC9
            PBST [0x03] = B1B4 (BDV0, BDV1, BDV2, BDV3)
            Release (CMUT)
            Local0 = DerefOf (PBST [0x03])
            PBST [One] = (DerefOf (PBST [One]) * Local0)
            PBST [One] = (DerefOf (PBST [One]) / 0x03E8)
            PBST [0x02] = (DerefOf (PBST [0x02]) * Local0)
            PBST [0x02] = (DerefOf (PBST [0x02]) / 0x03E8)
        }
    }

    Method (RE1B, 1, NotSerialized)
    {
        OperationRegion (ERM2, EmbeddedControl, Arg0, One)
        Field (ERM2, ByteAcc, NoLock, Preserve)
        {
            BYTE,   8
        }

        Return (BYTE) /* \_SB_.PCI0.LPCB.EC0_.RE1B.BYTE */
    }

    Method (RECB, 2, Serialized)
    {
        Arg1 = ((Arg1 + 0x07) >> 0x03)
        Name (TEMP, Buffer (Arg1){})
        Arg1 += Arg0
        Local0 = Zero
        While ((Arg0 < Arg1))
        {
            TEMP [Local0] = RE1B (Arg0)
            Arg0++
            Local0++
        }

        Return (TEMP) /* \_SB_.PCI0.LPCB.EC0_.RECB.TEMP */
    }

    Method (WE1B, 2, NotSerialized)
    {
        OperationRegion (ERM2, EmbeddedControl, Arg0, One)
        Field (ERM2, ByteAcc, NoLock, Preserve)
        {
            BYTE,   8
        }

        BYTE = Arg1
    }

    Method (WECB, 3, Serialized)
    {
        Arg1 = ((Arg1 + 0x07) >> 0x03)
        Name (TEMP, Buffer (Arg1){})
        TEMP = Arg2
        Arg1 += Arg0
        Local0 = Zero
        While ((Arg0 < Arg1))
        {
            WE1B (Arg0, DerefOf (TEMP [Local0]))
            Arg0++
            Local0++
        }
    }
}

Scope (_SB.PCI0.LPCB.EC0.BAT0)
{
    Method (_BIX, 0, NotSerialized)  // _BIX: Battery Information Extended
    {
        If (_OSI ("Darwin"))
        {
            If (!BATP (Zero))
            {
                Return (\_SB.PCI0.LPCB.EC0.BAT0.XBIX ())
            }

            If ((GBTT (Zero) == 0xFF))
            {
                Return (\_SB.PCI0.LPCB.EC0.BAT0.XBIX ())
            }

            _BIF ()
            BIXT [One] = DerefOf (PBIF [Zero])
            BIXT [0x02] = DerefOf (PBIF [One])
            BIXT [0x03] = DerefOf (PBIF [0x02])
            BIXT [0x04] = DerefOf (PBIF [0x03])
            BIXT [0x05] = DerefOf (PBIF [0x04])
            BIXT [0x06] = DerefOf (PBIF [0x05])
            BIXT [0x07] = DerefOf (PBIF [0x06])
            BIXT [0x0E] = DerefOf (PBIF [0x07])
            BIXT [0x0F] = DerefOf (PBIF [0x08])
            BIXT [0x10] = DerefOf (PBIF [0x09])
            BIXT [0x11] = DerefOf (PBIF [0x0A])
            BIXT [0x12] = DerefOf (PBIF [0x0B])
            BIXT [0x13] = DerefOf (PBIF [0x0C])
            If ((DerefOf (BIXT [One]) == One))
            {
                BIXT [One] = Zero
                Local0 = DerefOf (BIXT [0x05])
                BIXT [0x02] = (DerefOf (BIXT [0x02]) * Local0)
                BIXT [0x03] = (DerefOf (BIXT [0x03]) * Local0)
                BIXT [0x06] = (DerefOf (BIXT [0x06]) * Local0)
                BIXT [0x07] = (DerefOf (BIXT [0x07]) * Local0)
                BIXT [0x0E] = (DerefOf (BIXT [0x0E]) * Local0)
                BIXT [0x0F] = (DerefOf (BIXT [0x0F]) * Local0)
                Divide (DerefOf (BIXT [0x02]), 0x03E8, Local0, BIXT [0x02])
                Divide (DerefOf (BIXT [0x03]), 0x03E8, Local0, BIXT [0x03])
                Divide (DerefOf (BIXT [0x06]), 0x03E8, Local0, BIXT [0x06])
                Divide (DerefOf (BIXT [0x07]), 0x03E8, Local0, BIXT [0x07])
                Divide (DerefOf (BIXT [0x0E]), 0x03E8, Local0, BIXT [0x0E])
                Divide (DerefOf (BIXT [0x0F]), 0x03E8, Local0, BIXT [0x0F])
            }

            Local0 = (STC4 (0x2F) << 0x08)
            Local0 += STC4 (0x2E)
            BIXT [0x08] = Local0
            BIXT [0x09] = 0x0001869F
            Return (BIXT) /* External reference */
        }
        Else
        {
            Return (\_SB.PCI0.LPCB.EC0.BAT0.XBIX ())
        }
    }
}

}`

Baio1977 commented 11 months ago

Add ECEnabler.kext remove SSDT-Batt

hoaug-tran commented 11 months ago

@Baio1977 Thank you so much. but ECEnabler.kext not help me, my battery still have half

Baio1977 commented 11 months ago

can you pass me the efi? Test this EFI and post ioreg https://github.com/masnormen/S430FN-macOS

hoaug-tran commented 11 months ago

@Baio1977 thanks but, the EFI you send me is extremely prebuild. i cant use it, i tried but stuck at boot.

Here is my EFI ( cant send at github because >25MB so i upload it to GDrive ) and Ioreg:

https://drive.google.com/file/d/128qX-PRNgV4QNBIc5gh141xIFTPF_P6V/view?usp=sharing 808’s MacBook Pro.zip

Baio1977 commented 11 months ago

https://drive.google.com/drive/folders/1QbDZh1wbsZm5rg_B7UdgXhBQ0TdeLVvp?usp=sharing test this ioreg if start . If this starts and works like the previous one we start from here, I have cleaned the ACPI from SSDT which need rename to work

hoaug-tran commented 11 months ago

The sad news is that with the EFI you sent me, it's stuck here 387330379_873168400819141_3878667210848216200_n

Baio1977 commented 11 months ago

https://drive.google.com/drive/folders/1QbDZh1wbsZm5rg_B7UdgXhBQ0TdeLVvp test this efi

hoaug-tran commented 11 months ago

@Baio1977 still stuck.. image