diff mbox

Linux 3.11-rc2 [backlight] [ASUS N56VZ]

Message ID 6051153.b6TE1dlrel@vostro.rjw.lan (mailing list archive)
State New, archived
Headers show

Commit Message

Rafael Wysocki July 24, 2013, 9:23 p.m. UTC
On Wednesday, July 24, 2013 02:05:15 PM Linus Torvalds wrote:
> On Wed, Jul 24, 2013 at 2:02 PM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> >
> > I think a i915 module option should be doable, otoh people seem to have a
> > viable workaround by setting a different acpi os version already.
> 
> At least the original claim was that if you set a non-windows8 acpi os
> version, you hit other bugs..
> 
> But yeah, if we just do a plain revert, that may be the only option
> for the people for whom the current (to-be-reverted) patches made
> things work.

Well, I wonder what about the appended (untested) patch?

It should restore the previous behavior while leaving an option to use the
new stuff if need be.

Rafael


---
 drivers/gpu/drm/i915/i915_dma.c |    2 +-
 drivers/gpu/drm/i915/i915_drv.c |    5 +++++
 drivers/gpu/drm/i915/i915_drv.h |    1 +
 include/acpi/video.h            |   16 ++++++----------
 4 files changed, 13 insertions(+), 11 deletions(-)

Comments

Jani Nikula July 25, 2013, 8:09 a.m. UTC | #1
On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> On Wednesday, July 24, 2013 02:05:15 PM Linus Torvalds wrote:
>> On Wed, Jul 24, 2013 at 2:02 PM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
>> >
>> > I think a i915 module option should be doable, otoh people seem to have a
>> > viable workaround by setting a different acpi os version already.
>> 
>> At least the original claim was that if you set a non-windows8 acpi os
>> version, you hit other bugs..
>> 
>> But yeah, if we just do a plain revert, that may be the only option
>> for the people for whom the current (to-be-reverted) patches made
>> things work.
>
> Well, I wonder what about the appended (untested) patch?

Rafael, before going there, I've been trying to wrap my (poor, rusty
after vacation) head around

commit 8c5bd7adb2ce47e6aa39d17b2375f69b0c0aa255
Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Date:   Thu Jul 18 02:08:06 2013 +0200

    ACPI / video / i915: No ACPI backlight if firmware expects Windows 8

and I can't see how it could work.

First, the ACPI_VIDEO_SKIP_BACKLIGHT flag seems to be checked before
it's actually set anywhere. Buried deep in the calls from
acpi_video_bus_add(), acpi_video_verify_backlight_support() is used
before acpi_video_backlight_quirks() gets called. (Perhaps if i915 is
reloaded, this goes right as the flags are already set.)

Second, with i915 that has opregion support, __acpi_video_register()
should only ever get called once. Which means the acpi_walk_namespace()
with video_unregister_backlight() should never get called in register.

Please enlighten me.

BR,
Jani.
Rafael Wysocki July 25, 2013, 11:58 a.m. UTC | #2
On Thursday, July 25, 2013 11:09:27 AM Jani Nikula wrote:
> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> > On Wednesday, July 24, 2013 02:05:15 PM Linus Torvalds wrote:
> >> On Wed, Jul 24, 2013 at 2:02 PM, Daniel Vetter <daniel.vetter@ffwll.ch> wrote:
> >> >
> >> > I think a i915 module option should be doable, otoh people seem to have a
> >> > viable workaround by setting a different acpi os version already.
> >> 
> >> At least the original claim was that if you set a non-windows8 acpi os
> >> version, you hit other bugs..
> >> 
> >> But yeah, if we just do a plain revert, that may be the only option
> >> for the people for whom the current (to-be-reverted) patches made
> >> things work.
> >
> > Well, I wonder what about the appended (untested) patch?
> 
> Rafael, before going there, I've been trying to wrap my (poor, rusty
> after vacation) head around
> 
> commit 8c5bd7adb2ce47e6aa39d17b2375f69b0c0aa255
> Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> Date:   Thu Jul 18 02:08:06 2013 +0200
> 
>     ACPI / video / i915: No ACPI backlight if firmware expects Windows 8
> 
> and I can't see how it could work.

Well, if it didn't work, people wouldn't see either improvement or breakage
from it, but they do see that, so it evidently works. :-)

> First, the ACPI_VIDEO_SKIP_BACKLIGHT flag seems to be checked before
> it's actually set anywhere.

Are you sure about that?

acpi_video_bus_add() is the .add() callback routine for acpi_video_bus which
in fact is an ACPI driver (the naming sucks, but I didn't invent it).  This
means that acpi_video_bus_add() can only be called *after* acpi_video_bus
has been registered with the ACPI subsystem (and the driver core).  That
is done by acpi_bus_register_driver() and, guess what?, this happens in
__acpi_video_register().  So clearly, acpi_video_bus_add() *cannot* run before
__acpi_video_register().

> Buried deep in the calls from
> acpi_video_bus_add(), acpi_video_verify_backlight_support() is used
> before acpi_video_backlight_quirks() gets called. (Perhaps if i915 is
> reloaded, this goes right as the flags are already set.)

Please see above.

> Second, with i915 that has opregion support, __acpi_video_register()
> should only ever get called once. Which means the acpi_walk_namespace()
> with video_unregister_backlight() should never get called in register.
> 
> Please enlighten me.

Actually, that's correct, so we don't need the whole
video_unregister_backlight() thing, calling acpi_video_backlight_quirks() would
be sufficient.

Ah, one more reason to do a full revert.  I'm thinking, though, that I'll leave
acpi_video_backlight_quirks() as is so that it can be used by
acpi_video_bus_(start)|(stop)_devices(), because that doesn't seem to cause
problems to happen.

Thanks,
Rafael
Jani Nikula July 25, 2013, 12:34 p.m. UTC | #3
On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> On Thursday, July 25, 2013 11:09:27 AM Jani Nikula wrote:
>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>> > Well, I wonder what about the appended (untested) patch?
>> 
>> Rafael, before going there, I've been trying to wrap my (poor, rusty
>> after vacation) head around
>> 
>> commit 8c5bd7adb2ce47e6aa39d17b2375f69b0c0aa255
>> Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>> Date:   Thu Jul 18 02:08:06 2013 +0200
>> 
>>     ACPI / video / i915: No ACPI backlight if firmware expects Windows 8
>> 
>> and I can't see how it could work.
>
> Well, if it didn't work, people wouldn't see either improvement or breakage
> from it, but they do see that, so it evidently works. :-)

I didn't claim it didn't work, just that *I* didn't see how it could. ;)

>> First, the ACPI_VIDEO_SKIP_BACKLIGHT flag seems to be checked before
>> it's actually set anywhere.
>
> Are you sure about that?
>
> acpi_video_bus_add() is the .add() callback routine for acpi_video_bus which
> in fact is an ACPI driver (the naming sucks, but I didn't invent it).  This
> means that acpi_video_bus_add() can only be called *after* acpi_video_bus
> has been registered with the ACPI subsystem (and the driver core).  That
> is done by acpi_bus_register_driver() and, guess what?, this happens in
> __acpi_video_register().  So clearly, acpi_video_bus_add() *cannot* run before
> __acpi_video_register().

Right. I totally missed the call within the ternary operator. Thanks for
the explanation, and apologies for the noise.

>> Second, with i915 that has opregion support, __acpi_video_register()
>> should only ever get called once. Which means the acpi_walk_namespace()
>> with video_unregister_backlight() should never get called in register.
>> 
>> Please enlighten me.
>
> Actually, that's correct, so we don't need the whole
> video_unregister_backlight() thing, calling acpi_video_backlight_quirks() would
> be sufficient.
>
> Ah, one more reason to do a full revert.  I'm thinking, though, that I'll leave
> acpi_video_backlight_quirks() as is so that it can be used by
> acpi_video_bus_(start)|(stop)_devices(), because that doesn't seem to cause
> problems to happen.

I observe that for the regular non-quirk acpi_video_register() call,
acpi_video_backlight_quirks() won't be called during register, but it
will get called later. This might have subtle effects later on, don't
you think?

As to the original problem, and your patch in this thread, what do you
think about having another value in acpi_backlight kernel parameter for
it? Having an i915 module parameter to tell acpi to use or not use
quirks seems odd, since the i915 is not really taking over
anything. It's just passing the info on to acpi.

BR,
Jani.
Rafael Wysocki July 25, 2013, 12:57 p.m. UTC | #4
On Thursday, July 25, 2013 03:34:10 PM Jani Nikula wrote:
> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> > On Thursday, July 25, 2013 11:09:27 AM Jani Nikula wrote:
> >> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> >> > Well, I wonder what about the appended (untested) patch?
> >> 
> >> Rafael, before going there, I've been trying to wrap my (poor, rusty
> >> after vacation) head around
> >> 
> >> commit 8c5bd7adb2ce47e6aa39d17b2375f69b0c0aa255
> >> Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >> Date:   Thu Jul 18 02:08:06 2013 +0200
> >> 
> >>     ACPI / video / i915: No ACPI backlight if firmware expects Windows 8
> >> 
> >> and I can't see how it could work.
> >
> > Well, if it didn't work, people wouldn't see either improvement or breakage
> > from it, but they do see that, so it evidently works. :-)
> 
> I didn't claim it didn't work, just that *I* didn't see how it could. ;)
> 
> >> First, the ACPI_VIDEO_SKIP_BACKLIGHT flag seems to be checked before
> >> it's actually set anywhere.
> >
> > Are you sure about that?
> >
> > acpi_video_bus_add() is the .add() callback routine for acpi_video_bus which
> > in fact is an ACPI driver (the naming sucks, but I didn't invent it).  This
> > means that acpi_video_bus_add() can only be called *after* acpi_video_bus
> > has been registered with the ACPI subsystem (and the driver core).  That
> > is done by acpi_bus_register_driver() and, guess what?, this happens in
> > __acpi_video_register().  So clearly, acpi_video_bus_add() *cannot* run before
> > __acpi_video_register().
> 
> Right. I totally missed the call within the ternary operator. Thanks for
> the explanation, and apologies for the noise.
> 
> >> Second, with i915 that has opregion support, __acpi_video_register()
> >> should only ever get called once. Which means the acpi_walk_namespace()
> >> with video_unregister_backlight() should never get called in register.
> >> 
> >> Please enlighten me.
> >
> > Actually, that's correct, so we don't need the whole
> > video_unregister_backlight() thing, calling acpi_video_backlight_quirks() would
> > be sufficient.
> >
> > Ah, one more reason to do a full revert.  I'm thinking, though, that I'll leave
> > acpi_video_backlight_quirks() as is so that it can be used by
> > acpi_video_bus_(start)|(stop)_devices(), because that doesn't seem to cause
> > problems to happen.
> 
> I observe that for the regular non-quirk acpi_video_register() call,
> acpi_video_backlight_quirks() won't be called during register, but it
> will get called later. This might have subtle effects later on, don't
> you think?

Yes, it might, but after dropping ACPI_VIDEO_SKIP_BACKLIGHT it should be OK.

> As to the original problem, and your patch in this thread, what do you
> think about having another value in acpi_backlight kernel parameter for
> it? Having an i915 module parameter to tell acpi to use or not use
> quirks seems odd, since the i915 is not really taking over
> anything. It's just passing the info on to acpi.

I agree, I'm going to send a full revert in a while and we'll think what to
do about all that later.

Thanks,
Rafael
* SAMÍ * July 29, 2013, 7:36 p.m. UTC | #5
Hi Rafael,


did you commit a full revert?
Because I am experiencing quite weird things in rc3.
Do we have a bug opened to discuss about it?

Here is what I can observe:
1) During boot, probably when loading the driver, backlight gets off (or 
to a level low enough to make me feel it is off)
2) When I am playing with my Fn+x keys, I am getting a completely full / 
completely low brightness with no intermediate steps
3) When I am playing with my Fn+x keys while gnome brightness settings 
panel is open, I am recovering intermediate steps but the Fn+x keys 
behavior is inverted (the key supposed to lower the brightness make it 
increase and vice-versa. Note that the gnome brightness indicator also 
gets inverted).
4) Playing with the mouse on gnome brightness settings is working, 
except that on the minimum level, backlight gets off
5) Writing to /sys/class/backlight/intel_backlight/brightness works


Regards

On 07/25/2013 02:57 PM, Rafael J. Wysocki wrote:
> On Thursday, July 25, 2013 03:34:10 PM Jani Nikula wrote:
>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>>> On Thursday, July 25, 2013 11:09:27 AM Jani Nikula wrote:
>>>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>>>>> Well, I wonder what about the appended (untested) patch?
>>>> Rafael, before going there, I've been trying to wrap my (poor, rusty
>>>> after vacation) head around
>>>>
>>>> commit 8c5bd7adb2ce47e6aa39d17b2375f69b0c0aa255
>>>> Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>>>> Date:   Thu Jul 18 02:08:06 2013 +0200
>>>>
>>>>      ACPI / video / i915: No ACPI backlight if firmware expects Windows 8
>>>>
>>>> and I can't see how it could work.
>>> Well, if it didn't work, people wouldn't see either improvement or breakage
>>> from it, but they do see that, so it evidently works. :-)
>> I didn't claim it didn't work, just that *I* didn't see how it could. ;)
>>
>>>> First, the ACPI_VIDEO_SKIP_BACKLIGHT flag seems to be checked before
>>>> it's actually set anywhere.
>>> Are you sure about that?
>>>
>>> acpi_video_bus_add() is the .add() callback routine for acpi_video_bus which
>>> in fact is an ACPI driver (the naming sucks, but I didn't invent it).  This
>>> means that acpi_video_bus_add() can only be called *after* acpi_video_bus
>>> has been registered with the ACPI subsystem (and the driver core).  That
>>> is done by acpi_bus_register_driver() and, guess what?, this happens in
>>> __acpi_video_register().  So clearly, acpi_video_bus_add() *cannot* run before
>>> __acpi_video_register().
>> Right. I totally missed the call within the ternary operator. Thanks for
>> the explanation, and apologies for the noise.
>>
>>>> Second, with i915 that has opregion support, __acpi_video_register()
>>>> should only ever get called once. Which means the acpi_walk_namespace()
>>>> with video_unregister_backlight() should never get called in register.
>>>>
>>>> Please enlighten me.
>>> Actually, that's correct, so we don't need the whole
>>> video_unregister_backlight() thing, calling acpi_video_backlight_quirks() would
>>> be sufficient.
>>>
>>> Ah, one more reason to do a full revert.  I'm thinking, though, that I'll leave
>>> acpi_video_backlight_quirks() as is so that it can be used by
>>> acpi_video_bus_(start)|(stop)_devices(), because that doesn't seem to cause
>>> problems to happen.
>> I observe that for the regular non-quirk acpi_video_register() call,
>> acpi_video_backlight_quirks() won't be called during register, but it
>> will get called later. This might have subtle effects later on, don't
>> you think?
> Yes, it might, but after dropping ACPI_VIDEO_SKIP_BACKLIGHT it should be OK.
>
>> As to the original problem, and your patch in this thread, what do you
>> think about having another value in acpi_backlight kernel parameter for
>> it? Having an i915 module parameter to tell acpi to use or not use
>> quirks seems odd, since the i915 is not really taking over
>> anything. It's just passing the info on to acpi.
> I agree, I'm going to send a full revert in a while and we'll think what to
> do about all that later.
>
> Thanks,
> Rafael
>
>
Rafael Wysocki July 29, 2013, 8:03 p.m. UTC | #6
On Monday, July 29, 2013 09:36:31 PM * SAMÍ * wrote:
> Hi Rafael,
> 
> 
> did you commit a full revert?

Yes, but I left acpi_video_backlight_quirks() (in drivers/acpi/video_detect.c)
that is used to decide what to do with _DOS.

Can you please check if making that function always return 'false' makes any
difference?

Rafael


> Because I am experiencing quite weird things in rc3.
> Do we have a bug opened to discuss about it?
> 
> Here is what I can observe:
> 1) During boot, probably when loading the driver, backlight gets off (or 
> to a level low enough to make me feel it is off)
> 2) When I am playing with my Fn+x keys, I am getting a completely full / 
> completely low brightness with no intermediate steps
> 3) When I am playing with my Fn+x keys while gnome brightness settings 
> panel is open, I am recovering intermediate steps but the Fn+x keys 
> behavior is inverted (the key supposed to lower the brightness make it 
> increase and vice-versa. Note that the gnome brightness indicator also 
> gets inverted).
> 4) Playing with the mouse on gnome brightness settings is working, 
> except that on the minimum level, backlight gets off
> 5) Writing to /sys/class/backlight/intel_backlight/brightness works
> 
> 
> Regards
> 
> On 07/25/2013 02:57 PM, Rafael J. Wysocki wrote:
> > On Thursday, July 25, 2013 03:34:10 PM Jani Nikula wrote:
> >> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> >>> On Thursday, July 25, 2013 11:09:27 AM Jani Nikula wrote:
> >>>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> >>>>> Well, I wonder what about the appended (untested) patch?
> >>>> Rafael, before going there, I've been trying to wrap my (poor, rusty
> >>>> after vacation) head around
> >>>>
> >>>> commit 8c5bd7adb2ce47e6aa39d17b2375f69b0c0aa255
> >>>> Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >>>> Date:   Thu Jul 18 02:08:06 2013 +0200
> >>>>
> >>>>      ACPI / video / i915: No ACPI backlight if firmware expects Windows 8
> >>>>
> >>>> and I can't see how it could work.
> >>> Well, if it didn't work, people wouldn't see either improvement or breakage
> >>> from it, but they do see that, so it evidently works. :-)
> >> I didn't claim it didn't work, just that *I* didn't see how it could. ;)
> >>
> >>>> First, the ACPI_VIDEO_SKIP_BACKLIGHT flag seems to be checked before
> >>>> it's actually set anywhere.
> >>> Are you sure about that?
> >>>
> >>> acpi_video_bus_add() is the .add() callback routine for acpi_video_bus which
> >>> in fact is an ACPI driver (the naming sucks, but I didn't invent it).  This
> >>> means that acpi_video_bus_add() can only be called *after* acpi_video_bus
> >>> has been registered with the ACPI subsystem (and the driver core).  That
> >>> is done by acpi_bus_register_driver() and, guess what?, this happens in
> >>> __acpi_video_register().  So clearly, acpi_video_bus_add() *cannot* run before
> >>> __acpi_video_register().
> >> Right. I totally missed the call within the ternary operator. Thanks for
> >> the explanation, and apologies for the noise.
> >>
> >>>> Second, with i915 that has opregion support, __acpi_video_register()
> >>>> should only ever get called once. Which means the acpi_walk_namespace()
> >>>> with video_unregister_backlight() should never get called in register.
> >>>>
> >>>> Please enlighten me.
> >>> Actually, that's correct, so we don't need the whole
> >>> video_unregister_backlight() thing, calling acpi_video_backlight_quirks() would
> >>> be sufficient.
> >>>
> >>> Ah, one more reason to do a full revert.  I'm thinking, though, that I'll leave
> >>> acpi_video_backlight_quirks() as is so that it can be used by
> >>> acpi_video_bus_(start)|(stop)_devices(), because that doesn't seem to cause
> >>> problems to happen.
> >> I observe that for the regular non-quirk acpi_video_register() call,
> >> acpi_video_backlight_quirks() won't be called during register, but it
> >> will get called later. This might have subtle effects later on, don't
> >> you think?
> > Yes, it might, but after dropping ACPI_VIDEO_SKIP_BACKLIGHT it should be OK.
> >
> >> As to the original problem, and your patch in this thread, what do you
> >> think about having another value in acpi_backlight kernel parameter for
> >> it? Having an i915 module parameter to tell acpi to use or not use
> >> quirks seems odd, since the i915 is not really taking over
> >> anything. It's just passing the info on to acpi.
> > I agree, I'm going to send a full revert in a while and we'll think what to
> > do about all that later.
> >
> > Thanks,
> > Rafael
> >
> >
>
* SAMÍ * July 29, 2013, 9:53 p.m. UTC | #7
When I make acpi_video_backlight_quirks() return false:
- the Fn+x keys are not working anymore (remember that they didn't work 
in 3.10 nor 3.9)
- At least the backlight remains on at boot.
- Gnome brightness settings do not work anymore. Neither do xbacklight.
- Writing to /sys/class/backlight/intel_backlight/brightness works

Regards,
Sam

On 07/29/2013 10:03 PM, Rafael J. Wysocki wrote:
> On Monday, July 29, 2013 09:36:31 PM * SAMÍ * wrote:
>> Hi Rafael,
>>
>>
>> did you commit a full revert?
> Yes, but I left acpi_video_backlight_quirks() (in drivers/acpi/video_detect.c)
> that is used to decide what to do with _DOS.
>
> Can you please check if making that function always return 'false' makes any
> difference?
>
> Rafael
>
>
>> Because I am experiencing quite weird things in rc3.
>> Do we have a bug opened to discuss about it?
>>
>> Here is what I can observe:
>> 1) During boot, probably when loading the driver, backlight gets off (or
>> to a level low enough to make me feel it is off)
>> 2) When I am playing with my Fn+x keys, I am getting a completely full /
>> completely low brightness with no intermediate steps
>> 3) When I am playing with my Fn+x keys while gnome brightness settings
>> panel is open, I am recovering intermediate steps but the Fn+x keys
>> behavior is inverted (the key supposed to lower the brightness make it
>> increase and vice-versa. Note that the gnome brightness indicator also
>> gets inverted).
>> 4) Playing with the mouse on gnome brightness settings is working,
>> except that on the minimum level, backlight gets off
>> 5) Writing to /sys/class/backlight/intel_backlight/brightness works
>>
>>
>> Regards
>>
>> On 07/25/2013 02:57 PM, Rafael J. Wysocki wrote:
>>> On Thursday, July 25, 2013 03:34:10 PM Jani Nikula wrote:
>>>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>>>>> On Thursday, July 25, 2013 11:09:27 AM Jani Nikula wrote:
>>>>>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>>>>>>> Well, I wonder what about the appended (untested) patch?
>>>>>> Rafael, before going there, I've been trying to wrap my (poor, rusty
>>>>>> after vacation) head around
>>>>>>
>>>>>> commit 8c5bd7adb2ce47e6aa39d17b2375f69b0c0aa255
>>>>>> Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>>>>>> Date:   Thu Jul 18 02:08:06 2013 +0200
>>>>>>
>>>>>>       ACPI / video / i915: No ACPI backlight if firmware expects Windows 8
>>>>>>
>>>>>> and I can't see how it could work.
>>>>> Well, if it didn't work, people wouldn't see either improvement or breakage
>>>>> from it, but they do see that, so it evidently works. :-)
>>>> I didn't claim it didn't work, just that *I* didn't see how it could. ;)
>>>>
>>>>>> First, the ACPI_VIDEO_SKIP_BACKLIGHT flag seems to be checked before
>>>>>> it's actually set anywhere.
>>>>> Are you sure about that?
>>>>>
>>>>> acpi_video_bus_add() is the .add() callback routine for acpi_video_bus which
>>>>> in fact is an ACPI driver (the naming sucks, but I didn't invent it).  This
>>>>> means that acpi_video_bus_add() can only be called *after* acpi_video_bus
>>>>> has been registered with the ACPI subsystem (and the driver core).  That
>>>>> is done by acpi_bus_register_driver() and, guess what?, this happens in
>>>>> __acpi_video_register().  So clearly, acpi_video_bus_add() *cannot* run before
>>>>> __acpi_video_register().
>>>> Right. I totally missed the call within the ternary operator. Thanks for
>>>> the explanation, and apologies for the noise.
>>>>
>>>>>> Second, with i915 that has opregion support, __acpi_video_register()
>>>>>> should only ever get called once. Which means the acpi_walk_namespace()
>>>>>> with video_unregister_backlight() should never get called in register.
>>>>>>
>>>>>> Please enlighten me.
>>>>> Actually, that's correct, so we don't need the whole
>>>>> video_unregister_backlight() thing, calling acpi_video_backlight_quirks() would
>>>>> be sufficient.
>>>>>
>>>>> Ah, one more reason to do a full revert.  I'm thinking, though, that I'll leave
>>>>> acpi_video_backlight_quirks() as is so that it can be used by
>>>>> acpi_video_bus_(start)|(stop)_devices(), because that doesn't seem to cause
>>>>> problems to happen.
>>>> I observe that for the regular non-quirk acpi_video_register() call,
>>>> acpi_video_backlight_quirks() won't be called during register, but it
>>>> will get called later. This might have subtle effects later on, don't
>>>> you think?
>>> Yes, it might, but after dropping ACPI_VIDEO_SKIP_BACKLIGHT it should be OK.
>>>
>>>> As to the original problem, and your patch in this thread, what do you
>>>> think about having another value in acpi_backlight kernel parameter for
>>>> it? Having an i915 module parameter to tell acpi to use or not use
>>>> quirks seems odd, since the i915 is not really taking over
>>>> anything. It's just passing the info on to acpi.
>>> I agree, I'm going to send a full revert in a while and we'll think what to
>>> do about all that later.
>>>
>>> Thanks,
>>> Rafael
>>>
>>>
Rafael Wysocki July 29, 2013, 10:11 p.m. UTC | #8
On Monday, July 29, 2013 11:53:59 PM * SAMÍ * wrote:
> When I make acpi_video_backlight_quirks() return false:
> - the Fn+x keys are not working anymore (remember that they didn't work 
> in 3.10 nor 3.9)
> - At least the backlight remains on at boot.
> - Gnome brightness settings do not work anymore. Neither do xbacklight.
> - Writing to /sys/class/backlight/intel_backlight/brightness works

Well, you're better off with acpi_video_backlight_quirks() as is, then. :-)

I'm afraid we can't help you by revering anything more at this point.

Please file a bug in the kernel BZ to further track the issues you're
seeing.

Thanks,
Rafael


> On 07/29/2013 10:03 PM, Rafael J. Wysocki wrote:
> > On Monday, July 29, 2013 09:36:31 PM * SAMÍ * wrote:
> >> Hi Rafael,
> >>
> >>
> >> did you commit a full revert?
> > Yes, but I left acpi_video_backlight_quirks() (in drivers/acpi/video_detect.c)
> > that is used to decide what to do with _DOS.
> >
> > Can you please check if making that function always return 'false' makes any
> > difference?
> >
> > Rafael
> >
> >
> >> Because I am experiencing quite weird things in rc3.
> >> Do we have a bug opened to discuss about it?
> >>
> >> Here is what I can observe:
> >> 1) During boot, probably when loading the driver, backlight gets off (or
> >> to a level low enough to make me feel it is off)
> >> 2) When I am playing with my Fn+x keys, I am getting a completely full /
> >> completely low brightness with no intermediate steps
> >> 3) When I am playing with my Fn+x keys while gnome brightness settings
> >> panel is open, I am recovering intermediate steps but the Fn+x keys
> >> behavior is inverted (the key supposed to lower the brightness make it
> >> increase and vice-versa. Note that the gnome brightness indicator also
> >> gets inverted).
> >> 4) Playing with the mouse on gnome brightness settings is working,
> >> except that on the minimum level, backlight gets off
> >> 5) Writing to /sys/class/backlight/intel_backlight/brightness works
> >>
> >>
> >> Regards
> >>
> >> On 07/25/2013 02:57 PM, Rafael J. Wysocki wrote:
> >>> On Thursday, July 25, 2013 03:34:10 PM Jani Nikula wrote:
> >>>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> >>>>> On Thursday, July 25, 2013 11:09:27 AM Jani Nikula wrote:
> >>>>>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
> >>>>>>> Well, I wonder what about the appended (untested) patch?
> >>>>>> Rafael, before going there, I've been trying to wrap my (poor, rusty
> >>>>>> after vacation) head around
> >>>>>>
> >>>>>> commit 8c5bd7adb2ce47e6aa39d17b2375f69b0c0aa255
> >>>>>> Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
> >>>>>> Date:   Thu Jul 18 02:08:06 2013 +0200
> >>>>>>
> >>>>>>       ACPI / video / i915: No ACPI backlight if firmware expects Windows 8
> >>>>>>
> >>>>>> and I can't see how it could work.
> >>>>> Well, if it didn't work, people wouldn't see either improvement or breakage
> >>>>> from it, but they do see that, so it evidently works. :-)
> >>>> I didn't claim it didn't work, just that *I* didn't see how it could. ;)
> >>>>
> >>>>>> First, the ACPI_VIDEO_SKIP_BACKLIGHT flag seems to be checked before
> >>>>>> it's actually set anywhere.
> >>>>> Are you sure about that?
> >>>>>
> >>>>> acpi_video_bus_add() is the .add() callback routine for acpi_video_bus which
> >>>>> in fact is an ACPI driver (the naming sucks, but I didn't invent it).  This
> >>>>> means that acpi_video_bus_add() can only be called *after* acpi_video_bus
> >>>>> has been registered with the ACPI subsystem (and the driver core).  That
> >>>>> is done by acpi_bus_register_driver() and, guess what?, this happens in
> >>>>> __acpi_video_register().  So clearly, acpi_video_bus_add() *cannot* run before
> >>>>> __acpi_video_register().
> >>>> Right. I totally missed the call within the ternary operator. Thanks for
> >>>> the explanation, and apologies for the noise.
> >>>>
> >>>>>> Second, with i915 that has opregion support, __acpi_video_register()
> >>>>>> should only ever get called once. Which means the acpi_walk_namespace()
> >>>>>> with video_unregister_backlight() should never get called in register.
> >>>>>>
> >>>>>> Please enlighten me.
> >>>>> Actually, that's correct, so we don't need the whole
> >>>>> video_unregister_backlight() thing, calling acpi_video_backlight_quirks() would
> >>>>> be sufficient.
> >>>>>
> >>>>> Ah, one more reason to do a full revert.  I'm thinking, though, that I'll leave
> >>>>> acpi_video_backlight_quirks() as is so that it can be used by
> >>>>> acpi_video_bus_(start)|(stop)_devices(), because that doesn't seem to cause
> >>>>> problems to happen.
> >>>> I observe that for the regular non-quirk acpi_video_register() call,
> >>>> acpi_video_backlight_quirks() won't be called during register, but it
> >>>> will get called later. This might have subtle effects later on, don't
> >>>> you think?
> >>> Yes, it might, but after dropping ACPI_VIDEO_SKIP_BACKLIGHT it should be OK.
> >>>
> >>>> As to the original problem, and your patch in this thread, what do you
> >>>> think about having another value in acpi_backlight kernel parameter for
> >>>> it? Having an i915 module parameter to tell acpi to use or not use
> >>>> quirks seems odd, since the i915 is not really taking over
> >>>> anything. It's just passing the info on to acpi.
> >>> I agree, I'm going to send a full revert in a while and we'll think what to
> >>> do about all that later.
> >>>
> >>> Thanks,
> >>> Rafael
> >>>
> >>>
>
Aaron Lu July 29, 2013, 11:38 p.m. UTC | #9
On 07/30/2013 03:36 AM, * SAMÍ * wrote:
> Hi Rafael,
> 
> 
> did you commit a full revert?
> Because I am experiencing quite weird things in rc3.
> Do we have a bug opened to discuss about it?

Yes we have:
https://bugzilla.kernel.org/show_bug.cgi?id=52951

I'll look into this issue.

Thanks,
Aaron

> 
> Here is what I can observe:
> 1) During boot, probably when loading the driver, backlight gets off (or 
> to a level low enough to make me feel it is off)
> 2) When I am playing with my Fn+x keys, I am getting a completely full / 
> completely low brightness with no intermediate steps
> 3) When I am playing with my Fn+x keys while gnome brightness settings 
> panel is open, I am recovering intermediate steps but the Fn+x keys 
> behavior is inverted (the key supposed to lower the brightness make it 
> increase and vice-versa. Note that the gnome brightness indicator also 
> gets inverted).
> 4) Playing with the mouse on gnome brightness settings is working, 
> except that on the minimum level, backlight gets off
> 5) Writing to /sys/class/backlight/intel_backlight/brightness works
> 
> 
> Regards
> 
> On 07/25/2013 02:57 PM, Rafael J. Wysocki wrote:
>> On Thursday, July 25, 2013 03:34:10 PM Jani Nikula wrote:
>>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>>>> On Thursday, July 25, 2013 11:09:27 AM Jani Nikula wrote:
>>>>> On Thu, 25 Jul 2013, "Rafael J. Wysocki" <rjw@sisk.pl> wrote:
>>>>>> Well, I wonder what about the appended (untested) patch?
>>>>> Rafael, before going there, I've been trying to wrap my (poor, rusty
>>>>> after vacation) head around
>>>>>
>>>>> commit 8c5bd7adb2ce47e6aa39d17b2375f69b0c0aa255
>>>>> Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
>>>>> Date:   Thu Jul 18 02:08:06 2013 +0200
>>>>>
>>>>>      ACPI / video / i915: No ACPI backlight if firmware expects Windows 8
>>>>>
>>>>> and I can't see how it could work.
>>>> Well, if it didn't work, people wouldn't see either improvement or breakage
>>>> from it, but they do see that, so it evidently works. :-)
>>> I didn't claim it didn't work, just that *I* didn't see how it could. ;)
>>>
>>>>> First, the ACPI_VIDEO_SKIP_BACKLIGHT flag seems to be checked before
>>>>> it's actually set anywhere.
>>>> Are you sure about that?
>>>>
>>>> acpi_video_bus_add() is the .add() callback routine for acpi_video_bus which
>>>> in fact is an ACPI driver (the naming sucks, but I didn't invent it).  This
>>>> means that acpi_video_bus_add() can only be called *after* acpi_video_bus
>>>> has been registered with the ACPI subsystem (and the driver core).  That
>>>> is done by acpi_bus_register_driver() and, guess what?, this happens in
>>>> __acpi_video_register().  So clearly, acpi_video_bus_add() *cannot* run before
>>>> __acpi_video_register().
>>> Right. I totally missed the call within the ternary operator. Thanks for
>>> the explanation, and apologies for the noise.
>>>
>>>>> Second, with i915 that has opregion support, __acpi_video_register()
>>>>> should only ever get called once. Which means the acpi_walk_namespace()
>>>>> with video_unregister_backlight() should never get called in register.
>>>>>
>>>>> Please enlighten me.
>>>> Actually, that's correct, so we don't need the whole
>>>> video_unregister_backlight() thing, calling acpi_video_backlight_quirks() would
>>>> be sufficient.
>>>>
>>>> Ah, one more reason to do a full revert.  I'm thinking, though, that I'll leave
>>>> acpi_video_backlight_quirks() as is so that it can be used by
>>>> acpi_video_bus_(start)|(stop)_devices(), because that doesn't seem to cause
>>>> problems to happen.
>>> I observe that for the regular non-quirk acpi_video_register() call,
>>> acpi_video_backlight_quirks() won't be called during register, but it
>>> will get called later. This might have subtle effects later on, don't
>>> you think?
>> Yes, it might, but after dropping ACPI_VIDEO_SKIP_BACKLIGHT it should be OK.
>>
>>> As to the original problem, and your patch in this thread, what do you
>>> think about having another value in acpi_backlight kernel parameter for
>>> it? Having an i915 module parameter to tell acpi to use or not use
>>> quirks seems odd, since the i915 is not really taking over
>>> anything. It's just passing the info on to acpi.
>> I agree, I'm going to send a full revert in a while and we'll think what to
>> do about all that later.
>>
>> Thanks,
>> Rafael
>>
>>
>
diff mbox

Patch

Index: linux-pm/drivers/gpu/drm/i915/i915_dma.c
===================================================================
--- linux-pm.orig/drivers/gpu/drm/i915/i915_dma.c
+++ linux-pm/drivers/gpu/drm/i915/i915_dma.c
@@ -1648,7 +1648,7 @@  int i915_driver_load(struct drm_device *
 	if (INTEL_INFO(dev)->num_pipes) {
 		/* Must be done after probing outputs */
 		intel_opregion_init(dev);
-		acpi_video_register_with_quirks();
+		__acpi_video_register(i915_take_over_backlight);
 	}
 
 	if (IS_GEN5(dev))
Index: linux-pm/drivers/gpu/drm/i915/i915_drv.c
===================================================================
--- linux-pm.orig/drivers/gpu/drm/i915/i915_drv.c
+++ linux-pm/drivers/gpu/drm/i915/i915_drv.c
@@ -132,6 +132,11 @@  int i915_enable_ips __read_mostly = 1;
 module_param_named(enable_ips, i915_enable_ips, int, 0600);
 MODULE_PARM_DESC(enable_ips, "Enable IPS (default: true)");
 
+bool i915_take_over_backlight __read_mostly = false;
+module_param_named(take_over_backlight, i915_take_over_backlight, bool, 0644);
+MODULE_PARM_DESC(take_over_backlight,
+		 "Prevent ACPI backlight from being used (default: false)");
+
 static struct drm_driver driver;
 extern int intel_agp_enabled;
 
Index: linux-pm/drivers/gpu/drm/i915/i915_drv.h
===================================================================
--- linux-pm.orig/drivers/gpu/drm/i915/i915_drv.h
+++ linux-pm/drivers/gpu/drm/i915/i915_drv.h
@@ -1542,6 +1542,7 @@  extern int i915_enable_ppgtt __read_most
 extern unsigned int i915_preliminary_hw_support __read_mostly;
 extern int i915_disable_power_well __read_mostly;
 extern int i915_enable_ips __read_mostly;
+extern bool i915_take_over_backlight __read_mostly;
 
 extern int i915_suspend(struct drm_device *dev, pm_message_t state);
 extern int i915_resume(struct drm_device *dev);
Index: linux-pm/include/acpi/video.h
===================================================================
--- linux-pm.orig/include/acpi/video.h
+++ linux-pm/include/acpi/video.h
@@ -18,20 +18,11 @@  struct acpi_device;
 
 #if (defined CONFIG_ACPI_VIDEO || defined CONFIG_ACPI_VIDEO_MODULE)
 extern int __acpi_video_register(bool backlight_quirks);
-static inline int acpi_video_register(void)
-{
-	return __acpi_video_register(false);
-}
-static inline int acpi_video_register_with_quirks(void)
-{
-	return __acpi_video_register(true);
-}
 extern void acpi_video_unregister(void);
 extern int acpi_video_get_edid(struct acpi_device *device, int type,
 			       int device_id, void **edid);
 #else
-static inline int acpi_video_register(void) { return 0; }
-static inline int acpi_video_register_with_quirks(void) { return 0; }
+static inline int __acpi_video_register(bool backlight_quirks) { return 0; }
 static inline void acpi_video_unregister(void) { return; }
 static inline int acpi_video_get_edid(struct acpi_device *device, int type,
 				      int device_id, void **edid)
@@ -40,4 +31,9 @@  static inline int acpi_video_get_edid(st
 }
 #endif
 
+static inline int acpi_video_register(void)
+{
+	return __acpi_video_register(false);
+}
+
 #endif