[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