[Intel-gfx] [PATCH v6] drm/i915: respect the VBT minimum backlight brightness again

Shih-Yuan Lee (FourDollars) fourdollars at gmail.com
Thu Nov 12 00:57:11 PST 2015


You may need to put "drm.debug=0xe" into the kernel parameter and reboot
the system to collect some system log.
Did you check the brightness value after you change it?

On Thu, Nov 12, 2015 at 4:40 PM, Stéphane ANCELOT <sancelot at free.fr> wrote:

> On 12/11/2015 09:28, Shih-Yuan Lee (FourDollars) wrote:
>
> I think the first step is to identify which backlight interface is able to
> actually change the brightness.
> Usually there are two backlight interfaces under /sys/class/backlight/,
> i.e. /sys/class/backlight/acpi_video0 and
> /sys/class/backlight/intel_backlight.
> However you may see other different backlight interfaces under
> /sys/class/backlight/. It depends on what hardware you are using.
> Executing `cat max_brightness` under those folders can see the max
> brightness and then you can execute `echo $(($(cat max_brightness)/2)) |
> sudo tee brightness` to adjust it to about 50% brightness.
>
> only /sys/class/backlight/intel_backlight is present.
> max_brightness is 937
>
> these commands have no effect on display brightness:
> echo 0 >brightness
> echo 468 >brightness
> echo 937 >brightness
>
> Regards,
> Steph
>
>
>
> On Thu, Nov 12, 2015 at 4:08 PM, Stéphane ANCELOT <sancelot at free.fr>
> wrote:
>
>> Hi,
>> I have seen you were working on brightness. Right, but this is useful
>> only if many worlwide users would be able to activate it.
>> I have never been able to make it working on my intel systemes (core i5 -
>> 4300u , core i3 ...)
>> Very difficult to check where the problem is coming from, altough you
>> have either an intel_backlight or acpi_backlight folder in the sys directory
>> Regarding many many posts on the web, this sounds tricky and difficult to
>> know why it has not worked, or simply the documentation is lacking ....
>>
>> Regards,
>> S.Ancelot
>>
>>
>> On 12/11/2015 06:43, Shih-Yuan Lee (FourDollars) wrote:
>>
>>> There was a wonderful period after
>>>
>>> commit 6dda730e55f412a6dfb181cae6784822ba463847
>>> Author: Jani Nikula <jani.nikula at intel.com>
>>> Date:   Tue Jun 24 18:27:40 2014 +0300
>>>
>>>      drm/i915: respect the VBT minimum backlight brightness
>>>
>>> The backlight class 0 brightness means the PWM min and it does not turn
>>> off the backlight. After kernel 3.18, the backlight class 0 brightness
>>> is used to turn off the backlight and the PWM min is missing.
>>>
>>> Because of
>>>
>>> commit e6755fb78e8f20ecadf2a4080084121336624ad9
>>> Author: Jani Nikula <jani.nikula at intel.com>
>>> Date:   Tue Aug 12 17:11:42 2014 +0300
>>>
>>>      drm/i915: switch off backlight for backlight class 0 brightness
>>>
>>> Use "VBT backlight PWM modulation frequency 200 Hz, active high, min
>>> brightness 10, level 255" as an example. It means the VBT min is 10
>>> out of [0..255] and the PWM max is 937 from other place so the
>>> corresponding PWM min should be 37 (10 * 937 / 255).
>>>
>>> When we set backlight class 0 brightness, the backlight is turned off.
>>> Althought the PWM value is 37 when the backlight is off but it is
>>> useless. When we set set backlight class 1 brightness, the backlight is
>>> on but the PWM value is 38 and it doesn't match the corresponding PWM
>>> min of the VBT minimum backlight.
>>>
>>> And it has another minor issue that there are some backlight class
>>> brightness values are mapped to the same PWM value because the backlight
>>> class brightness range is larger than the valid PWM brightness range.
>>>
>>> The backlight class brightness range [0..937]
>>> The valid PWM brightness range [37..937]
>>>
>>> This commit makes that backlight class 1 brightness means the PWM min
>>> and backlight class max_brightness means the PWM max, and the ranges
>>> become
>>>
>>> The backlight class brightness range [0..901]
>>> The valid PWM brightness range [36..937]
>>>
>>> That's no backlight class brightness value mapped to the same PWM value.
>>>
>>> Signed-off-by: Shih-Yuan Lee (FourDollars) <sylee at canonical.com>
>>> ---
>>>   drivers/gpu/drm/i915/intel_panel.c | 26 ++++++++++++++++++--------
>>>   1 file changed, 18 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/intel_panel.c
>>> b/drivers/gpu/drm/i915/intel_panel.c
>>> index b05c6d9..8efa199 100644
>>> --- a/drivers/gpu/drm/i915/intel_panel.c
>>> +++ b/drivers/gpu/drm/i915/intel_panel.c
>>> @@ -1194,10 +1194,9 @@ static int intel_backlight_device_register(struct
>>> intel_connector *connector)
>>>         props.type = BACKLIGHT_RAW;
>>>         /*
>>> -        * Note: Everything should work even if the backlight device max
>>> -        * presented to the userspace is arbitrarily chosen.
>>> +        * Expose the whole valid PWM brightness range to the backlight
>>> class.
>>>          */
>>> -       props.max_brightness = panel->backlight.max;
>>> +       props.max_brightness = panel->backlight.max -
>>> panel->backlight.min;
>>>         props.brightness = scale_hw_to_user(connector,
>>>                                             panel->backlight.level,
>>>                                             props.max_brightness);
>>> @@ -1400,7 +1399,8 @@ static u32 get_backlight_min_vbt(struct
>>> intel_connector *connector)
>>>         struct drm_device *dev = connector->base.dev;
>>>         struct drm_i915_private *dev_priv = dev->dev_private;
>>>         struct intel_panel *panel = &connector->panel;
>>> -       int min;
>>> +       int vbt_min;
>>> +       u32 pwm_min;
>>>         WARN_ON(panel->backlight.max == 0);
>>>   @@ -1411,14 +1411,24 @@ static u32 get_backlight_min_vbt(struct
>>> intel_connector *connector)
>>>          * against this by letting the minimum be at most (arbitrarily
>>> chosen)
>>>          * 25% of the max.
>>>          */
>>> -       min = clamp_t(int, dev_priv->vbt.backlight.min_brightness, 0,
>>> 64);
>>> -       if (min != dev_priv->vbt.backlight.min_brightness) {
>>> +       vbt_min = clamp_t(int, dev_priv->vbt.backlight.min_brightness,
>>> 0, 64);
>>> +       if (vbt_min != dev_priv->vbt.backlight.min_brightness) {
>>>                 DRM_DEBUG_KMS("clamping VBT min backlight %d/255 to
>>> %d/255\n",
>>> -                             dev_priv->vbt.backlight.min_brightness,
>>> min);
>>> +                             dev_priv->vbt.backlight.min_brightness,
>>> vbt_min);
>>>         }
>>>         /* vbt value is a coefficient in range [0..255] */
>>> -       return scale(min, 0, 255, 0, panel->backlight.max);
>>> +       pwm_min = scale(vbt_min, 0, 255, 0, panel->backlight.max);
>>> +
>>> +       /*
>>> +        * Because backlight class brightness 0 is used to turn off the
>>> backlight, we
>>> +        * need to step down a little bit here to make backlight class
>>> brightness 1
>>> +        * match the real PWM min.
>>> +        */
>>> +       if (pwm_min > 0)
>>> +               return pwm_min - 1;
>>> +       else
>>> +               return 0;
>>>   }
>>>     static int lpt_setup_backlight(struct intel_connector *connector,
>>> enum pipe unused)
>>>
>>
>> _______________________________________________
>> Intel-gfx mailing list
>> Intel-gfx at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/intel-gfx/attachments/20151112/319207c5/attachment.html>


More information about the Intel-gfx mailing list