On 04/23/2012 03:39 PM, Daniel Vetter wrote: > On Mon, Apr 23, 2012 at 03:15:02PM +0200, Carsten Emde wrote: >> On 04/23/2012 02:36 PM, Daniel Vetter wrote: >>> On Mon, Apr 23, 2012 at 02:32:57PM +0200, Daniel Vetter wrote: >>>> On Mon, Apr 23, 2012 at 01:54:23PM +0200, Carsten Emde wrote: >>>>> On 04/23/2012 11:32 AM, Daniel Vetter wrote: >>>>>> There's a bit in the docs for gen4 only that says whether the >>>>>> backlight control is inverted. And both the quirk we have and >>>>>> all bugs only concern i965gm and gm45 (and mostly Acer) afaics. >>>>>> >>>>>> So lets drop the quirk and use the bit instead. >>>>>> >>>>>> Also clean up the BLC register definitions a bit by correctly >>>>>> grouping the CTL and CTL2 definitions together. >>>>>> [..] >>>>>> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c >>>>>> index 4c844c6..5d215f0 100644 >>>>>> --- a/drivers/gpu/drm/i915/intel_display.c >>>>>> +++ b/drivers/gpu/drm/i915/intel_display.c >>>>>> @@ -6482,9 +6482,6 @@ static struct intel_quirk intel_quirks[] = { >>>>>> >>>>>> /* Sony Vaio Y cannot use SSC on LVDS */ >>>>>> { 0x0046, 0x104d, 0x9076, quirk_ssc_force_disable }, >>>>>> - >>>>>> - /* Acer Aspire 5734Z must invert backlight brightness */ >>>>>> - { 0x2a42, 0x1025, 0x0459, quirk_invert_brightness }, >>>>> Made a first test with these lines removed and the new mechanism >>>>> added. Unfortunately, the screen is now dark again. Works after >>>>> re-adding the quirk. >>>>> >>>>>> + /* gen4 has a polarity bit */ >>>>>> + if (IS_GEN4(dev)&& (I915_READ(BLC_PWM_CTL2)& BLM_POLARITY_I965)) >>>>>> + return intel_panel_get_max_backlight(dev) - val; >>>>>> + >>>>> Apparently, these conditions are not met on the Acer Aspire 5734Z. >>>>> Will add some debug output and evaluate further. For the time being, >>>>> please leave the quirk in place. >>>> >>>> Hm, I've tried this and when I set this bit, panel brightness is inverted >>>> on my gm45. Can you install intel-gpu-tools and read out the 2 backlight >>>> control registers with >>>> >>>> # intel_reg_read 0x61254 >>>> # intel_reg_read 0x61250 >>> >>> I've forgotten to add: Also please grab these register values when booting >>> with nomodeset, so that we can compare the values the bios sets with >>> whatever i915 sets. >> >> Without nomodeset: >> # intel_reg_read 0x61254 >> 0x61254 : 0xB4A0B4A >> # intel_reg_read 0x61250 >> 0x61250 : 0xE0000000 >> >> With nomodeset: >> # intel_reg_read 0x61254 >> 0x61254 : 0xB4A0B4A >> # intel_reg_read 0x61250 >> 0x61250 : 0xE0000000 >> >> Thus, (I915_READ(BLC_PWM_CTL2)& BLM_POLARITY_I965) is never set. >> But bit 29 would work, so we could add another conditional such as: >> #define BLM_POLARITY_PCH_I965 (1<< 29) /* PCH only */ >> if (PCH) >> try (I915_READ(BLC_PWM_CTL2)& BLM_POLARITY_PCH_I965) > > Ok, let's try something funny. Please boot with kms enabled and try out > what the following values for CTL1 do: > > # intel_reg_write 0x61250 0x80000000 > # intel_reg_write 0x61250 0xa0000000 > # intel_reg_write 0x61250 0x90000000 > # intel_reg_write 0x61250 0xb0000000 # intel_reg_write 0x61250 0x80000000 Value before: 0xE0000000 Value after: 0x80000000 # intel_reg_read 0x61254 0x61254 : 0xB4A0B4A # intel_reg_write 0x61250 0xa0000000 Value before: 0x80000000 Value after: 0xA0000000 # intel_reg_read 0x61254 0x61254 : 0xB4A0B4A # intel_reg_write 0x61250 0x90000000 Value before: 0xA0000000 Value after: 0x90000000 # intel_reg_read 0x61254 0x61254 : 0xB4A0B4A # intel_reg_write 0x61250 0xb0000000 Value before: 0x90000000 Value after: 0xB0000000 # intel_reg_read 0x61254 0x61254 : 0xB4A0B4A Not much. -Carsten.