* Re: Strange effect with i915 backlight controller
[not found] <4EB3F860.6010408@gmail.com>
@ 2011-11-08 0:57 ` Daniel Mack
2011-11-10 15:11 ` Daniel Mack
0 siblings, 1 reply; 9+ messages in thread
From: Daniel Mack @ 2011-11-08 0:57 UTC (permalink / raw)
To: dri-devel; +Cc: jbarnes, harald, Keith Packard, linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1113 bytes --]
Didn't get any response yet, hence copying LKML for a broader audience.
On 11/04/2011 03:36 PM, Daniel Mack wrote:
> I'm facing a bug on a Samsung X20 notebook which features an i915
> chipset (output of 'lspci -v' attached).
>
> The effect is that setting the backlight to odd values causes the value
> to be misinterpreted. Harald Hoyer (cc:) had the same thing on a Netbook
> (I don't recall which model it was).
>
> So this will turn the backlight to full brightness:
>
> # cat /sys/class/backlight/intel_backlight/max_brightness
> 29750
> # echo 29750 > /sys/class/backlight/intel_backlight/brightness
>
> However, writing 29749 will turn the display backlight off, and 29748
> appears to be the next valid lower value.
>
> It seems like the IS_PINEVIEW() branch in
> drivers/gpu/drm/i915/intel_panel.c:intel_panel_actually_set_backlight()
> could do the right thing, but this code is written for an entirely
> different model, right?
>
> I can reproduce this on 3.0 and 3.1 vanilla as well as with the current
> mainline git.
>
> Let me know if there is any patch that I can test.
>
>
> Thanks,
> Daniel
[-- Attachment #2: lspci-v-x20.txt --]
[-- Type: text/plain, Size: 7996 bytes --]
00:00.0 Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (rev 03)
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, fast devsel, latency 0
Capabilities: [e0] Vendor Specific Information: Len=09 <?>
Kernel driver in use: agpgart-intel
00:02.0 VGA compatible controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03) (prog-if 00 [VGA controller])
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at b0080000 (32-bit, non-prefetchable) [size=512K]
I/O ports at 1800 [size=8]
Memory at c0000000 (32-bit, prefetchable) [size=256M]
Memory at b0000000 (32-bit, non-prefetchable) [size=256K]
Expansion ROM at <unassigned> [disabled]
Capabilities: [d0] Power Management version 2
Kernel driver in use: i915
Kernel modules: intelfb, i915
00:02.1 Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: fast devsel
Memory at 42000000 (32-bit, non-prefetchable) [disabled] [size=512K]
Capabilities: [d0] Power Management version 2
00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
I/O behind bridge: 00003000-00003fff
Memory behind bridge: b4000000-b7ffffff
Prefetchable memory behind bridge: 00000000d0000000-00000000d3ffffff
Capabilities: [40] Express Root Port (Slot+), MSI 00
Capabilities: [80] MSI: Enable+ Count=1/1 Maskable- 64bit-
Capabilities: [90] Subsystem: Samsung Electronics Co Ltd Device c01a
Capabilities: [a0] Power Management version 2
Capabilities: [100] Virtual Channel
Capabilities: [180] Root Complex Link
Kernel driver in use: pcieport
Kernel modules: shpchp
00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03) (prog-if 00 [UHCI])
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 0, IRQ 23
I/O ports at 1820 [size=32]
Kernel driver in use: uhci_hcd
00:1d.1 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 (rev 03) (prog-if 00 [UHCI])
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 0, IRQ 19
I/O ports at 1840 [size=32]
Kernel driver in use: uhci_hcd
00:1d.2 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 (rev 03) (prog-if 00 [UHCI])
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 0, IRQ 18
I/O ports at 1860 [size=32]
Kernel driver in use: uhci_hcd
00:1d.3 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 03) (prog-if 00 [UHCI])
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 0, IRQ 16
I/O ports at 1880 [size=32]
Kernel driver in use: uhci_hcd
00:1d.7 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 03) (prog-if 20 [EHCI])
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 0, IRQ 23
Memory at b0040000 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Capabilities: [58] Debug port: BAR=1 offset=00a0
Kernel driver in use: ehci_hcd
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev d3) (prog-if 01 [Subtractive decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=02, subordinate=06, sec-latency=32
I/O behind bridge: 00004000-00004fff
Memory behind bridge: b8000000-b80fffff
Prefetchable memory behind bridge: 0000000044000000-0000000049ffffff
Capabilities: [50] Subsystem: Gammagraphx, Inc. (or missing ID) Device 0000
00:1e.2 Multimedia audio controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 03)
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 0, IRQ 17
I/O ports at 1c00 [size=256]
I/O ports at 18c0 [size=64]
Memory at b0040800 (32-bit, non-prefetchable) [size=512]
Memory at b0040400 (32-bit, non-prefetchable) [size=256]
Capabilities: [50] Power Management version 2
Kernel driver in use: snd_intel8x0
Kernel modules: snd-intel8x0
00:1e.3 Modem: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller (rev 03) (prog-if 00 [Generic])
Subsystem: Samsung Electronics Co Ltd Device 2115
Flags: medium devsel, IRQ 20
I/O ports at 2400 [size=256]
I/O ports at 2000 [size=128]
Capabilities: [50] Power Management version 2
Kernel modules: snd-intel8x0m
00:1f.0 ISA bridge: Intel Corporation 82801FBM (ICH6M) LPC Interface Bridge (rev 03)
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 0
Kernel modules: iTCO_wdt, intel-rng
00:1f.1 IDE interface: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) IDE Controller (rev 03) (prog-if 8a [Master SecP PriP])
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 0, IRQ 18
I/O ports at 01f0 [size=8]
I/O ports at 03f4 [size=1]
I/O ports at 0170 [size=8]
I/O ports at 0374 [size=1]
I/O ports at 1810 [size=16]
Kernel driver in use: ata_piix
00:1f.3 SMBus: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) SMBus Controller (rev 03)
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: medium devsel, IRQ 5
I/O ports at 18a0 [size=32]
Kernel modules: i2c-i801
02:05.0 Ethernet controller: Broadcom Corporation BCM4401-B0 100Base-TX (rev 02)
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, fast devsel, latency 32, IRQ 22
Memory at b8000000 (32-bit, non-prefetchable) [size=8K]
[virtual] Expansion ROM at 44000000 [disabled] [size=64K]
Capabilities: [40] Power Management version 2
Kernel driver in use: b44
Kernel modules: b44
02:07.0 Network controller: Intel Corporation PRO/Wireless 2200BG [Calexico2] Network Connection (rev 05)
Subsystem: Intel Corporation Samsung P35 integrated WLAN
Flags: bus master, medium devsel, latency 32, IRQ 20
Memory at b8002000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [dc] Power Management version 2
Kernel driver in use: ipw2200
Kernel modules: ipw2200
02:09.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev b3)
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 168, IRQ 16
Memory at 000da000 (32-bit, non-prefetchable) [size=4K]
Bus: primary=02, secondary=03, subordinate=06, sec-latency=176
Memory window 0: 50000000-53fff000 (prefetchable)
Memory window 1: 4c000000-4ffff000
I/O window 0: 00004400-000044ff
I/O window 1: 00004000-000040ff
16-bit legacy interface ports at 0001
Kernel driver in use: yenta_cardbus
Kernel modules: yenta_socket
02:09.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C552 IEEE 1394 Controller (rev 08) (prog-if 10 [OHCI])
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 64, IRQ 17
Memory at b8003000 (32-bit, non-prefetchable) [size=2K]
Capabilities: [dc] Power Management version 2
Kernel driver in use: firewire_ohci
Kernel modules: firewire-ohci
02:09.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 17)
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: bus master, medium devsel, latency 32, IRQ 18
Memory at b8003800 (32-bit, non-prefetchable) [size=256]
Capabilities: [80] Power Management version 2
Kernel driver in use: sdhci-pci
Kernel modules: sdhci-pci
02:09.3 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 08)
Subsystem: Samsung Electronics Co Ltd Device c01a
Flags: medium devsel, IRQ 255
Memory at b8003c00 (32-bit, non-prefetchable) [size=256]
Capabilities: [80] Power Management version 2
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Strange effect with i915 backlight controller
2011-11-08 0:57 ` Strange effect with i915 backlight controller Daniel Mack
@ 2011-11-10 15:11 ` Daniel Mack
2011-11-10 15:39 ` Takashi Iwai
0 siblings, 1 reply; 9+ messages in thread
From: Daniel Mack @ 2011-11-10 15:11 UTC (permalink / raw)
To: dri-devel; +Cc: jbarnes, harald, Keith Packard, linux-kernel
On 11/08/2011 01:57 AM, Daniel Mack wrote:
> Didn't get any response yet, hence copying LKML for a broader audience.
Nobody, really?
This is a rather annoying regression, as touching the brightness keys
appearantly switches off the whole machine. I'm sure this is trivial to
fix, I just don't have the insight of this driver and the chipset.
Any pointer greatly appreciated, and I can test patches.
Thanks,
Daniel
>
> On 11/04/2011 03:36 PM, Daniel Mack wrote:
>> I'm facing a bug on a Samsung X20 notebook which features an i915
>> chipset (output of 'lspci -v' attached).
>>
>> The effect is that setting the backlight to odd values causes the value
>> to be misinterpreted. Harald Hoyer (cc:) had the same thing on a Netbook
>> (I don't recall which model it was).
>>
>> So this will turn the backlight to full brightness:
>>
>> # cat /sys/class/backlight/intel_backlight/max_brightness
>> 29750
>> # echo 29750 > /sys/class/backlight/intel_backlight/brightness
>>
>> However, writing 29749 will turn the display backlight off, and 29748
>> appears to be the next valid lower value.
>>
>> It seems like the IS_PINEVIEW() branch in
>> drivers/gpu/drm/i915/intel_panel.c:intel_panel_actually_set_backlight()
>> could do the right thing, but this code is written for an entirely
>> different model, right?
>>
>> I can reproduce this on 3.0 and 3.1 vanilla as well as with the current
>> mainline git.
>>
>> Let me know if there is any patch that I can test.
>>
>>
>> Thanks,
>> Daniel
>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Strange effect with i915 backlight controller
2011-11-10 15:11 ` Daniel Mack
@ 2011-11-10 15:39 ` Takashi Iwai
2011-11-13 16:24 ` Daniel Mack
0 siblings, 1 reply; 9+ messages in thread
From: Takashi Iwai @ 2011-11-10 15:39 UTC (permalink / raw)
To: Daniel Mack; +Cc: dri-devel, jbarnes, harald, Keith Packard, linux-kernel
At Thu, 10 Nov 2011 16:11:29 +0100,
Daniel Mack wrote:
>
> On 11/08/2011 01:57 AM, Daniel Mack wrote:
> > Didn't get any response yet, hence copying LKML for a broader audience.
>
> Nobody, really?
>
> This is a rather annoying regression, as touching the brightness keys
> appearantly switches off the whole machine. I'm sure this is trivial to
> fix, I just don't have the insight of this driver and the chipset.
I vaguely remember that the bit 0 is invalid on some old chips.
Maybe 915GM is one of them, as it's gen3? If so, the patch like below
may work.
Takashi
---
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index 499d4c0..be952d1 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -249,8 +249,11 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
if (IS_PINEVIEW(dev)) {
tmp &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1);
level <<= 1;
- } else
+ } else {
tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
+ if (INTEL_INFO(dev)->gen < 4)
+ tmp &= ~1;
+ }
I915_WRITE(BLC_PWM_CTL, tmp | level);
}
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: Strange effect with i915 backlight controller
2011-11-10 15:39 ` Takashi Iwai
@ 2011-11-13 16:24 ` Daniel Mack
2011-11-14 10:39 ` Takashi Iwai
0 siblings, 1 reply; 9+ messages in thread
From: Daniel Mack @ 2011-11-13 16:24 UTC (permalink / raw)
To: Takashi Iwai; +Cc: dri-devel, jbarnes, harald, Keith Packard, linux-kernel
Hi Takashi,
On 11/10/2011 04:39 PM, Takashi Iwai wrote:
> At Thu, 10 Nov 2011 16:11:29 +0100,
> Daniel Mack wrote:
>>
>> On 11/08/2011 01:57 AM, Daniel Mack wrote:
>>> Didn't get any response yet, hence copying LKML for a broader audience.
>>
>> Nobody, really?
>>
>> This is a rather annoying regression, as touching the brightness keys
>> appearantly switches off the whole machine. I'm sure this is trivial to
>> fix, I just don't have the insight of this driver and the chipset.
>
> I vaguely remember that the bit 0 is invalid on some old chips.
> Maybe 915GM is one of them, as it's gen3? If so, the patch like below
> may work.
Thank you for looking into this.
> ---
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index 499d4c0..be952d1 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -249,8 +249,11 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
> if (IS_PINEVIEW(dev)) {
> tmp &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1);
> level <<= 1;
> - } else
> + } else {
> tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
> + if (INTEL_INFO(dev)->gen < 4)
> + tmp &= ~1;
> + }
> I915_WRITE(BLC_PWM_CTL, tmp | level);
> }
>
This seems to be the right intention, but the value you want to modify
under this condition is 'level', not 'tmp'. With this amendment of your
patch, things work perfectly fine here.
You can add my
Reported-and-tested-by: Daniel Mack <zonque@gmail.com>
and please Cc: stable so we get this to the users asap.
Thanks!
Daniel
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Strange effect with i915 backlight controller
2011-11-13 16:24 ` Daniel Mack
@ 2011-11-14 10:39 ` Takashi Iwai
2011-11-14 12:03 ` Daniel Mack
2011-11-16 12:58 ` Daniel Mack
0 siblings, 2 replies; 9+ messages in thread
From: Takashi Iwai @ 2011-11-14 10:39 UTC (permalink / raw)
To: Daniel Mack
Cc: Chris Wilson, dri-devel, jbarnes, harald, Keith Packard,
linux-kernel
[Added Chris to Cc]
At Sun, 13 Nov 2011 17:24:09 +0100,
Daniel Mack wrote:
>
> Hi Takashi,
>
> On 11/10/2011 04:39 PM, Takashi Iwai wrote:
> > At Thu, 10 Nov 2011 16:11:29 +0100,
> > Daniel Mack wrote:
> >>
> >> On 11/08/2011 01:57 AM, Daniel Mack wrote:
> >>> Didn't get any response yet, hence copying LKML for a broader audience.
> >>
> >> Nobody, really?
> >>
> >> This is a rather annoying regression, as touching the brightness keys
> >> appearantly switches off the whole machine. I'm sure this is trivial to
> >> fix, I just don't have the insight of this driver and the chipset.
> >
> > I vaguely remember that the bit 0 is invalid on some old chips.
> > Maybe 915GM is one of them, as it's gen3? If so, the patch like below
> > may work.
>
> Thank you for looking into this.
>
> > ---
> > diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> > index 499d4c0..be952d1 100644
> > --- a/drivers/gpu/drm/i915/intel_panel.c
> > +++ b/drivers/gpu/drm/i915/intel_panel.c
> > @@ -249,8 +249,11 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
> > if (IS_PINEVIEW(dev)) {
> > tmp &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1);
> > level <<= 1;
> > - } else
> > + } else {
> > tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
> > + if (INTEL_INFO(dev)->gen < 4)
> > + tmp &= ~1;
> > + }
> > I915_WRITE(BLC_PWM_CTL, tmp | level);
> > }
> >
>
> This seems to be the right intention, but the value you want to modify
> under this condition is 'level', not 'tmp'.
Ah, of course. Sorry for that.
> With this amendment of your
> patch, things work perfectly fine here.
OK, then perhaps a better fix is to change the check to be equivalent
with pineview, as you mentioned in the original post. The handling of
bit 0 for old chips was lost during the refactoring of backlight code
since 2.6.37.
Does the patch below work for you?
The only concern by this fix is that it changes the max value. If
apps expect some certain (e.g. recorded) value, it may screw up. But
I don't expect this would happen with sane apps.
thanks,
Takashi
===
From: Takashi Iwai <tiwai@suse.de>
Subject: drm/i915: Fix invalid backpanel values for GEN3 or older chips
While refactoring of backlight control code in commit [a95735569:
drm/i915: Refactor panel backlight controls], the handling of the bit
0 of duty-cycle was gone except for pineview. This resulted in invalid
register values for old chips like 915GM. When the bit 0 is set, the
backlight is turned off suddenly.
This patch changes the bit-0 check by replacing with the condition of
gen < 4 (pineview is included in this condition, too).
Reported-by: Daniel Mack <zonque@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
drivers/gpu/drm/i915/intel_panel.c | 8 +++-----
1 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index 499d4c0..737d00f 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -178,12 +178,10 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev)
if (HAS_PCH_SPLIT(dev)) {
max >>= 16;
} else {
- if (IS_PINEVIEW(dev)) {
+ if (INTEL_INFO(dev)->gen < 4) {
max >>= 17;
} else {
max >>= 16;
- if (INTEL_INFO(dev)->gen < 4)
- max &= ~1;
}
if (is_backlight_combination_mode(dev))
@@ -203,7 +201,7 @@ u32 intel_panel_get_backlight(struct drm_device *dev)
val = I915_READ(BLC_PWM_CPU_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
} else {
val = I915_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
- if (IS_PINEVIEW(dev))
+ if (INTEL_INFO(dev)->gen < 4)
val >>= 1;
if (is_backlight_combination_mode(dev)) {
@@ -246,7 +244,7 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
}
tmp = I915_READ(BLC_PWM_CTL);
- if (IS_PINEVIEW(dev)) {
+ if (INTEL_INFO(dev)->gen < 4) {
tmp &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1);
level <<= 1;
} else
--
1.7.7
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: Strange effect with i915 backlight controller
2011-11-14 10:39 ` Takashi Iwai
@ 2011-11-14 12:03 ` Daniel Mack
2011-11-14 13:05 ` Takashi Iwai
2011-11-16 12:58 ` Daniel Mack
1 sibling, 1 reply; 9+ messages in thread
From: Daniel Mack @ 2011-11-14 12:03 UTC (permalink / raw)
To: Takashi Iwai
Cc: Chris Wilson, dri-devel, jbarnes, harald, Keith Packard,
linux-kernel
On 11/14/2011 11:39 AM, Takashi Iwai wrote:
> [Added Chris to Cc]
>
> At Sun, 13 Nov 2011 17:24:09 +0100,
> Daniel Mack wrote:
>>
>> Hi Takashi,
>>
>> On 11/10/2011 04:39 PM, Takashi Iwai wrote:
>>> At Thu, 10 Nov 2011 16:11:29 +0100,
>>> Daniel Mack wrote:
>>>>
>>>> On 11/08/2011 01:57 AM, Daniel Mack wrote:
>>>>> Didn't get any response yet, hence copying LKML for a broader audience.
>>>>
>>>> Nobody, really?
>>>>
>>>> This is a rather annoying regression, as touching the brightness keys
>>>> appearantly switches off the whole machine. I'm sure this is trivial to
>>>> fix, I just don't have the insight of this driver and the chipset.
>>>
>>> I vaguely remember that the bit 0 is invalid on some old chips.
>>> Maybe 915GM is one of them, as it's gen3? If so, the patch like below
>>> may work.
>>
>> Thank you for looking into this.
>>
>>> ---
>>> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
>>> index 499d4c0..be952d1 100644
>>> --- a/drivers/gpu/drm/i915/intel_panel.c
>>> +++ b/drivers/gpu/drm/i915/intel_panel.c
>>> @@ -249,8 +249,11 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
>>> if (IS_PINEVIEW(dev)) {
>>> tmp &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1);
>>> level <<= 1;
>>> - } else
>>> + } else {
>>> tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
>>> + if (INTEL_INFO(dev)->gen < 4)
>>> + tmp &= ~1;
>>> + }
>>> I915_WRITE(BLC_PWM_CTL, tmp | level);
>>> }
>>>
>>
>> This seems to be the right intention, but the value you want to modify
>> under this condition is 'level', not 'tmp'.
>
> Ah, of course. Sorry for that.
>
>> With this amendment of your
>> patch, things work perfectly fine here.
>
> OK, then perhaps a better fix is to change the check to be equivalent
> with pineview, as you mentioned in the original post. The handling of
> bit 0 for old chips was lost during the refactoring of backlight code
> since 2.6.37.
>
> Does the patch below work for you?
Will test, but I only have occasional access to the machine, so this
will have to wait for some days.
> The only concern by this fix is that it changes the max value. If
> apps expect some certain (e.g. recorded) value, it may screw up. But
> I don't expect this would happen with sane apps.
I don't think so either.
Thanks,
Daniel
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Strange effect with i915 backlight controller
2011-11-14 12:03 ` Daniel Mack
@ 2011-11-14 13:05 ` Takashi Iwai
0 siblings, 0 replies; 9+ messages in thread
From: Takashi Iwai @ 2011-11-14 13:05 UTC (permalink / raw)
To: Daniel Mack
Cc: Chris Wilson, dri-devel, jbarnes, harald, Keith Packard,
linux-kernel
At Mon, 14 Nov 2011 13:03:46 +0100,
Daniel Mack wrote:
>
> On 11/14/2011 11:39 AM, Takashi Iwai wrote:
> > [Added Chris to Cc]
> >
> > At Sun, 13 Nov 2011 17:24:09 +0100,
> > Daniel Mack wrote:
> >>
> >> Hi Takashi,
> >>
> >> On 11/10/2011 04:39 PM, Takashi Iwai wrote:
> >>> At Thu, 10 Nov 2011 16:11:29 +0100,
> >>> Daniel Mack wrote:
> >>>>
> >>>> On 11/08/2011 01:57 AM, Daniel Mack wrote:
> >>>>> Didn't get any response yet, hence copying LKML for a broader audience.
> >>>>
> >>>> Nobody, really?
> >>>>
> >>>> This is a rather annoying regression, as touching the brightness keys
> >>>> appearantly switches off the whole machine. I'm sure this is trivial to
> >>>> fix, I just don't have the insight of this driver and the chipset.
> >>>
> >>> I vaguely remember that the bit 0 is invalid on some old chips.
> >>> Maybe 915GM is one of them, as it's gen3? If so, the patch like below
> >>> may work.
> >>
> >> Thank you for looking into this.
> >>
> >>> ---
> >>> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> >>> index 499d4c0..be952d1 100644
> >>> --- a/drivers/gpu/drm/i915/intel_panel.c
> >>> +++ b/drivers/gpu/drm/i915/intel_panel.c
> >>> @@ -249,8 +249,11 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
> >>> if (IS_PINEVIEW(dev)) {
> >>> tmp &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1);
> >>> level <<= 1;
> >>> - } else
> >>> + } else {
> >>> tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
> >>> + if (INTEL_INFO(dev)->gen < 4)
> >>> + tmp &= ~1;
> >>> + }
> >>> I915_WRITE(BLC_PWM_CTL, tmp | level);
> >>> }
> >>>
> >>
> >> This seems to be the right intention, but the value you want to modify
> >> under this condition is 'level', not 'tmp'.
> >
> > Ah, of course. Sorry for that.
> >
> >> With this amendment of your
> >> patch, things work perfectly fine here.
> >
> > OK, then perhaps a better fix is to change the check to be equivalent
> > with pineview, as you mentioned in the original post. The handling of
> > bit 0 for old chips was lost during the refactoring of backlight code
> > since 2.6.37.
> >
> > Does the patch below work for you?
>
> Will test, but I only have occasional access to the machine, so this
> will have to wait for some days.
It's an old bug over a year, so no need to hurry.
Takashi
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Strange effect with i915 backlight controller
2011-11-14 10:39 ` Takashi Iwai
2011-11-14 12:03 ` Daniel Mack
@ 2011-11-16 12:58 ` Daniel Mack
2011-11-16 17:15 ` Takashi Iwai
1 sibling, 1 reply; 9+ messages in thread
From: Daniel Mack @ 2011-11-16 12:58 UTC (permalink / raw)
To: Takashi Iwai
Cc: Chris Wilson, dri-devel, jbarnes, harald, Keith Packard,
linux-kernel
On 11/14/2011 11:39 AM, Takashi Iwai wrote:
> OK, then perhaps a better fix is to change the check to be equivalent
> with pineview, as you mentioned in the original post. The handling of
> bit 0 for old chips was lost during the refactoring of backlight code
> since 2.6.37.
>
> Does the patch below work for you?
>
> The only concern by this fix is that it changes the max value. If
> apps expect some certain (e.g. recorded) value, it may screw up. But
> I don't expect this would happen with sane apps.
Works perfectly - let's ship it :)
Thanks again,
Daniel
> ===
> From: Takashi Iwai <tiwai@suse.de>
> Subject: drm/i915: Fix invalid backpanel values for GEN3 or older chips
>
> While refactoring of backlight control code in commit [a95735569:
> drm/i915: Refactor panel backlight controls], the handling of the bit
> 0 of duty-cycle was gone except for pineview. This resulted in invalid
> register values for old chips like 915GM. When the bit 0 is set, the
> backlight is turned off suddenly.
>
> This patch changes the bit-0 check by replacing with the condition of
> gen < 4 (pineview is included in this condition, too).
>
> Reported-by: Daniel Mack <zonque@gmail.com>
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
> drivers/gpu/drm/i915/intel_panel.c | 8 +++-----
> 1 files changed, 3 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index 499d4c0..737d00f 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -178,12 +178,10 @@ u32 intel_panel_get_max_backlight(struct drm_device *dev)
> if (HAS_PCH_SPLIT(dev)) {
> max >>= 16;
> } else {
> - if (IS_PINEVIEW(dev)) {
> + if (INTEL_INFO(dev)->gen < 4) {
> max >>= 17;
> } else {
> max >>= 16;
> - if (INTEL_INFO(dev)->gen < 4)
> - max &= ~1;
> }
>
> if (is_backlight_combination_mode(dev))
> @@ -203,7 +201,7 @@ u32 intel_panel_get_backlight(struct drm_device *dev)
> val = I915_READ(BLC_PWM_CPU_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
> } else {
> val = I915_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
> - if (IS_PINEVIEW(dev))
> + if (INTEL_INFO(dev)->gen < 4)
> val >>= 1;
>
> if (is_backlight_combination_mode(dev)) {
> @@ -246,7 +244,7 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
> }
>
> tmp = I915_READ(BLC_PWM_CTL);
> - if (IS_PINEVIEW(dev)) {
> + if (INTEL_INFO(dev)->gen < 4) {
> tmp &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1);
> level <<= 1;
> } else
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: Strange effect with i915 backlight controller
2011-11-16 12:58 ` Daniel Mack
@ 2011-11-16 17:15 ` Takashi Iwai
0 siblings, 0 replies; 9+ messages in thread
From: Takashi Iwai @ 2011-11-16 17:15 UTC (permalink / raw)
To: Daniel Mack
Cc: Chris Wilson, dri-devel, jbarnes, harald, Keith Packard,
linux-kernel
At Wed, 16 Nov 2011 13:58:57 +0100,
Daniel Mack wrote:
>
> On 11/14/2011 11:39 AM, Takashi Iwai wrote:
> > OK, then perhaps a better fix is to change the check to be equivalent
> > with pineview, as you mentioned in the original post. The handling of
> > bit 0 for old chips was lost during the refactoring of backlight code
> > since 2.6.37.
> >
> > Does the patch below work for you?
> >
> > The only concern by this fix is that it changes the max value. If
> > apps expect some certain (e.g. recorded) value, it may screw up. But
> > I don't expect this would happen with sane apps.
>
> Works perfectly - let's ship it :)
OK, now the patch was resent to intel-gfx with proper tags.
thanks,
Takashi
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2011-11-16 17:15 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <4EB3F860.6010408@gmail.com>
2011-11-08 0:57 ` Strange effect with i915 backlight controller Daniel Mack
2011-11-10 15:11 ` Daniel Mack
2011-11-10 15:39 ` Takashi Iwai
2011-11-13 16:24 ` Daniel Mack
2011-11-14 10:39 ` Takashi Iwai
2011-11-14 12:03 ` Daniel Mack
2011-11-14 13:05 ` Takashi Iwai
2011-11-16 12:58 ` Daniel Mack
2011-11-16 17:15 ` Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox