Jump to content

Thinkpad T520 Laptop display doesn't work until "Detect Displays" clicked


coolstarorg
 Share

16 posts in this topic

Recommended Posts

I have a Thinkpad T520 with the NVIDIA Quadro NVS 4200M (same chipset as GeForce GT 520M) (Optimus disabled). However, on boot, the laptop display doesn't work. (DVI out works fine though). If I go to Display Preferences, and click "Detect Displays" though, the laptop display starts working with QE/CI and brightness controls (from DSDT editing). Is there a way I can have the laptop display work automatically on boot?

 

I've fixed the other graphics issues I had before with EDID editing and DSDT editing (color banding and brightness issues fixed). I just need this display detection issue and HDMI Audio fixed and my laptop is good to go with OS X!

 

This is the relevant snippet from my DSDT:

Device (VID)
                {
                    Name (_ADR, Zero)
                    OperationRegion (VPCG, PCI_Config, Zero, 0x0100)
                    Field (VPCG, DWordAcc, NoLock, Preserve)
                    {
                                Offset (0x2C), 
                        VSID,   32, 
                                Offset (0x70), 
                        VPWR,   8
                    }

                    Name (_S3D, 0x03)
                    Name (DGOS, Zero)
                    Method (_INI, 0, NotSerialized)
                    {
                        VUPS (0x02)
                        Store (VCDL, VQDL)
                        Store (VCDC, VQDC)
                        Store (VCDT, VQD0)
                        Store (VCDD, VQD1)
                        If (ISOP ())
                        {
                            VHYB (0x04, One)
                        }
                    }

                    Method (_PS0, 0, NotSerialized)
                    {
                        If (ISOP ())
                        {
                            If (DGOS)
                            {
                                VHYB (0x02, Zero)
                                Sleep (0x64)
                                VHYB (Zero, One)
                                Sleep (0x0A)
                                Store (One, ^^^LPC.PCRS)
                                Store (One, ^^^LPC.PCRQ)
                                Sleep (0x64)
                                VHYB (0x02, One)
                                Sleep (One)
                                VHYB (0x08, One)
                                Store (0x0A, Local0)
                                Store (0x32, Local1)
                                While (Local1)
                                {
                                    Sleep (Local0)
                                    If (LCHK (One))
                                    {
                                        Break
                                    }

                                    Decrement (Local1)
                                }

                                Store (Zero, ^^^LPC.PCRQ)
                                VHYB (0x04, Zero)
                                SWTT (One)
                                Store (Zero, DGOS)
                            }
                            Else
                            {
                                If (LNotEqual (VSID, 0x21D117AA))
                                {
                                    VHYB (0x04, Zero)
                                }
                            }

                            VHYB (0x09, HDAS)
                        }
                    }

                    Method (_PS1, 0, NotSerialized)
                    {
                        Noop
                    }

                    Method (_PS2, 0, NotSerialized)
                    {
                        Noop
                    }

                    Method (_PS3, 0, NotSerialized)
                    {
                        If (ISOP ())
                        {
                            If (LEqual (OMPR, 0x03))
                            {
                                SWTT (Zero)
                                VHYB (0x08, Zero)
                                Store (0x0A, Local0)
                                Store (0x32, Local1)
                                While (Local1)
                                {
                                    Sleep (Local0)
                                    If (LCHK (Zero))
                                    {
                                        Break
                                    }

                                    Decrement (Local1)
                                }

                                VHYB (0x02, Zero)
                                Sleep (0x64)
                                VHYB (Zero, Zero)
                                Store (One, DGOS)
                                Store (0x02, OMPR)
                            }
                        }
                    }

                    Method (_STA, 0, NotSerialized)
                    {
                        Return (0x0F)
                    }

                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x24)
                            {
                                "AAPL,backlight-control", 
                                Buffer (0x04)
                                {
                                    0x01, 0x00, 0x00, 0x00
                                }, 

                                "@0,backlight-control", 
                                Buffer (0x04)
                                {
                                    0x01, 0x00, 0x00, 0x00
                                }, 

                                "AAPL,slot-name", 
                                Buffer (0x09)
                                {
                                    "Build In"
                                }, 

                                "@0,built-in", 
                                Buffer (Zero) {}, 
                                "@0,pwm-info", 
                                Buffer (0x14)
                                {
                                    /* 0000 */    0x01, 0x14, 0x00, 0x64, 0xA8, 0x61, 0x00, 0x00, 
                                    /* 0008 */    0x1C, 0x02, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 
                                    /* 0010 */    0x00, 0x04, 0x00, 0x00
                                }, 

                                "@0,compatible", 
                                Buffer (0x0B)
                                {
                                    "NVDA,NVMac"
                                }, 

                                "@0,device_type", 
                                Buffer (0x08)
                                {
                                    "display"
                                }, 

                                "@0,name", 
                                Buffer (0x0F)
                                {
                                    "NVDA,Display-A"
                                }, 

                                "@1,compatible", 
                                Buffer (0x0B)
                                {
                                    "NVDA,NVMac"
                                }, 

                                "@1,device_type", 
                                Buffer (0x08)
                                {
                                    "display"
                                }, 

                                "@1,name", 
                                Buffer (0x0F)
                                {
                                    "NVDA,Display-B"
                                }, 

                                "NVCAP", 
                                Buffer (0x18)
                                {
                                    /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
                                    /* 0008 */    0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 
                                    /* 0010 */    0x00, 0x00, 0x00, 0x00
                                }, 

                                "NVPM", 
                                Buffer (0x20)
                                {
                                    /* 0000 */    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                    /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                    /* 0010 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                    /* 0018 */    0x00, 0x00, 0x00, 0x00
                                }, 

                                "VRAM,totalsize", 
                                Buffer (0x04)
                                {
                                    0x00, 0x00, 0x00, 0x40
                                }, 

                                "device_type", 
                                Buffer (0x0C)
                                {
                                    "NVDA,Parent"
                                }, 

                                "model", 
                                Buffer (0x18)
                                {
                                    "Lenovo Quadro NVS 4200M"
                                }, 

                                "rom-revision", 
                                Buffer (0x0F)
                                {
                                    "70.18.87.00.00"
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }

                    Method (_IRC, 0, NotSerialized)
                    {
                        Return (Zero)
                    }

                    OperationRegion (ATRP, SystemMemory, ATRB, 0x00010000)
                    Field (ATRP, AnyAcc, Lock, Preserve)
                    {
                        IDX0,   262144, 
                        IDX1,   262144
                    }

                    Method (_ROM, 2, Serialized)
                    {
                        If (LGreaterEqual (Arg0, 0x8000))
                        {
                            Return (GETB (Subtract (Arg0, 0x8000), Arg1, IDX1))
                        }

                        If (LGreater (Add (Arg0, Arg1), 0x8000))
                        {
                            Subtract (0x8000, Arg0, Local0)
                            Subtract (Arg1, Local0, Local1)
                            Store (GETB (Arg0, Local0, IDX0), Local3)
                            Store (GETB (Zero, Local1, IDX1), Local4)
                            Concatenate (Local3, Local4, Local5)
                            Return (Local5)
                        }

                        Return (GETB (Arg0, Arg1, IDX0))
                    }

                    Method (GETB, 3, Serialized)
                    {
                        Multiply (Arg0, 0x08, Local0)
                        Multiply (Arg1, 0x08, Local1)
                        CreateField (Arg2, Local0, Local1, TBF3)
                        Return (TBF3)
                    }

                    Method (VSWT, 0, NotSerialized)
                    {
                        If (WVIS)
                        {
                            Store (VEVT (0x07), Local0)
                        }
                        Else
                        {
                            Store (VEVT (0x05), Local0)
                        }

                        And (0xFF, Local0, Local1)
                        If (Local1)
                        {
                            ASWT (Local1, One)
                        }
                    }

                    Method (VLOC, 1, NotSerialized)
                    {
                        If (LEqual (Arg0, ^^^^LID._LID ()))
                        {
                            VSLD (Arg0)
                            Store (Zero, Local0)
                            If (LEqual (And (VPWR, 0x03), Zero))
                            {
                                If (Arg0)
                                {
                                    If (LOr (WIN7, WVIS)) {}
                                    Else
                                    {
                                        Store (VEVT (One), Local0)
                                    }
                                }
                                Else
                                {
                                    If (LOr (WIN7, WVIS)) {}
                                    Else
                                    {
                                        Store (VEVT (0x02), Local0)
                                    }
                                }

                                And (0x0F, Local0, Local1)
                                If (Local1)
                                {
                                    ASWT (Local1, Zero)
                                }
                            }
                        }
                    }

                    Method (_DOS, 1, NotSerialized)
                    {
                        If (LEqual (Arg0, 0x02))
                        {
                            Store (0x14, Local0)
                            While (Local0)
                            {
                                Decrement (Local0)
                                Acquire (MDGS, 0xFFFF)
                                If (LEqual (Zero, MSWT))
                                {
                                    Store (One, MSWT)
                                    Store (Zero, Local0)
                                    Store (Arg0, VDEE)
                                }

                                Release (MDGS)
                                Sleep (0xC8)
                            }
                        }
                        Else
                        {
                            Acquire (MDGS, 0xFFFF)
                            If (LEqual (VDEE, 0x02))
                            {
                                Store (Zero, MSWT)
                            }

                            If (LGreater (Arg0, 0x02))
                            {
                                Store (One, VDEE)
                            }
                            Else
                            {
                                Store (Arg0, VDEE)
                            }

                            Release (MDGS)
                        }
                    }

                    Method (_DOD, 0, NotSerialized)
                    {
                        Return (Package (0x08)
                        {
                            0x0100, 
                            0x0114, 
                            0x0111, 
                            0x0115, 
                            0x0112, 
                            0x0116, 
                            0x0113, 
                            0x0110
                        })
                    }

                    Method (ASWT, 2, NotSerialized)
                    {
                        If (LEqual (One, VDEE))
                        {
                            And (One, Arg1, Local1)
                            VSDS (Arg0, Local1)
                        }
                        Else
                        {
                            Store (0x14, Local0)
                            While (Local0)
                            {
                                Decrement (Local0)
                                Acquire (MDGS, 0xFFFF)
                                If (LEqual (Zero, MSWT))
                                {
                                    Store (Zero, Local0)
                                    If (And (One, Arg1))
                                    {
                                        Store (One, VUPC)
                                    }
                                    Else
                                    {
                                        Store (Zero, VUPC)
                                    }

                                    If (And (One, Arg0))
                                    {
                                        Store (One, VQDL)
                                    }
                                    Else
                                    {
                                        Store (Zero, VQDL)
                                    }

                                    If (And (0x02, Arg0))
                                    {
                                        Store (One, VQDC)
                                    }
                                    Else
                                    {
                                        Store (Zero, VQDC)
                                    }

                                    If (And (0x04, Arg0))
                                    {
                                        Store (One, VQD0)
                                    }
                                    Else
                                    {
                                        Store (Zero, VQD0)
                                    }

                                    If (And (0x08, Arg0))
                                    {
                                        Store (One, VQD1)
                                    }
                                    Else
                                    {
                                        Store (Zero, VQD1)
                                    }

                                    If (And (0x10, Arg0))
                                    {
                                        Store (One, VQD2)
                                    }
                                    Else
                                    {
                                        Store (Zero, VQD2)
                                    }

                                    If (And (0x20, Arg0))
                                    {
                                        Store (One, VQD3)
                                    }
                                    Else
                                    {
                                        Store (Zero, VQD3)
                                    }

                                    If (And (0x40, Arg0))
                                    {
                                        Store (One, VQD4)
                                    }
                                    Else
                                    {
                                        Store (Zero, VQD4)
                                    }

                                    If (And (0x80, Arg0))
                                    {
                                        Store (One, VQD5)
                                    }
                                    Else
                                    {
                                        Store (Zero, VQD5)
                                    }
                                }

                                Release (MDGS)
                                Sleep (0xC8)
                            }

                            If (And (0x02, Arg1))
                            {
                                Notify (VID, 0x81)
                            }
                            Else
                            {
                                Notify (VID, 0x80)
                            }
                        }
                    }

                    Method (VDSW, 1, NotSerialized)
                    {
                        If (LEqual (VPWR, Zero))
                        {
                            If (Arg0)
                            {
                                Store (VEVT (0x03), Local0)
                            }
                            Else
                            {
                                Store (VEVT (0x04), Local0)
                            }

                            And (0x0F, Local0, Local1)
                            If (Local1)
                            {
                                ASWT (Local1, Zero)
                            }
                        }
                    }

                    Device (LCD0)
                    {
                        Method (_ADR, 0, NotSerialized)
                        {
                            Return (0x0110)
                        }

                        Method (_DCS, 0, NotSerialized)
                        {
                            VUPS (Zero)
                            If (VCDL)
                            {
                                Return (0x1F)
                            }
                            Else
                            {
                                Return (0x1D)
                            }
                        }

                        Method (_DGS, 0, NotSerialized)
                        {
                            Return (VQDL)
                        }

                        Method (_DSS, 1, NotSerialized)
                        {
                            And (Arg0, One, VSDL)
                            If (And (Arg0, 0x80000000))
                            {
                                If (And (Arg0, 0x40000000))
                                {
                                    DSWT (0x02)
                                }
                                Else
                                {
                                    DSWT (One)
                                }
                            }
                        }

                        Method (_DDC, 1, NotSerialized)
                        {
                            If (ISOP ())
                            {
                                Return (Zero)
                            }

                            If (LEqual (Arg0, One))
                            {
                                Return (VEDI)
                            }
                            Else
                            {
                                If (LEqual (Arg0, 0x02))
                                {
                                    Return (VEDI)
                                }
                            }

                            Return (Zero)
                        }
                    }

                    Device (CRT0)
                    {
                        Method (_ADR, 0, NotSerialized)
                        {
                            Return (0x0100)
                        }

                        Method (_DCS, 0, NotSerialized)
                        {
                            VUPS (One)
                            If (VCSS)
                            {
                                If (VCDC)
                                {
                                    Return (0x1F)
                                }
                                Else
                                {
                                    Return (0x1D)
                                }
                            }
                            Else
                            {
                                If (VCDC)
                                {
                                    Return (0x0F)
                                }
                                Else
                                {
                                    Return (0x0D)
                                }
                            }
                        }

                        Method (_DGS, 0, NotSerialized)
                        {
                            Return (VQDC)
                        }

                        Method (_DSS, 1, NotSerialized)
                        {
                            And (Arg0, One, VSDC)
                            If (And (Arg0, 0x80000000))
                            {
                                If (And (Arg0, 0x40000000))
                                {
                                    DSWT (0x02)
                                }
                                Else
                                {
                                    DSWT (One)
                                }
                            }
                        }
                    }

                    Device (DVI0)
                    {
                        Method (_ADR, 0, NotSerialized)
                        {
                            Return (0x0111)
                        }

                        Method (_DCS, 0, NotSerialized)
                        {
                            VUPS (Zero)
                            If (VCDD)
                            {
                                Return (0x1F)
                            }
                            Else
                            {
                                Return (0x1D)
                            }
                        }

                        Method (_DGS, 0, NotSerialized)
                        {
                            Return (VQD1)
                        }

                        Method (_DSS, 1, NotSerialized)
                        {
                            And (Arg0, One, VSD1)
                            If (And (Arg0, 0x80000000))
                            {
                                If (And (Arg0, 0x40000000))
                                {
                                    DSWT (0x02)
                                }
                                Else
                                {
                                    DSWT (One)
                                }
                            }
                        }
                    }

                    Device (DP0)
                    {
                        Method (_ADR, 0, NotSerialized)
                        {
                            Return (0x0114)
                        }

                        Method (_DCS, 0, NotSerialized)
                        {
                            VUPS (Zero)
                            If (VCDT)
                            {
                                Return (0x1F)
                            }
                            Else
                            {
                                Return (0x1D)
                            }
                        }

                        Method (_DGS, 0, NotSerialized)
                        {
                            Return (VQD0)
                        }

                        Method (_DSS, 1, NotSerialized)
                        {
                            And (Arg0, One, VSD0)
                            If (And (Arg0, 0x80000000))
                            {
                                If (And (Arg0, 0x40000000))
                                {
                                    DSWT (0x02)
                                }
                                Else
                                {
                                    DSWT (One)
                                }
                            }
                        }
                    }

                    Device (DVI1)
                    {
                        Method (_ADR, 0, NotSerialized)
                        {
                            Return (0x0112)
                        }

                        Method (_DCS, 0, NotSerialized)
                        {
                            VUPS (Zero)
                            If (VCDD)
                            {
                                Return (0x1F)
                            }
                            Else
                            {
                                Return (0x1D)
                            }
                        }

                        Method (_DGS, 0, NotSerialized)
                        {
                            Return (VQD3)
                        }

                        Method (_DSS, 1, NotSerialized)
                        {
                            And (Arg0, One, VSD3)
                            If (And (Arg0, 0x80000000))
                            {
                                If (And (Arg0, 0x40000000))
                                {
                                    DSWT (0x02)
                                }
                                Else
                                {
                                    DSWT (One)
                                }
                            }
                        }
                    }

                    Device (DP1)
                    {
                        Method (_ADR, 0, NotSerialized)
                        {
                            Return (0x0115)
                        }

                        Method (_DCS, 0, NotSerialized)
                        {
                            VUPS (Zero)
                            If (VCDT)
                            {
                                Return (0x1F)
                            }
                            Else
                            {
                                Return (0x1D)
                            }
                        }

                        Method (_DGS, 0, NotSerialized)
                        {
                            Return (VQD2)
                        }

                        Method (_DSS, 1, NotSerialized)
                        {
                            And (Arg0, One, VSD2)
                            If (And (Arg0, 0x80000000))
                            {
                                If (And (Arg0, 0x40000000))
                                {
                                    DSWT (0x02)
                                }
                                Else
                                {
                                    DSWT (One)
                                }
                            }
                        }
                    }

                    Device (DVI2)
                    {
                        Method (_ADR, 0, NotSerialized)
                        {
                            Return (0x0113)
                        }

                        Method (_DCS, 0, NotSerialized)
                        {
                            VUPS (Zero)
                            If (VCDD)
                            {
                                Return (0x1F)
                            }
                            Else
                            {
                                Return (0x1D)
                            }
                        }

                        Method (_DGS, 0, NotSerialized)
                        {
                            Return (VQD5)
                        }

                        Method (_DSS, 1, NotSerialized)
                        {
                            And (Arg0, One, VSD5)
                            If (And (Arg0, 0x80000000))
                            {
                                If (And (Arg0, 0x40000000))
                                {
                                    DSWT (0x02)
                                }
                                Else
                                {
                                    DSWT (One)
                                }
                            }
                        }
                    }

                    Device (DP2)
                    {
                        Method (_ADR, 0, NotSerialized)
                        {
                            Return (0x0116)
                        }

                        Method (_DCS, 0, NotSerialized)
                        {
                            VUPS (Zero)
                            If (VCDT)
                            {
                                Return (0x1F)
                            }
                            Else
                            {
                                Return (0x1D)
                            }
                        }

                        Method (_DGS, 0, NotSerialized)
                        {
                            Return (VQD4)
                        }

                        Method (_DSS, 1, NotSerialized)
                        {
                            And (Arg0, One, VSD4)
                            If (And (Arg0, 0x80000000))
                            {
                                If (And (Arg0, 0x40000000))
                                {
                                    DSWT (0x02)
                                }
                                Else
                                {
                                    DSWT (One)
                                }
                            }
                        }
                    }

                    Method (DSWT, 1, NotSerialized)
                    {
                        If (VSDL)
                        {
                            Store (One, Local0)
                        }
                        Else
                        {
                            Store (Zero, Local0)
                        }

                        If (VSDC)
                        {
                            Or (0x02, Local0, Local0)
                        }

                        If (VSD0)
                        {
                            Or (0x08, Local0, Local0)
                        }

                        If (Local0)
                        {
                            If (VUPC)
                            {
                                VSDS (Local0, Arg0)
                            }
                        }
                        Else
                        {
                            Noop
                        }
                    }

                    Name (_SUN, One)
                }

                OperationRegion (PEGC, PCI_Config, Zero, 0x0100)
                Field (PEGC, DWordAcc, NoLock, Preserve)
                {
                            Offset (0xEC), 
                    GMGP,   1, 
                    HPGP,   1, 
                    PMGP,   1
                }

                Device (HDAU)
                {
                    Name (_ADR, One)
                    Method (_DSM, 4, NotSerialized)
                    {
                        Store (Package (0x06)
                            {
                                "hda-gfx", 
                                Buffer (0x0A)
                                {
                                    "onboard-1"
                                }, 

                                "layout-id", 
                                Buffer (0x04)
                                {
                                    0x01, 0x00, 0x00, 0x00
                                }, 

                                "PinConfigurations", 
                                Buffer (0x04)
                                {
                                    0xE0, 0x00, 0x56, 0x28
                                }
                            }, Local0)
                        DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
                        Return (Local0)
                    }
                }

Link to comment
Share on other sites

Try adding

 

"hda-gfx", 
                                Buffer (0x0A)
                                {
                                    "onboard-1"
                                }, 

in your GFX DSM method. Also I don't know if layout-id and PinConfigurations are necessary in HDAU. I have working HDMI sound with only hda-gfx in HDAU's DSM.

 

For the display try adding:

 

"@1,AAPL,boot-display", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 

and try different ports ie: @0,@1 etc. Use it to make your main boot display and maybe it'll fix your problem. 

Edited by angelol
Link to comment
Share on other sites

I applied those DSDT edits but my laptop's built-in display is still off at boot. Also, one thing I noticed is if I do not inject the card at all in clover or in the DSDT (stock DSM method) then both displays work, but the laptop LCD is detected as external and brightness controls do not work.


I have noticed that if I revert all my edits to _DSM and use the original DSM method with no graphics injection from Clover, the laptop display works but it's detected as external. Also, there's no brightness controls with the original _DSM method. This is the _DSM method from the original DSDT:

 Method (_DSM, 4, NotSerialized)  // _DSM: Device-Specific Method
                    {
                        If (\CMPB (Arg0, Buffer (0x10)
                                {
                                    /* 0000 */   0xF8, 0xD8, 0x86, 0xA4, 0xDA, 0x0B, 0x1B, 0x47,
                                    /* 0008 */   0xA7, 0x2B, 0x60, 0x42, 0xA6, 0xB5, 0xBE, 0xE0
                                }))
                        {
                            Return (NVOP (Arg0, Arg1, Arg2, Arg3))
                        }
                    }
Link to comment
Share on other sites

Can you send me ur DSDT so I can have a better look? Btw, is your HDMI fixed?


Try replacing the contents of your DSM with this:

 

"@0,AAPL,boot-display", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 

                            "@0,backlight-control", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 

                            "@0,built-in", 
                            Buffer (One)
                            {
                                0x00
                            }, 

                            "@0,compatible", 
                            Buffer (0x0B)
                            {
                                "NVDA,NVMac"
                            }, 

                            "@0,device_type", 
                            Buffer (0x08)
                            {
                                "display"
                            }, 

                            "@0,name", 
                            Buffer (0x0F)
                            {
                                "NVDA,Display-A"
                            }, 

                            "@0,NVMT", 
                            Buffer (0x60)
                            {
                                /* 0000 */    0x0B, 0x03, 0xFF, 0x20, 0x06, 0xAF, 0x3E, 0x31, 
                                /* 0008 */    0x00, 0x05, 0x20, 0x03, 0x8F, 0x05, 0x30, 0x05, 
                                /* 0010 */    0x50, 0x05, 0x00, 0x00, 0x4E, 0x03, 0x23, 0x03, 
                                /* 0018 */    0x29, 0x03, 0x00, 0x00, 0x20, 0x43, 0x52, 0x04, 
                                /* 0020 */    0x00, 0x00, 0x01, 0x01, 0xE0, 0x00, 0x00, 0x00, 
                                /* 0028 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0030 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0038 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0040 */    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 
                                /* 0048 */    0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x10, 0x05, 
                                /* 0050 */    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0058 */    0x00, 0x08, 0x00, 0x00, 0x30, 0x01, 0x09, 0x09
                            }, 

                            "@0,pwm-info", 
                            Buffer (0x18)
                            {
                                /* 0000 */    0x02, 0x18, 0x00, 0x64, 0x90, 0x59, 0x02, 0x00, 
                                /* 0008 */    0x08, 0x52, 0x00, 0x00, 0xA5, 0x1C, 0x00, 0x00, 
                                /* 0010 */    0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
                            }, 

                            "@1,compatible", 
                            Buffer (0x0B)
                            {
                                "NVDA,NVMac"
                            }, 

                            "@1,device_type", 
                            Buffer (0x08)
                            {
                                "display"
                            }, 

                            "@1,name", 
                            Buffer (0x0F)
                            {
                                "NVDA,Display-B"
                            }, 

                            "@1,connector-type", 
                            Buffer (0x04)
                            {
                                0x00, 0x08, 0x00, 0x00
                            }, 

                            "NVCAP", 
                            Buffer (0x14)
                            {
                                /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
                                /* 0008 */    0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 
                                /* 0010 */    0x00, 0x00, 0x00, 0x00
                            }, 

                            "device_type", 
                            Buffer (0x0C)
                            {
                                "NVDA,Parent"
                            }, 

                            "model", 
                            Buffer (0x18)
                            {
                                "NVIDIA Quadro NVS 4200M"
                            }, 

                            "VRAM,totalsize", 
                            Buffer (0x04)
                            {
                                0x00, 0x00, 0x00, 0x20
                            }, 

                            "hda-gfx", 
                            Buffer (0x0A)
                            {
                                "onboard-1"
                            }
Link to comment
Share on other sites

I have attached both the original DSDT (no GPU injection; laptop display works but recognized as external and no brightness controls) and my current DSDT (GPU injected; laptop display only works after clicking "Detect Displays" and then recognized as internal with working brightness after clicking the button).


I haven't tried HDMI audio just yet (rarely use it; would be nice if it works, but having a working laptop display is more important ATM)


I have tried replacing the DSM method with the one you gave (changed 0x20 to 0x40 since I have a 1 GB video card). It fixed my laptop display but broke DVI out :(

DSDTs.zip

Link to comment
Share on other sites

Try this (fingers crossed :P ) :

 

"@0,AAPL,boot-display", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 

                            "@0,backlight-control", 
                            Buffer (0x04)
                            {
                                0x01, 0x00, 0x00, 0x00
                            }, 

                            "@0,built-in", 
                            Buffer (One)
                            {
                                0x00
                            }, 

                            "@0,compatible", 
                            Buffer (0x0B)
                            {
                                "NVDA,NVMac"
                            }, 

                            "@0,device_type", 
                            Buffer (0x08)
                            {
                                "display"
                            }, 

                            "@0,name", 
                            Buffer (0x0F)
                            {
                                "NVDA,Display-A"
                            }, 

                            "@0,NVMT", 
                            Buffer (0x60)
                            {
                                /* 0000 */    0x0B, 0x03, 0xFF, 0x20, 0x06, 0xAF, 0x3E, 0x31, 
                                /* 0008 */    0x00, 0x05, 0x20, 0x03, 0x8F, 0x05, 0x30, 0x05, 
                                /* 0010 */    0x50, 0x05, 0x00, 0x00, 0x4E, 0x03, 0x23, 0x03, 
                                /* 0018 */    0x29, 0x03, 0x00, 0x00, 0x20, 0x43, 0x52, 0x04, 
                                /* 0020 */    0x00, 0x00, 0x01, 0x01, 0xE0, 0x00, 0x00, 0x00, 
                                /* 0028 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0030 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0038 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0040 */    0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 
                                /* 0048 */    0x00, 0x00, 0x00, 0x00, 0x40, 0xFF, 0x10, 0x05, 
                                /* 0050 */    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0058 */    0x00, 0x08, 0x00, 0x00, 0x30, 0x01, 0x09, 0x09
                            }, 

                            "@0,pwm-info", 
                            Buffer (0x18)
                            {
                                /* 0000 */    0x02, 0x18, 0x00, 0x64, 0x90, 0x59, 0x02, 0x00, 
                                /* 0008 */    0x08, 0x52, 0x00, 0x00, 0xA5, 0x1C, 0x00, 0x00, 
                                /* 0010 */    0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00
                            }, 

                            "@1,compatible", 
                            Buffer (0x0B)
                            {
                                "NVDA,NVMac"
                            }, 

                            "@1,device_type", 
                            Buffer (0x08)
                            {
                                "display"
                            }, 

                            "@1,name", 
                            Buffer (0x0F)
                            {
                                "NVDA,Display-B"
                            }, 

                            "@1,connector-type", 
                            Buffer (0x04)
                            {
                                0x00, 0x08, 0x00, 0x00
                            }, 

                            "NVCAP", 
                            Buffer (0x14)
                            {
                                /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
                                /* 0008 */    0x3E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 
                                /* 0010 */    0x00, 0x00, 0x00, 0x00
                            }, 

                            "device_type", 
                            Buffer (0x0C)
                            {
                                "NVDA,Parent"
                            }, 

                            "model", 
                            Buffer (0x18)
                            {
                                "NVIDIA Quadro NVS 4200M"
                            }, 

                            "VRAM,totalsize", 
                            Buffer (0x04)
                            {
                                0x00, 0x00, 0x00, 0x20
                            }, 

                            "hda-gfx", 
                            Buffer (0x0A)
                            {
                                "onboard-1"
                            }

Link to comment
Share on other sites

Try adding this:

 

                            "NVPM", 
                            Buffer (0x20)
                            {
                                /* 0000 */    0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0008 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0010 */    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                                /* 0018 */    0x00, 0x00, 0x00, 0x00
                            }, 

First try replacing "@0,pwm-info" with this:

 

"@0,pwm-info", 
                                Buffer (0x14)
                                {
                                    /* 0000 */    0x01, 0x14, 0x00, 0x64, 0xA8, 0x61, 0x00, 0x00, 
                                    /* 0008 */    0x1C, 0x02, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 
                                    /* 0010 */    0x00, 0x04, 0x00, 0x00
                                }, 

and if it doesn't work, try with this:

 

"@0,pwm-info", 
                                Buffer (0x14)
                                {
                                    /* 0000 */    0x01, 0x14, 0x00, 0x64, 0xA8, 0x61, 0x00, 0x00, 
                                    /* 0008 */    0x08, 0x52, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 
                                    /* 0010 */    0x00, 0x04, 0x00, 0x00
                                }, 
Link to comment
Share on other sites

Try these 2:

"NVCAP", 
                                Buffer (0x18)
                                {
                                    /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 
                                    /* 0008 */    0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 
                                    /* 0010 */    0x00, 0x00, 0x00, 0x00
                                }, 
"NVCAP", 
                                Buffer (0x18)
                                {
                                    /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                    /* 0008 */    0x0E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 
                                    /* 0010 */    0x00, 0x00, 0x00, 0x00
                                }, 
Link to comment
Share on other sites

"NVCAP", 
                            Buffer (0x14)
                            {
                                /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                /* 0008 */    0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
                                /* 0010 */    0x00, 0x00, 0x00, 0x00
                            }, 

"NVCAP", 
                            Buffer (0x14)
                            {
                                /* 0000 */    0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 
                                /* 0008 */    0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
                                /* 0010 */    0x00, 0x00, 0x00, 0x00
                            }, 
Link to comment
Share on other sites

Here's a copy of my video BIOS: https://mega.co.nz/#!bVAnXIpY!lOWPGojZVKVpbpepoR0H3fYxItU9rQVWUSoYbRTe47I

 

 

dumped from Linux with

mint@mint ~ $ sudo su
mint mint # echo 1 > /sys/devices/pci0000\:00/0000\:00\:01.0/0000\:01\:00.0/rom mint mint # exit
exit
mint@mint ~ $ sudo cat /sys/devices/pci0000\:00/0000\:00\:01.0/0000\:01\:00.0/rom > /home/mint/Desktop/GF119.rom
mint@mint ~ $ sudo su
mint mint # echo 0 > /sys/devices/pci0000\:00/0000\:00\:01.0/0000\:01\:00.0/rom  
mint mint # exit
exit
Link to comment
Share on other sites

This should probably work:

"NVCAP", 
Buffer (0x14)
{
/* 0000 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 
/* 0008 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 
/* 0010 */ 0x00, 0x00, 0x00, 0x00
},

Use this kext along with the working DVI + LVDS NVCAP

NVS4200M.kext.zip

Link to comment
Share on other sites

This is my current DSDT & clover settings as of now. HDMI works now but no audio. Might be related but onboard audio works intermittently across reboots. 

 

 

AppleHDA is patched on the fly with Clover EFI and an "injector kext" with the layout XML's.

 

Also, just tried injecting audio via DSDT layout-id 0xC in HDEF instead of clover EFI injection and it's still intermittent.

DSDT-nvidia.zip

post-1358479-0-57239500-1434385203_thumb.png

post-1358479-0-46858700-1434385278_thumb.png

AppleHDA_20672.kext.zip

Link to comment
Share on other sites

 Share

×
×
  • Create New...