Jump to content

Nvidia 560M Brightness Slider Not Working

12 posts in this topic

Recommended Posts

Hi guys, I’ve been a long time reader of InsanelyMac, and this is my first ever post.

I have a Qosmio X775-3DV78 laptop that runs macOS Sierra 10.12.6.

After a lot of trial and error, I just about have brightness control fully working. Using my current clover config file, my screen is at half the usual brightness, and playing around with the brightness slider doesn’t do anything.


This thread for Mac OS X Yosemite proves that variable brightness on a 560M is possible, and provides an attached config file at the end. (It also claims that editing /S*/L*/E*/AppleGraphicsControl.kext/C*/P*/AppleGraphicsDevicePolicy.kext/C*/Info.plist helped get LVDS + HDMI or LVDS + VGA working. I edited it, and have LVDS + HDMI working, but not LVDS + VGA.)


My system kernel panics when running it, and the device properties are a string instead of a dictionary… I have no idea how on earth to convert the properties string in the thread’s final config file into a dictionary in order to dissect it.


Regardless, I’m not even sure that I would know what to transfer over to my config file, and would really appreciate some guidance in order to at least get my slider working.

(LVDS + VGA would be a plus if it’s at all possible…)


I’ve attached problem reporting files below:

Broken Brightness Slider.png

Qosmio X775 Problem Reporting Files.zip

With nVidia graphics video output ports are defined/controlled by the NVCAP parameter, not AGDP kext. You'd have to find out the correct NVCAP value for your laptop. One thing you can do is boot your USB installer with a screen attached to the VGA port and see if it gets activated. If it does, you can grab the NVCAP value once you reach the installer main screen and run the following Terminal command:

ioreg -l | grep  NVCAP


Hi Hervé, thank you for replying so quickly!

Thanks to you I found out that my VGA port has been working the whole time. It only works while initially booting up the computer and being connected to it!


It appears that my initial NVCAP value is correct too, however there are some issues:

- My laptop thinks my external VGA monitor is still connected when it’s actually disconnected.

- Afterwards, plugging into an HDMI monitor works, but plugging into a VGA monitor straight afterwards won’t work.

- HDMI will work afterwards and know when it's connected/disconnected.


I hope that the solution for this lies in the device properties of that final config that I linked, and that you or someone here can show me how to translate the string into a dictionary.

VGA monitor remaining listed/shown as connected despite the cable being physically disconnected and/or not being detected on replugging are pretty common little defects. The same happens with the DVI/HDMI/VGA GeForce GT730 card fitted to my old C2D desktop Hackintosh. It's due to the analog nature of VGA. Both gremlins are fixed by doing a "Detect Displays" through the Displays PrefPane or tools such as DisplayMenu app. Of course no such issue with digital HDMI, DVI or DP.


Looking at your Clover config, I see that you inject NVCAP value:


i.e. the same that I had described here to get VGA working out of nVidia Kepler GT7x0.


Your IOReg shows 2 x display ports which is 100% aligned with the maximum output capabilities of pre-Kepler GPUs such as your GTX 560M. You use MacBookPro8,3, presumably because your system is fitted with a SandyBridge i7-2860QM CPU but these Mac models are fitted with AMD Radeon dGPU so you could try the SMBIOS of a Mac fitted with nVidia graphics instead; it usually helps. Give MacBookPro9,1/MacBookPro10,1 or iMac13,1/iMac13,2 a try. All were Ivy bridge models with mobile nVidia Kepler dGPUs. If it makes no difference, stick to your current SMBIOS settings.


The above NVCAP shows the following video output port distribution on my GT730:

  • NVDA,Display-A@0 -> DVI
  • NVDA,Display-B@1 -> HDMI
  • NVDA,Display-C@2 -> VGA
  • NVDA,Display-D@3 -> ???


I guess that on your system, port A should be the LVDS output and port B the external monitor, whether HDMI or VGA.


If you want to decode the NVCAP value, there are various tools available and you may also refer to Dortania's and 1Revenger1's NVCAP calculator documentation though I don't know how reliable or accurate the info is:





though nVidia has moved its documentation to GitHub since 2019: https://github.com/NVIDIA/open-gpu-doc


If you follow the info posted in those places, you could build your NVCAP as follows:

05 -> For 8 Series and newer (you have Fermi 500 Series)
01 -> Laptop with LID (you have internal LVDS screen)
00 -> No composite output
00 -> Backlight for Fermi GPU
0000 -> TV DCB Mask
FFFF -> Head1 DCB Mask (or whatever value, for instance 0x03 (binary: 0011); see nVidia DCB specs. 0xFFFF probably wrong)
FFFF -> Head2 DCB Mask (or whatever value, for instance 0x0C (binary: 1100); see nVidia DCB specs. 0xFFFF probably wrong)
0000 -> Head3 DCB Mask (N/A for Fermi)
0000 -> Head4 DCB Mask (N/A for Fermi)
00 -> N/A (only for real MacBookPro)
0F -> For 300 Series or newer (or set to 0E or 0B?)
00 -> EDID
000000 -> Reserved

but no guarantee it would work or work better than what you currently have. You may also try the calculator tool of you have an extracted copy of your Fermi ROM (check it out at techpowerup.com).


All this being said, given that your system seems perfectly functional as it is, you may of course leave things as they are. 🙂


Finally, with regards to decoding the Hex string of that old GTX 560M thread into readable device properties, you may use old 32bit app called EFIStudio to that effect. I recently provided details to a similar query here. You'll have no problem running this app in Sierra. Save the properties in an XML file, then open this XML file in any plist editor like Xcode, ProperTree, PlisEdit Pro, etc. otherwise you'll just see a few unreadable Base64 data entries.

Posted (edited)

Thanks for the lengthy and detailed reply, I’ve got great news to share:

The detect displays button connects/disconnects my VGA monitor!!!


Triple monitor would have been cool to implement, however, it appears that my hardware limits me to two outputs regardless just as you and the link I shared said. I even tried outputting to three monitors on Windows and Linux, and I was stuck with just two outputs. (I don’t have HD3000 drivers on Windows/Linux.)


The SMBIOSes made no difference whatsoever to my graphics output, and I don’t believe I can get the iGPU working alongside the dGPU because my laptop uses Optimus.


That’s insane that we share the same NVCAP!!!

05010000 0000FFFF FFFF0000 0000000F 00000000

Meanwhile, I tried this one that you created, and it seemed to work just as well as the old one.

I extracted one with EFIStudio from that hex string…

It matches the similar inquiry that you sent me, and appears to be a game changer for my laptop.


05010000 00000100 06000000 0000000e 00000000

With that NVCAP, my internal display doesn’t work, but I can drive two external displays:

  • NVDA,Display-A@0 -> HDMI/DVI
  • NVDA,Display-B@1 -> VGA


05000000 0000ffff ffff0000 0000000e 00000000

My current NVCAP enables my internal display, and lets me drive one external display:

  • NVDA,Display-A@0 -> HDMI/DVI/VGA
  • NVDA,Display-B@1 -> LVDS


This leads me to realize the following regarding my DCB Mask(s):

  • 0100 -> HDMI/DVI
  • 0600 -> VGA
  • ???? -> LVDS


I’ve used the NVCAP calculator in the past, but I haven’t had much luck generating NVCAP values from it. (Maybe you’d have a better time with it than me.) 

I thought that I’d share with you a dump of the DCB entries from it using a 560M ROM with you just incase it might help regarding figuring out what the four bit LVDS value is.


|     NVCAP Calculator     |

Enter in the location of your VBIOS

Windows Tip:  Shift + Right click your VBIOS and click "Copy Path"
|     NVCAP Calculator     |

(1) Choose VBIOS/ROM file
(2) Show DCB Entries
(3) Calculate NVCAP

Current ROM file: /Users/Fortitude/Downloads/NVIDIA.GTX560M.1536.110412.rom
Type in the number to select your option, or "q"/"quit" to quit: 2
DCB Entry 0
Type: LVDS EdidPort: 1 Head: 3 Connector: 0 Bus: 0 Loc: 0 
BDR: false BBDR: false Resources: 1 Virtual: false 
DCB Entry 1
Type: TMDS EdidPort: 1 Head: 3 Connector: 1 Bus: 0 Loc: 0 
BDR: false BBDR: false Resources: 1 Virtual: false 
DCB Entry 2
Type: TMDS EdidPort: 1 Head: 3 Connector: 2 Bus: 0 Loc: 0 
BDR: false BBDR: false Resources: 1 Virtual: false 
DCB Entry 3
Type: DisplayPort EdidPort: 13 Head: 3 Connector: 5 Bus: 1 Loc: 0 
BDR: false BBDR: false Resources: 8 Virtual: false 
DCB Entry 4
Type: TMDS EdidPort: 9 Head: 3 Connector: 5 Bus: 1 Loc: 0 
BDR: false BBDR: false Resources: 8 Virtual: false 
DCB Entry 5
Type: DisplayPort EdidPort: 12 Head: 3 Connector: 4 Bus: 1 Loc: 0 
BDR: false BBDR: false Resources: 8 Virtual: false 
DCB Entry 6
Type: TMDS EdidPort: 8 Head: 3 Connector: 4 Bus: 1 Loc: 0 
BDR: false BBDR: false Resources: 8 Virtual: false 
DCB Entry 7
Type: TMDS EdidPort: 8 Head: 3 Connector: 3 Bus: 1 Loc: 0 
BDR: false BBDR: false Resources: 8 Virtual: false 
DCB Entry 8
Type: DisplayPort EdidPort: 11 Head: 3 Connector: 8 Bus: 3 Loc: 0 
BDR: false BBDR: false Resources: 4 Virtual: false 
DCB Entry 9
Type: TMDS EdidPort: 7 Head: 3 Connector: 8 Bus: 3 Loc: 0 
BDR: false BBDR: false Resources: 4 Virtual: false 
DCB Entry a
Type: DisplayPort EdidPort: 10 Head: 3 Connector: 7 Bus: 2 Loc: 0 
BDR: false BBDR: false Resources: 2 Virtual: false 
DCB Entry b
Type: TMDS EdidPort: 6 Head: 3 Connector: 7 Bus: 2 Loc: 0 
BDR: false BBDR: false Resources: 2 Virtual: false 
DCB Entry c
Type: TMDS EdidPort: 6 Head: 3 Connector: 6 Bus: 2 Loc: 0 
BDR: false BBDR: false Resources: 2 Virtual: false 
DCB Entry d
Type: CRT EdidPort: 0 Head: 3 Connector: 9 Bus: 4 Loc: 0 
BDR: false BBDR: false Resources: 2 Virtual: false 

Press enter to continue:


If I had this as my NVCAP value:

05010000 00000100 ffff0000 0000000e 00000000

Would this theoretically be the result?

  • NVDA,Display-A@0 -> HDMI
  • NVDA,Display-B@1 -> LVDS/VGA


Could I for instance program something into the DSDT/SSDT to disconnect my LVDS display upon closing the lid and connect a VGA monitor and vice versa? That way I could for instance close my laptop, and drive two external monitors at my desk (possibly in SSDT-2 through the _DSS method under the LCD device). I don’t have working sleep on lid, and wasn’t sure if it would enable that property (though I do have wake on lid working). I suppose I could also just have two separate config files if it isn’t possible to implement.


Finally, here’s the decoded hex string from that old thread:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">


Sorry to overwhelm you with information, I just wanted to let you know what I’ve learned. If you’re not sure how to approach disconnecting/reconnecting the LVDS display no worries, you’ve helped me do more than I expected. It would be awesome though if you or someone here knows how to do it.


I would highly appreciate your input though on how to convert the decoded hex string for my current NVCAP value (along with anything else that I have to do) and get variable brightness working for my laptop, because plugging this in as it is now just causes my system to kernel panic.

Edited by Fortitude

Three yeas ago I set my Dell E5430 to use Nvidia graphics 5200M (Fermi).

Preboot-log said

16:004  0:005  Found generic VBIOS ROM file (10de_0DFC.rom)
16:023  0:018   using loaded ROM image
16:023  0:000  version 70.08.A8.00.13
16:023  0:000  nVidia Dell NVS 5200M  1024MB NVC1 [10DE:0DFC] :: PciRoot(0x0)\Pci(0x1,0x0)\Pci(0x0,0x0) => device #1
16:023  0:000  Nvidia: VideoPorts: undefined, default to: 2
16:023  0:000  NVidia: FakeID 10DE:FEA
16:023  0:000  set NVCAP: 05010000-00000100-06000000-0000000F-00000000
16:023  0:000  Nvidia Mobile backlight

And yes, I had brightness slider on LVDS internal screen.

But I had no external displays and I am not sure it is possible to make system to adjust brightness on external screens.

Brightness control for external screens is not something natively supported through macOS, no. But 3rd party apps like MonitorControl apparently support this for HDMI/DP displays.


@Fortitude I believe I did recommend you opened up the decoded hex string's XML data into a plist editor to avoid facing Base64 code rather than readable Hexadecimal values.. Do that and you'll see what NVCAP value is configured in that set of nVidia properties. Alternatively, use those on-line tools that convert Hex/Base64/text between each other. You may even use Clover Configurator app to do that. Of course, do not apply this entire set of properties to your laptop without 1st checking that it's partially or fully applicable.


Re: brightness control of the built-in screen, it may or may not work. I personally never managed to get it to work on the old nVidia-fitted Dell Latitude D6xx/D8xx I previously owned but others have reported it to work on other laptops such as ThinkPad of that same era. Never sussed out what was required beyond the expected PNLF injection and never wasted too much time on it given that brightness control still operated at BIOS level.


The built-in LVDS screen would be expected to turn off when you close the LID. If you wanted to use HDMI + VGA, you'd most probably have to close the LID once the external screens are both connected (but this may trigger the laptop to sleep) or, if you have a dock, to switch it on with LID closed. There's always the alternative of turning the laptop on and pushing video to external screen before quickly closing the LID. All this needs USB or wireless input devices of course.


Re: NVCAP, bear in mind that the 16bit DCB (binary) masks basically define which physical output/port are routed through the heads. To obtain info on your physical ports, you need to decode the video ROM. Afaik, there is no way to set the DCB masks without knowing which DCB entry defines which output types and ports (apart from LVDS which seems to be DCB entry 0 as standard)

There are N independent display paths in NVIDIA. They are called heads.
For older cards there are up to 2. For newer cards there are up to 4.
One can view each head as a video output source, which is connected to
one or more DCB entries (as explained by the specification).
These DCB entries map to physical ports on the GPU. There is a finite
number of DCB entries in the GPU, which can be at most 16 * head count,
i.e. 32 for 2-head GPUs. In reality it is usually much less, like 4-5.

NVCAP contains indices of DCB entries per head in a mask format, which
must match the actual mapping present in the VBIOS. While it should be
reconfigurable, I do not think older macOS drivers can do that.

For example, setting Head0DCBMask to 0x3 and Head1DCBMask to 0xC means
that DCB entries 0 and 1 are routed through head 0 and DCB entries 2 and 3
are routed through head 1. This means that first two DCB entries will
have Head = 1 in the VBIOS, and second two will have Head = 2 (see the spec).

Since DCB entries are sorted by boot priority, LVDS is usually DCB entry 0
and is connected exclusively to head 0. Composite (TVDCBMask), when available,
is usually 16, i.e. DCB entry 5.


One thing that looks certain to me is that, assuming LVDS is indeed entry 0, bit #1 of the DCB masks must be set in at least 1 x DCB mask (don't know if it should be set in both). The trick will be to identify which DCB entry is VGA and which DCB entry is HDMI and set the associated bit in either DCB mask.


Having played a little with @1Revenger1's NVCAP Calculator tool, we know that the various DCB masks are expressed in reverse byte order in the NVCAP. So, if you set Head0DCBMask to 0100 and Head1DCBMask to 0600, each Head would be expected to route the following DCB entries:

Head0DCBMask 0100 -> 0x0001, i.e. 0000 0000 0000 0001 in binary, i.e. DCB entry 0 (normally LVDS)
Head1DCBMask 0600 -> 0x0006, i.e. 0000 0000 0000 0110 in binary, i.e. DCB entries 1 and 2 (whatever these may be)

In your case, such values would have therefore be expected to give you LVDS output and HDMI or VGA, but not HDMI + VGA since any given head can only support 1 x display at a time. But that's only valid if LVDS is DCB entry 0 with HDMI and VGA being DCB entries 1 and 2 (in whichever order).


The ROM dump info you provided shows 13 x DCB entries with:

entry 0 -> LVDS
entry 3, 5, 8, 10 -> DP
entry 1, 2, 4, 6, 7, 9, 11, 12 -> TDMS
entry 13 -> CRT (presumably VGA)

TDMS could mean anything like DVI or HDMI of course but I'd bet on DTMS being for DVI outputs and HDMI being the same as DP. On the other hand, to me at least, there is little doubt that CRT means VGA.




I proceeded to decode an old copy of the ROM file of the NVS 110M-fitted Latitude D620, knowing that:

  1. this old Dell laptop model was only physically fitted with a VGA output port.
  2. the associated Dock offered VGA + DVI + TV out.

The list of decoded DCB entries for that D620 ROM file comforted me into believing that TDMS most likely means DVI and that CRT is VGA:





Looking at the DCB entries, everything is pretty straight forward:

  • DCB entry 0 -> LVDS
  • DCB entry 1 -> VGA
  • DCB entry 2 -> DVI
  • DCB entry 4 (not 5) -> TV


When playing with the NVCAP calculator, everything was as I expected them to be on the DCB masks front:

  1. assigning DCB entry 0 (LVDS) to 1st head led to mask 0100
  2. assigning DCB entries 1 & 2 (VGA + DVI) to 2nd head led to mask 0600
  3. assigning DCB entries 0 & 1 (LVDS + VGA) to 1st head led to mask 0300





However, things can get much more complicated when multiple DCB entries are defined in the video ROM/VBIOS... I looked at another nVidia Tesla ROM, that of a Quadro FX 770M, another mobile nVidia dGPU fitted to laptops. That one showed no less than 12 x DCB entries, including multiple LVDS, TDMS or DP entries!





That makes the DCB masks much more complicated to set and proves you need to decode your VBIOS to identify all the available ports. This one revealed 8 x different displays!



The default DCB masks showed as follows: Head0DCBMask=0101 and Head1DCBMask=3e4e with LVDS displays being assigned to 1st head and all the others to 2nd head. I've not managed to suss out the calculation in this case... Would need to catch @1Revenger1 on the matter as I wonder if connector and/or bus values come into play here.


I don't know if you've been able to extract your GTX 560M ROM through tools such as GPU-Z but it may be interesting to try and see what DCB entries yours define. That could save you a lot of time... Once you've identified your DCB entries, I believe you could try and assign LVDS to Head0 only, then set HDMI and VGA to both Heads. Dortania's documentation seems to indicate that DCB entries are selected in boot order, so I'd say that any given head will try DCB entry 0, then DCB entry 1, then DCB entry 2, etc. As such, I'd set Head0 mask for, say, LVDS + HDMI or VGA and Head1 mask for HDMI and VGA.


Let us know how things go.

Hey Slice, that’s very interesting because it appears to be similar to the person in this thread.

I guess it could be possible that Toshiba wired things in a weird way when they built my laptop, and/or my VBIOS is completely different.

Hi Herve, I’m really glad that you replied mainly talking about the DCB entries instead of the variable brightness, because I figured out the variable brightness today.


I feel like a moron because I followed Rehabman’s guide regarding fixing brightness and each time overlooked the first paragraph about 10.12.4+.

It appears that my initial config file was correct, but my system kexts were wrong.

So eventually I followed this guide in order to extract some files from 10.12.3, and replace the ones in 10.12.6.


After I did this I have variable brightness with a 3 bit register (hardware limitation), so you can mark this thread mainly as solved (I still have to convert the device properties for my system). However, I really appreciate you for diving into helping me with the DCB entries. I originally just pulled a ROM from online, but I’ll try to extract my ROM to save some time and share it with you.


I’ve got some reading to do regarding Nvidia’s documentation, but you’ve explained the basics very well to me and I'll try my best to flip the bits around in order to crack this case.


Regarding when I close the lid with my current NVCAP value (HDMI/VGA + LVDS), my LVDS monitor turns off, but it doesn’t disconnect the LVDS monitor from the operating system or trigger sleep mode. HDMI/VGA remains connected.

  • 3 weeks later...

Sorry for taking a while to respond, I’ve been pretty busy lately.

However, I’ve got great news to share with everyone.

I’m happy to say that I extracted my VBIOS, and decoded the DCB entries!

(I’ve attached my VBIOS below.)


Just want to say right off the bat that I was wrong about my internal display being LVDS, it’s an EDP.

This explains why I could never get my integrated graphics working. (though I haven’t tried porting the HD3000 externally)


The ROM that I originally provided is completely different to the one that I extracted from my system. (I retrieved it through the Windows 10 registry using this method.)


The ROM dump info from my system shows 4 x DCB entries with:

entry 0 -> TDMS (HDMI/DVI)
entry 1 -> CRT (VGA)
entry 2 -> LVDS (unused)
entry 3 -> DisplayPort (internal)

This is the current NVCAP value that I’m now using:

05010000 00000800 03000000 0000000f 00000000

Which maps to this result:

  • NVDA,Display-A@0 -> DisplayPort
  • NVDA,Display-B@1 -> HDMI or VGA


I figured out how to disconnect the internal display upon closing the LID.

I had to install the DSDT patch “Poll for LID changes,” and ACPIPoller.kext.

If there’s an external display connected, the computer stays awake and disconnects my internal display. If no external display is connected, the computer goes into sleep mode.


I’ve tried every conceivable combination of DCB entries in order to get dual external monitors working upon closing the LID.

After closing the LID, I can’t seem to enable separate HDMI/VGA regardless of how DCB entries are arranged, and assigning DisplayPort to both heads just disables my internal display.


Do you think it would be possible to patch my VBIOS or use a different one?

(I’m assuming that if my internal display and VGA monitor shared the same bus, then they’d mirror each other and I could get dual external monitors working upon closing the LID.)


If not, I’m happy to have two separate configs, and just switch between them if needed.


Finally, I worked out how to achieve native resolution on my external HDMI monitor (2560x1440) using SwitchResX (though I wonder if installing my own custom EDID override to “/System/Library/Displays/Contents/Resources/Overrides” would be better). The only problem is that the refresh rate only goes up to 34hz. Would you happen to know how I could get it up to 60hz?


Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...