diff mbox

drm/i915: Allow minimum brightness upon backlight enable

Message ID 1443742613-24748-1-git-send-email-clinton.a.taylor@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Taylor, Clinton A Oct. 1, 2015, 11:36 p.m. UTC
From: Clint Taylor <clinton.a.taylor@intel.com>

backlight minimum is a valid value so you don't need to set maximum.

Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
---
 drivers/gpu/drm/i915/intel_panel.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Jani Nikula Oct. 2, 2015, 7:50 a.m. UTC | #1
On Fri, 02 Oct 2015, clinton.a.taylor@intel.com wrote:
> From: Clint Taylor <clinton.a.taylor@intel.com>
>
> backlight minimum is a valid value so you don't need to set maximum.
>
> Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_panel.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index 4d28c7b..d509904 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -1069,7 +1069,7 @@ void intel_panel_enable_backlight(struct intel_connector *connector)
>  
>  	WARN_ON(panel->backlight.max == 0);
>  
> -	if (panel->backlight.level <= panel->backlight.min) {
> +	if (panel->backlight.level < panel->backlight.min) {
>  		panel->backlight.level = panel->backlight.max;
>  		if (panel->backlight.device)
>  			panel->backlight.device->props.brightness =

This is policy in action in the kernel. We have this whole if block here
because some, uh, misguided userspace sets brightness to minimum before
switching the backlight off, and assumes enabling backlight cranks up
the brightness as well. (*)

The condition used to be (level == 0), but since the minimum can now
also be non-zero, we check (level <= min). If we changed this to (level
< min), we'd regress the misguided userspaces, especially if min == 0.

See

commit 13f3fbe827d09e3182023c8c54058cbf97aa146e
Author: Jeremiah Mahler <jmmahler@gmail.com>
Date:   Mon Jan 12 11:01:03 2015 -0800

    drm/i915: fix inconsistent brightness after resume

I'd really love to to just nuke the if block completely, but no
regressions and all.


BR,
Jani.



(*) Imagine an amplifier that would set the volume to max if it was
powered on with the volume knob turned to zero...
Chris Wilson Oct. 2, 2015, 9 a.m. UTC | #2
On Fri, Oct 02, 2015 at 10:50:50AM +0300, Jani Nikula wrote:
> On Fri, 02 Oct 2015, clinton.a.taylor@intel.com wrote:
> > From: Clint Taylor <clinton.a.taylor@intel.com>
> >
> > backlight minimum is a valid value so you don't need to set maximum.
> >
> > Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_panel.c |    2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> > index 4d28c7b..d509904 100644
> > --- a/drivers/gpu/drm/i915/intel_panel.c
> > +++ b/drivers/gpu/drm/i915/intel_panel.c
> > @@ -1069,7 +1069,7 @@ void intel_panel_enable_backlight(struct intel_connector *connector)
> >  
> >  	WARN_ON(panel->backlight.max == 0);
> >  
> > -	if (panel->backlight.level <= panel->backlight.min) {
> > +	if (panel->backlight.level < panel->backlight.min) {
> >  		panel->backlight.level = panel->backlight.max;
> >  		if (panel->backlight.device)
> >  			panel->backlight.device->props.brightness =
> 
> This is policy in action in the kernel. We have this whole if block here
> because some, uh, misguided userspace sets brightness to minimum before
> switching the backlight off, and assumes enabling backlight cranks up
> the brightness as well. (*)

If you mean X, no. It has to set the backlight because on some intel
models the backlight is not routed through i915 and so it needs to
explicitly control it. On resume, it sets the previous value. This is
just a broken kernel.
-Chris
Jani Nikula Oct. 20, 2015, 10:32 a.m. UTC | #3
On Fri, 02 Oct 2015, Chris Wilson <chris@chris-wilson.co.uk> wrote:
> On Fri, Oct 02, 2015 at 10:50:50AM +0300, Jani Nikula wrote:
>> On Fri, 02 Oct 2015, clinton.a.taylor@intel.com wrote:
>> > From: Clint Taylor <clinton.a.taylor@intel.com>
>> >
>> > backlight minimum is a valid value so you don't need to set maximum.
>> >
>> > Signed-off-by: Clint Taylor <clinton.a.taylor@intel.com>
>> > ---
>> >  drivers/gpu/drm/i915/intel_panel.c |    2 +-
>> >  1 file changed, 1 insertion(+), 1 deletion(-)
>> >
>> > diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
>> > index 4d28c7b..d509904 100644
>> > --- a/drivers/gpu/drm/i915/intel_panel.c
>> > +++ b/drivers/gpu/drm/i915/intel_panel.c
>> > @@ -1069,7 +1069,7 @@ void intel_panel_enable_backlight(struct intel_connector *connector)
>> >  
>> >  	WARN_ON(panel->backlight.max == 0);
>> >  
>> > -	if (panel->backlight.level <= panel->backlight.min) {
>> > +	if (panel->backlight.level < panel->backlight.min) {
>> >  		panel->backlight.level = panel->backlight.max;
>> >  		if (panel->backlight.device)
>> >  			panel->backlight.device->props.brightness =
>> 
>> This is policy in action in the kernel. We have this whole if block here
>> because some, uh, misguided userspace sets brightness to minimum before
>> switching the backlight off, and assumes enabling backlight cranks up
>> the brightness as well. (*)
>
> If you mean X, no. It has to set the backlight because on some intel
> models the backlight is not routed through i915 and so it needs to
> explicitly control it. On resume, it sets the previous value. This is
> just a broken kernel.

Okay, I guess I'm willing to give this a shot. This may result in
regression reports, but let's see.

However, the meaning of the whole check changes. What Clint now checks
(level below minimum) shouldn't happen, something failed already. Maybe
we should set the level to minimum instead, with debug logging?

BR,
Jani.
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index 4d28c7b..d509904 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -1069,7 +1069,7 @@  void intel_panel_enable_backlight(struct intel_connector *connector)
 
 	WARN_ON(panel->backlight.max == 0);
 
-	if (panel->backlight.level <= panel->backlight.min) {
+	if (panel->backlight.level < panel->backlight.min) {
 		panel->backlight.level = panel->backlight.max;
 		if (panel->backlight.device)
 			panel->backlight.device->props.brightness =