Contribute
Register

Full range of brightness using ACPIBacklight

Status
Not open for further replies.
I thought that too but then it wouldn't change for values below 0x710... And it actually does as said before... If I set 0x100/0x100 I get full brightness, and then keeping KLVX at 0x100 and changing RawBrightness, it only makes a difference for values lower than 0x100, just as expected...

Earlier I said the maximum brightness I got was for 0x710 because values above that for KLVX always give me less brightness. But values below 0x710 also give me full brightness, as long as RawBrightness is higher or equal to.

From everything done so far I strongly believe playing with these values won't solve my specific problem, we'll have to move further on DSDT editing... Probably allowing the system to recognise KLVX > 0x710.

You need to take a close look at the situation in Windows with RW-Everything. Let me know what you find out...
 
Play with different values... See if you can figure out what makes it tick...

Also, another thing you could do is collect some data from Windows (using RW-Everything). In particular, all the typical values for LEV2, LEVL, LEVW, LEVX.

Considering I'm a total newbie at that and I can't decide for myself what would really be "all the typical values", and as I saw two different values in the same memory address for maximal and minimal brightness in the cases of LEV2 and LEVL, I'm attaching here some print screens I took from RW-Everything.

Just a quick overlook:
LEVL and LEV2: I see 00000111 and 01007BF1 at minimal brightness, and respectively 0000122A and 01007AFA at maximal
LEVW and LEVX: they don't vary with brightness and all registers are 122A1228

Important or not, before applying the "Native brightness" patch, in ioreg inside the device PNLF it used to say "AppleBacklightAtBoot = 4648" which matches with 0x1228 (the 16 less significative bits from LEVW and LEVX). And for "AppleMaxBrightness" it used to say 1808 (0x710).
 

Attachments

  • LEVs.zip
    43.7 KB · Views: 74
Considering I'm a total newbie at that and I can't decide for myself what would really be "all the typical values", and as I saw two different values in the same memory address for maximal and minimal brightness in the cases of LEV2 and LEVL, I'm attaching here some print screens I took from RW-Everything.

Just a quick overlook:
LEVL and LEV2: I see 00000111 and 01007BF1 at minimal brightness, and respectively 0000122A and 01007AFA at maximal

Where did you see 01007BF1 or 01007AFA? I do not see that in any images you provided...

Note: It is only necessary to look at F0048250 (shows LEV2/LEVL) and F00C8250 (shows LEVW/LEVX).

LEVW and LEVX: they don't vary with brightness and all registers are 122A1228

I see LEVW as 0x80000000 (as expected).

You should try making a data patch that uses these values...
 
Where did you see 01007BF1 or 01007AFA? I do not see that in any images you provided...
They are registers apart but are presented in the same window when inputting the memory address of LEVL and LEV2. Look at the columns more to the right... But as you say 0x80000000 is the value for LEVW, then maybe I should have looked only for the first value (1st line 1st column). Anyway these are also changing registers with respect to the brightness...

You should try making a data patch that uses these values...
Ok I'll see on Monday what can I do about that. Have a nice weekend! :)
 
They are registers apart but are presented in the same window when inputting the memory address of LEVL and LEV2. Look at the columns more to the right... But as you say 0x80000000 is the value for LEVW, then maybe I should have looked only for the first value (1st line 1st column). Anyway these are also changing registers with respect to the brightness...

Those other values are not LEV2/LEVL. They are different registers in the same MMIO space. I would have to look at the Intel docs to see if they map to anything significant.
 
Brightness level 0 and Display sleep by corner work fine, but auto display sleep will cause blinking screen. I already set XRGL to 3.
 
Brightness level 0 and Display sleep by corner work fine, but auto display sleep will cause blinking screen. I already set XRGL to 3.

Move it higher until it no longer happens. Use ioio to set RawBrightness to determine correct value.
 
Move it higher until it no longer happens. Use ioio to set RawBrightness to determine correct value.

I set it to much higher (0x13) and auto display sleep works now, but how can I know the best value with ioio? I tested brightness levels from 3->20 in ioio and all work, no flickering at all.
 
I set it to much higher (0x13) and auto display sleep works now, but how can I know the best value with ioio? I tested brightness levels from 3->20 in ioio and all work, no flickering at all.

What I've noticed with my 4540s is that some values don't take, or perhaps they depend on what value was set previously (almost as if it ignores the new value unless the difference between the new value and old value is large enough). So, it makes it difficult to test different values because it is so unpredictable and buggy. One thing you might try is setting to 0x710, then follow to each of the low values (eg. 0x710->3, 0x710->4, etc), just to see what happens.

But the best value for the XRGL is the lowest value that doesn't cause unpredictable flickering. It is really not necessary to optimize it to the absolute lowest as it is more of an "effect" thing... that is, it only affects the nice dimming effect on the way to completely off.
 
Thank you RehabMan for your explanation, I now set the XRGL back to 0 (although it's not the best value by principle, it works all fine now, don't notice any flickering).
 
Status
Not open for further replies.
Back
Top