Nvidia (non-Optimus!) Graphics problems
If you have not found the solution with your Nvidia card for getting the connections right for your external monitors etc. then one thing you can experiment with is the value of NVCAP.
NVCAP is a string of numbers that defines how Nvidia card handles connections.
Many different NVCAp values seem to work for the internal screen, but when it comes to other outputs, you might want to experiment.
You can find what NVCAP you are currently using by looking in ioreg. Easiest way to do that is probably to fire up DSDTse and under "registry Info" click "Get".
Navigate down the device tree until you find "NVDA, Display" (or something like that), click on it and then scroll down the right hand panel until you see NVCAP and take a note of the numbers next to that entry. For instance, a copy and paste of what I have is:
<05 01 00 00 00 00 01 00 06 00 00 00 00 00 01 0e 00 00 00 00>
These numbers are actually the ones that I am injecting at the moment using the "device-properties" string and are from a MacBookPro6,1.
Now, for instance, see what different injector methods give you by (a) deleting the "device-properties" string and setting "graphicsenabler=yes" and going into your DSDT and checking you don't have an NVCAP section in there - if you do, back up your DSDT and delete the NVCAP string - then restart your Vostro.
Then check the NVCAP values again. For me, that gives a value string of:
<04 00 00 00 00 00 01 00 fe 00 00 00 00 00 00 0a 00 00 00 00>
Other ways to try out a different string are to find a copy of the Video BIOS Rom from your graphics card and then use the progam NVCAPmaker to make an NVCAP based on the ROM contents. For instance, for a Video BIOS file I found on the web for a 310M, I used NVCAPMaker and found this set of numbers:
0400000000000100020000000000000700000000.
You might get different results again if you Set GraphicsEnabler=No and load one of the graphics kexts such as NVEnabler or ATY_Init.kext.
If you do some reading around, you will see how different people have worked to try and find out exactly what NVCAP really does and how to set it up for different graphics cards. It is surprising that many different values 'sort of' work. But not really surprising that different ones have different functionality on different hardware.
Okay, so what do I do?
Well, for a start by trying the different values given by the different ways of enabling graphics you can experiment with your hardware to find what different ways seem to give you the best results.
Once you have decided that a particular NVCAP value works best for you, you can then go back and inject that value through your own DSDT.aml file.
For instance, the value from the device-property injector can be put inside your graphics card section of the DSDT as follows:
Code:
"NVCAP",
Buffer (0x14)
{
/* 0000 */ 0x05, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
/* 0008 */ 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a,
/* 0010 */ 0x00, 0x00, 0x00, 0x00
},
You could then, if you prefer the values given by GraphicsEnabler=Yes re-write the section to be:
Code:
"NVCAP",
Buffer (0x14)
{
/* 0000 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
/* 0008 */ 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0E,
/* 0010 */ 0x00, 0x00, 0x00, 0x00
},
For me, whatever you put into the DSDT overwrites anything added in the "device-properties" part of my boot plist. So you can then make lots of experiments trying different values for NVCAP until you find something that works best with your VGA monitor, HDMI output or whatever......
When you modify your graphics section of the DSDT to include NVCAP it looks something like this:
Code:
Device (PEGP)
{
Name (_ADR, Zero)
Device (GFX0)
{
Name (_ADR, Zero)
Name (_SUN, One)
Method (_DSM, 4, NotSerialized)
{
Store (Package ()
{
"@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"
},
"device_type",
Buffer (0x0D)
{
"NVDA,GeForce"
},
"NVCAP",
Buffer (0x14)
{
/* 0000 */ 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
/* 0008 */ 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x0E,
/* 0010 */ 0x00, 0x00, 0x00, 0x00
},
"model",
Buffer (0x15)
{
"Nvidia GeForce 310M "
}
}, Local0)
DTGP (Arg0, Arg1, Arg2, Arg3, RefOf (Local0))
Return (Local0)
}
}
}
I hope this hint helps sort graphics problems and if you find strings that work really well for you, why not post them on the thread." Eg. Vostro 3500, 310M processor, internal screen, plus HDMI this string works well:......."
This might help someone who is fighting with their system get something working a little better.