linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Matthias Kaehlcke <mka@chromium.org>
To: Daniel Thompson <daniel.thompson@linaro.org>
Cc: Brian Norris <briannorris@google.com>,
	Pavel Machek <pavel@ucw.cz>,
	Enric Balletbo i Serra <enric.balletbo@collabora.com>,
	Doug Anderson <dianders@google.com>,
	Rob Herring <robh+dt@kernel.org>,
	Jingoo Han <jingoohan1@gmail.com>,
	Richard Purdie <rpurdie@rpsys.net>,
	Jacek Anaszewski <jacek.anaszewski@gmail.com>,
	Guenter Roeck <groeck@google.com>,
	Lee Jones <lee.jones@linaro.org>,
	Alexandru Stan <amstan@google.com>,
	linux-leds@vger.kernel.org,
	devicetree <devicetree@vger.kernel.org>,
	Linux Kernel <linux-kernel@vger.kernel.org>,
	kernel@collabora.com
Subject: Re: [PATCH v3 3/4] backlight: pwm_bl: compute brightness of LED linearly to human eye.
Date: Wed, 12 Jun 2019 14:59:00 -0700	[thread overview]
Message-ID: <20190612215900.GL137143@google.com> (raw)
In-Reply-To: <20190612194757.fxetkhah6detiukm@holly.lan>

On Wed, Jun 12, 2019 at 08:47:57PM +0100, Daniel Thompson wrote:
> On Wed, Jun 12, 2019 at 12:26:42PM -0700, Matthias Kaehlcke wrote:
> > Hi Daniel,
> > 
> > On Wed, Jun 12, 2019 at 12:03:25PM +0100, Daniel Thompson wrote:
> > > On Tue, Jun 11, 2019 at 03:30:19PM -0700, Matthias Kaehlcke wrote:
> > > > On Tue, Jun 11, 2019 at 09:55:30AM -0700, Brian Norris wrote:
> > > > > On Tue, Jun 11, 2019 at 3:49 AM Daniel Thompson
> > > > > <daniel.thompson@linaro.org> wrote:
> > > > > > This is a long standing flaw in the backlight interfaces. AFAIK generic
> > > > > > userspaces end up with a (flawed) heuristic.
> > > > > 
> > > > > Bingo! Would be nice if we could start to fix this long-standing flaw.
> > > > 
> > > > Agreed!
> > > > 
> > > > How could a fix look like, a sysfs attribute? Would a boolean value
> > > > like 'logarithmic_scale' or 'linear_scale' be enough or could more
> > > > granularity be needed?
> > > 
> > > Certainly "linear" (this device will work more or less correctly if the
> > > userspace applies perceptual curves). Not sure about logarithmic since
> > > what is actually useful is something that is "perceptually linear"
> > > (logarithmic is merely a way to approximate that).
> > > 
> > > I do wonder about a compatible string like most-detailed to
> > > least-detailed description. This for a PWM with the auto-generated
> > > tables we'd see something like:
> > > 
> > > cie-1991,perceptual,non-linear
> > > 
> > > For something that is non-linear but we are not sure what its tables are
> > > we can offer just "non-linear".
> > 
> > Thanks for the feedback!
> > 
> > It seems clear that we want a string for the added flexibility. I can
> > work on a patch with the compatible string like description you
> > suggested and we can discuss in the review if we want to go with that
> > or prefer something else.
> 
> Great, other important thing if we did decide to go this route is there
> must be some devices with multiple strings on day 1 (such as the cie-1991
> example above).

Ok, I can add this to the PWM backlight driver (obviously with the
actual handling of the new attribute in the core).

> Whatever we say the ABI is, if we end up with established userspace
> components that strcmp("linear", ...) and there are no early counter
> examples then we could get stuck without the option to add more
> precise tokens as we learn more.

Indeed, we need userspace to understand this isn't necessarily a
'simple' string.

> > > > The new attribute could be optional (it only exists if explicitly
> > > > specified by the driver) or be set to a default based on a heuristic
> > > > if not specified and be 'fixed' on a case by case basis. The latter
> > > > might violate "don't break userspace" though, so I'm not sure it's a
> > > > good idea.
> > > 
> > > I think we should avoid any heuristic! There are several drivers and we
> > > may not be able to work through all of them and make the correct
> > > decision.
> > 
> > Agreed
> > 
> > > Instead one valid value for the sysfs should be "unknown" and this be
> > > the default for drivers we have not analysed (this also makes it easy to
> > > introduce change here).
> > 
> > An "unknown" value sounds good, it allows userspace to just do what it
> > did/would hace done before this attribute existed.
> > 
> > > We should only set the property to something else for drivers that have
> > > been reviewed.
> > > 
> > > There could be a special case for pwm_bl.c in that I'm prepared to
> > > assume that the hardware components downstream of the PWM have a
> > > roughly linear response and that if the user provided tables that their
> > > function is to provide a perceptually comfortable response.
> > 
> > Unfortunately this isn't universally true :(
> > 
> > At least several Chrome OS devices use a linear brightness scale and
> > userspace does the transformation in the animated slider. A quick
> > 'git grep -A10 brightness-levels arch' suggests that there are
> > multiple other devices/platforms using a linear scale.
> 
> Good point.
> 
> Any clue whether the tables are "stupid" (e.g. offer a poor user experience
> with notchy feeling backlight response) or whether they work because
> some of the downstream componentry has a non-linear response?

Sorry, I don't know details about any of these devices, except some of
the Chrome OS ones.

> > We could treat devices with a predefined brightness table as
> > "unknown", unless there is a (new optional) DT property that indicates
> > the type of the scale.
> 
> If we have an "unknown" and we don't know then I guess I just claimed
> that's what we have to do for cases we don't understand.
> 
> For pwm_bl it would be easy to study the table and calculate how far from the
> line the centre point is... although that bringing back heuristics into
> the picture, albeit more useful ones.

True, distinguishing between 'linear' and 'non-linear' shouldn't be a
big deal.

> As I said... I'd be OK for the pwm_bl to take a few liberties because it
> is so different from the fully fledged LED driver drivers but we don't
> need to go crazy ;-)

  reply	other threads:[~2019-06-13 17:13 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-08 11:30 [PATCH v3 0/4] backlight: pwm_bl: support linear interpolation and brightness to human eye Enric Balletbo i Serra
2018-02-08 11:30 ` [PATCH v3 1/4] backlight: pwm_bl: linear interpolation between brightness-levels Enric Balletbo i Serra
2018-04-06 15:46   ` Daniel Thompson
2018-02-08 11:30 ` [PATCH v3 2/4] dt-bindings: pwm-backlight: add a num-interpolation-steps property Enric Balletbo i Serra
2018-02-18 22:49   ` Rob Herring
2018-02-08 11:30 ` [PATCH v3 3/4] backlight: pwm_bl: compute brightness of LED linearly to human eye Enric Balletbo i Serra
2018-04-06 15:51   ` Daniel Thompson
2019-06-07 22:19   ` Matthias Kaehlcke
2019-06-08 21:02     ` Pavel Machek
2019-06-10 10:00       ` Enric Balletbo i Serra
2019-06-10 20:39         ` Matthias Kaehlcke
2019-06-10 21:02           ` Enric Balletbo i Serra
2019-06-10 21:54             ` Matthias Kaehlcke
2019-06-10 20:52       ` Matthias Kaehlcke
2019-06-11 10:49         ` Daniel Thompson
2019-06-11 16:55           ` Brian Norris
2019-06-11 22:30             ` Matthias Kaehlcke
2019-06-12  9:54               ` Pavel Machek
2019-06-12 11:03               ` Daniel Thompson
2019-06-12 19:26                 ` Matthias Kaehlcke
2019-06-12 19:47                   ` Daniel Thompson
2019-06-12 21:59                     ` Matthias Kaehlcke [this message]
2019-06-17 13:01                   ` Pavel Machek
2019-06-17 20:03                     ` Matthias Kaehlcke
2018-02-08 11:30 ` [PATCH v3 4/4] dt-bindings: pwm-backlight: move brightness-levels to optional Enric Balletbo i Serra
2018-03-19 16:04 ` [PATCH v3 0/4] backlight: pwm_bl: support linear interpolation and brightness to human eye Enric Balletbo Serra
2018-03-20 11:22   ` Daniel Thompson
2018-03-20 12:13     ` Enric Balletbo Serra
2018-04-06 15:54       ` Daniel Thompson
2018-04-09  8:17 ` Lee Jones

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190612215900.GL137143@google.com \
    --to=mka@chromium.org \
    --cc=amstan@google.com \
    --cc=briannorris@google.com \
    --cc=daniel.thompson@linaro.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dianders@google.com \
    --cc=enric.balletbo@collabora.com \
    --cc=groeck@google.com \
    --cc=jacek.anaszewski@gmail.com \
    --cc=jingoohan1@gmail.com \
    --cc=kernel@collabora.com \
    --cc=lee.jones@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=robh+dt@kernel.org \
    --cc=rpurdie@rpsys.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).