Jump to content

UPDATED 20.12. GenericBrightness.kext


674 posts in this topic

Recommended Posts

Hi Ivik,

 

i have a X3100 and i have working brightness slider with device pnlf and a version of the appleintelx3100fb.kext (1.5.18) + efi string.with your kext i cant change brightness any more. i dont have a method to store the brightness level in my dsdt, maybe you will find it? thank you very much in advance, Alex

dsdt.dsl.zip

 

 

...
Try runing RW-everything under windows and watch EC register for changes when brightness is changed.

Also... try with different _BCL return tables...

Hi ivik
I was testing your kext with different DSDT settings last couple of days but have no luck with it

I wrote similar post before so just copying it to pass info to you:
on my system (dv9040) two methods are responsible for brightness control (i mean if I remove them Im losing fn+f7 and fn+f8 key combination to cntrl brightness):

Method (_Q11, 0, NotSerialized)
{
Store (0x14, SMIF)
Store (Zero, TRP0)
Sleep (0x32)
}

Method (_Q10, 0, NotSerialized)
{
Store (0x15, SMIF)
Store (Zero, TRP0)
Sleep (0x32)
}

they are located in Device (EC0) _SB.PCI0.LPCB.EC0._Q11/10
thats how they looked before I stripped them:

Method (_Q11, 0, NotSerialized)
{
If (LEqual (OSYS, 0x07D6))
{
If (IGDS)
{
Notify (^^^GFX0.DD04, 0x86)
}
Else
{
Notify (^^^PEGP.VGA.LCD, 0x86)
}
}
Else
{
Store (0x14, SMIF)
Store (Zero, TRP0)
}

Sleep (0x32)
}

Method (_Q10, 0, NotSerialized)
{
If (LEqual (OSYS, 0x07D6))
{
If (IGDS)
{
Notify (^^^GFX0.DD04, 0x87)
}
Else
{
Notify (^^^PEGP.VGA.LCD, 0x87)
}
}
Else
{
Store (0x15, SMIF)
Store (Zero, TRP0)
}

Sleep (0x32)
}

I started wondering if my brightness control is just controlled from BIOS level only and is just too much pain=effort to adapt it to software OSX language, but must say - it is still tempting to solve it !

can you possibly send me a link with some info or shortly guide me to explain "runing RW-everything" on Windows ? dont know what to do with that.

thank a lot mate
s

_Q* methods are embedded controller events. In your's case they are writing some values to smif-system management interface.

 

Open rw-everything and watch EC controller. Watch values that are changing when brightness is changed. If there is no difference, then your brightness is not controlled by EC.

_Q* methods are embedded controller events. In your's case they are writing some values to smif-system management interface.

 

Open rw-everything and watch EC controller. Watch values that are changing when brightness is changed. If there is no difference, then your brightness is not controlled by EC.

Hi ivik

ok, my dmesg brightness output:

 

Acpi brightness levels:11, lowest brightness:20, highest brightness:95

We still don't have brightness entry in ioreg... waiting...

We still don't have brightness entry in ioreg... waiting...

 

Rw-everything gives me two pairs of changing numbers while Im increasing, decreasing brightness

starting from darkest lvl:

14,18,1C,20,25,2B,32,3B,45,51,5F

 

thanks

swavek

thanks for all your help and time ivik

no luck with your last modifications here

posting RegExplorer screenshot just for off chance if will help

reg.tiff

 

I wonder why I have 13 values in DSDT while only 11 change in rw-everything and dmesg says 11 too, also I have to check VoodooPS2 controller settings as I have sun icon only on F7 key, F8 shows desktops view and F6 doesnt work (same with your kext), still can check brightness in Desktop prefpanel - slider stays in max position now

 

cheers

s

@ivik, here is the dmesg :dmesg.rtf

Unknown scancode= 0046
Unknown scancode= 00c6
Unknown scancode= 0046
Unknown scancode= 00c6
Unknown scancode= 0046
Unknown scancode= 00c6
Unknown scancode= 0046
Unknown scancode= 00c6
Unknown scancode= 0046
Unknown scancode= 00c6
Unknown scancode= 0046
Unknown scancode= 00c6
Unknown scancode= 0046
Unknown scancode= 00c6
Unknown scancode= 0046
Unknown scancode= 00c6

and this :

We still don't have brightness entry in ioreg... waiting...

 

thanks.

thanks for all your help and time ivik

no luck with your last modifications here

posting RegExplorer screenshot just for off chance if will help

reg.tiff

 

I wonder why I have 13 values in DSDT while only 11 change in rw-everything and dmesg says 11 too, also I have to check VoodooPS2 controller settings as I have sun icon only on F7 key, F8 shows desktops view and F6 doesnt work (same with your kext), still can check brightness in Desktop prefpanel - slider stays in max position now

 

cheers

s

 

First 2 valuese are for brightness on charger/bat.

 

This is problem... max=0.

If you have intel card, read post 50. Maybe injecting some values in dsdt on boot could fix your max brightness 0.

 

@zprood

 

Are these scan codes from FN-up/down?

Are u using Voodoops2?

@BlackCH

here is the dsdt for u

change in bcm method to values that u think that are right

 

Thanks al lot! but sadly it doesnt work yet. After a brightness value is set, the address is written with zeroes (black screen). Only when is at maximum brightness it remains there.

I dont know if you got my last PM. The correct values are FFFF0000 (minimum), FFFFFFFF (maximum). Notice the lower two bytes need to be always 'on' (FFFF) and the other two bytes are holding the brightness value. You could have 16 brightness steps for example: FFFF0000, FFFF1000, FFFF2000, FFFF3000, etc, up to FFFFFFFF

Did you modified dsdt?

 

If (LEqual (Arg0, 0x1E)) {Store (0xFFFF0000, LEVL)} for minimum.. snd so on

 

Example for max:

If (LEqual (Arg0, 0x64)) {Store (0xFFFFFFFF, LEVL)}

 

I will try, and I let you know how it turns up

 

EDIT:

 

Yes! That worked. Apple driver write the wrong value first, and then the value gets corrected by your driver. The only bad thing is that you see this on the screen; but is far better than befor already. Thanks a lot

How I can add more brightness steps?

Sometimes the brightness get corrected after a couple of seconds (maybe less), would be possible to shorten this time?

 

EDIT 2:

When you change the BRT with the slider, there are some point in which the brightness does not get corrected. With key strokes works fine

 

Now I should try to remap the keys. Everytime I press brightness-up my DVD drive opens...

Nice!!!

I think that your laptop could change brightness without my driver. Problem is that max brightness is wrong FFFF?

* The GMA950 has a backlight control register at offset 0x00061254 in its
* PCI memory space (512K region):
* - bits 0-15 represent the backlight value
* - bits 16 indicates legacy mode is in use when set
* - bits 17-31 hold the max backlight value << 1
*
* Bit 16 indicates whether the backlight control should be used in legacy
* mode or not. This bit is 0 on MacBooks, indicating native mode should be
* used. This is the only method supported here.
*
*
* The GMA965 is slightly different; the backlight control register is at
* offset 0x00061250 in its PCI memory space (first 512K in the 1M region):
* - bits 0-15 represent the backlight value
* - bits 16-31 hold the max backlight value
* - bit 30 indicates legacy mode is in use when set
*
*
* For BOTH cards, the register for the backlight value is at offset 0x00061254.

maybe writing it at boot with _INI method on PCIO could solve this.
maybe setting both valuesfor max at 0x00061254 and 0x00061250, becuse x3100 uses both registers. to store brightness (bit 0-15)

Brightness is changed after one second and only if there is difference/changed. But apple driver changes it first... and since u have 11 steps, maxbrightness/11 then under these ranges is not set by my driver.

I could do some fixes for laptop, and change time to 0.5 second.
Nice!!!

 

I think that your laptop could change brightness without my driver. Problem is that max brightness is wrong FFFF?

 

It works with FF00 too, I can not notice any difference. I will look into the other register, but last time I look @ 0x00061254 it was all zeros and I couldnt write to it with reggie_se

BlackCH, i have 6710b Notebook which is very similar to yours, i also have the (uneven, 95%) brightness problems (display: 1680x1050 non-glare). Can you point out which parts of the DSDT you modified in the end to get it working now, so i can add it to my dsdt.

 

You write you patched original x3100 driver to disable driver brightness control? Can you explain this alternative solution. You said driver messes up brightness and it is corrected by the generic brightness.kext. Did you try a combination of patched driver and this kext.

 

I currently use the keyboard maestro solution.

 

 

Ok, but maybe at boot time it could be changed.

Now give me all yours brightness velues from min to max to add all steps to your brightness.


I've added them myself to the PNLF device.

Device (PNLF)
{
Name (_HID, EisaId ("APP0002"))
Name (_CID, "backlight")
Name (_UID, 0x0A)
Name (_STA, 0x0B)
Name (C1AF, Package (0x15)
{
0x64,
0x33,
0x1E,
0x22,
0x26,
0x2A,
0x2E,
0x32,
0x36,
0x3A,
0x3E,
0x42,
0x46,
0x4A,
0x4E,
0x52,
0x56,
0x5A,
0x5E,
0x62,
0x64
})
Name (C1B0, 0x00)
Method (_BCL, 0, Serialized)
{
If (LAnd (LEqual (C1B0, 0x00), And (C06C, 0x10)))
{
Store (C06E, Local0)
Store (0x00, Local1)
While (LLess (Local1, 0x0B))
{
Store (DerefOf (Index (Local0, Local1)), Local2)
Multiply (Local2, 0x64, Local3)
Divide (Add (Local3, 0x7F), 0xFF, Local4, Local2)
Store (Local2, Index (C1AF, Add (Local1, 0x02)))
Increment (Local1)
}

Store (DerefOf (Index (C1AF, 0x05)), Index (C1AF, 0x01))
Store (Local2, Index (C1AF, 0x00))
Store (0x01, C1B0)
}

Return (C1AF)
}

Name (C1B1, 0x64)
Method (_BCM, 1, Serialized)
{
/* Store (0x00, Local0)
If (LGreater (\OSDW (), 0x05))
{
Or (C05B, 0x40, C05B)
Store (0x01, Local0)
}

Store (Arg0, C1B1)
Store (Match (C1AF, MEQ, Arg0, MTR, 0x00, 0x00), Local1)
Store (Local1, C072)
\_SB.C1B2 (0xEA74, 0x04, Local1, 0x00, 0x00)
Signal (\_SB.C1AC) */

If (LEqual (Arg0, 0x1E)) {Store (0xFFFF0000, LEVL)} //minimum brightness
If (LEqual (Arg0, 0x22)) {Store (0xFFFF0500, LEVL)}
If (LEqual (Arg0, 0x26)) {Store (0xFFFF1000, LEVL)}
If (LEqual (Arg0, 0x2A)) {Store (0xFFFF2000, LEVL)}
If (LEqual (Arg0, 0x2E)) {Store (0xFFFF3000, LEVL)}
If (LEqual (Arg0, 0x32)) {Store (0xFFFF4000, LEVL)}
If (LEqual (Arg0, 0x36)) {Store (0xFFFF5000, LEVL)}
If (LEqual (Arg0, 0x3A)) {Store (0xFFFF6000, LEVL)}
If (LEqual (Arg0, 0x3E)) {Store (0xFFFF7000, LEVL)}
If (LEqual (Arg0, 0x42)) {Store (0xFFFF8000, LEVL)}
If (LEqual (Arg0, 0x46)) {Store (0xFFFF9000, LEVL)}
If (LEqual (Arg0, 0x4a)) {Store (0xFFFFa000, LEVL)}
If (LEqual (Arg0, 0x4e)) {Store (0xFFFFb000, LEVL)}
If (LEqual (Arg0, 0x52)) {Store (0xFFFFc000, LEVL)}
If (LEqual (Arg0, 0x56)) {Store (0xFFFFd000, LEVL)}
If (LEqual (Arg0, 0x5A)) {Store (0xFFFFe000, LEVL)}
If (LEqual (Arg0, 0x5E)) {Store (0xFFFFE500, LEVL)}
If (LEqual (Arg0, 0x62)) {Store (0xFFFFFF00, LEVL)}
If (LEqual (Arg0, 0x64)) {Store (0xFFFFFFFF, LEVL)} //maksimum
}

Method (_BQC, 0, Serialized)
{
Store (C1B1, Local0)
Return (Local0)
}

}

Its a bit redundant (too many steps) but I was just trying things.

Thanks!!
Do all these steps work?

 

If I enter those with reggie_se all works; I guess one could do a (BrightValue=BrightValue+1) in a loop, and you'll get a continuous smooth brightness going up (that wouldnt be useful though)

 

Could you try this driver? 16 steps and always writing values when slider is moved (when little moved).

It is modified only for your notebook.

There is also dsdt in archive that only works with this driver.

 

That didnt work. It acts like before (non-linear buggy brightness)

×
×
  • Create New...