[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:28:09 PST 2015


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.

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/2c4a60a9/attachment-0001.html>


More information about the Intel-gfx mailing list