linux-leds.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jacek Anaszewski <jacek.anaszewski@gmail.com>
To: "Vesa Jääskeläinen" <dachaac@gmail.com>, linux-leds@vger.kernel.org
Cc: devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
	pavel@ucw.cz, robh@kernel.org,
	Baolin Wang <baolin.wang@linaro.org>,
	Daniel Mack <daniel@zonque.org>, Dan Murphy <dmurphy@ti.com>,
	Linus Walleij <linus.walleij@linaro.org>,
	Oleh Kravchenko <oleg@kaa.org.ua>,
	Sakari Ailus <sakari.ailus@linux.intel.com>,
	Simon Shields <simon@lineageos.org>,
	Xiaotong Lu <xiaotong.lu@spreadtrum.com>
Subject: Re: [PATCH 04/24] dt-bindings: leds: Add function and color properties
Date: Mon, 12 Nov 2018 17:02:39 +0100	[thread overview]
Message-ID: <d1ef315d-1216-7e63-f24f-5c6fee8793be@gmail.com> (raw)
In-Reply-To: <12fb34ec-7175-1ac4-a96e-e1d5d424c9eb@gmail.com>

Hi Vesa,

On 11/10/2018 06:19 PM, Vesa Jääskeläinen wrote:
> Hi Jacek,
> 
> On 09/11/2018 22.42, Jacek Anaszewski wrote:
>> Hi Vesa,
>>
>> On 11/09/2018 09:32 AM, Vesa Jääskeläinen wrote:
>>> On 07/11/2018 0.07, Jacek Anaszewski wrote:
>>>> Introduce dedicated properties for conveying information about
>>>> LED function and color. Mark old "label" property as deprecated.
>>>>
>>>> Signed-off-by: Jacek Anaszewski <jacek.anaszewski@gmail.com>
>>>> Cc: Baolin Wang <baolin.wang@linaro.org>
>>>> Cc: Daniel Mack <daniel@zonque.org>
>>>> Cc: Dan Murphy <dmurphy@ti.com>
>>>> Cc: Linus Walleij <linus.walleij@linaro.org>
>>>> Cc: Oleh Kravchenko <oleg@kaa.org.ua>
>>>> Cc: Sakari Ailus <sakari.ailus@linux.intel.com>
>>>> Cc: Simon Shields <simon@lineageos.org>
>>>> Cc: Xiaotong Lu <xiaotong.lu@spreadtrum.com>
>>>> ---
>>>>    Documentation/devicetree/bindings/leds/common.txt | 52
>>>> +++++++++++++++++++----
>>>>    1 file changed, 44 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/Documentation/devicetree/bindings/leds/common.txt
>>>> b/Documentation/devicetree/bindings/leds/common.txt
>>>> index aa13998..3efc826 100644
>>>> --- a/Documentation/devicetree/bindings/leds/common.txt
>>>> +++ b/Documentation/devicetree/bindings/leds/common.txt
>>>> @@ -10,14 +10,20 @@ can influence the way of the LED device
>>>> initialization, the LED components
>>>>    have to be tightly coupled with the LED device binding. They are
>>>> represented
>>>>    by child nodes of the parent LED device binding.
>>>>    +
>>>>    Optional properties for child nodes:
>>>>    - led-sources : List of device current outputs the LED is connected
>>>> to. The
>>>>            outputs are identified by the numbers that must be defined
>>>>            in the LED device binding documentation.
>>>> +- function: LED functon. Use one of the LED_FUNCTION_* prefixed
>>>> definitions
>>>> +        from the header include/dt-bindings/leds/functions.h.
>>>> +        If there is no matching LED_FUNCTION available, add a new one.
>>>> +- color : Color of the LED.
>>>
>>> We have had for years out-of-tree patch for multi color gpio led driver
>>> which extends this concept with multiple colors. Then in sysfs there has
>>> been possibility to control the color and otherwise use blinking or
>>> other features.
>>>
>>> Our need is multi color status led of the device which includes
>>> different kind of blinkings and colors on different situations.
>>>
>>> Current in-tree gpio led driver just wasn't atomic enough and a bit
>>> clumsy interface for handling this.
>>>
>>> Now that this is being looked at could we come up with solution that we
>>> could define multiple colors for one led in device tree and then we
>>> could work on getting the driver upstreamed?
>>>
>>> What we did was generally:
>>>
>>> leds-multi {
>>>      compatible = "gpio-multi-leds";
>>>
>>>      status {
>>>          gpios = <...>;
>>>          linux,default-trigger = "none";
>>>          deafult-state = "keep";
>>>
>>>          color-red {
>>>              pin-mask = <0x01>;
>>>          };
>>>
>>>          color-green {
>>>              pin-mask = <0x02>;
>>>          };
>>>
>>>          color-orange {
>>>              pin-mask = <0x03>;
>>>          };
>>>      };
>>> };
>>>
>>
>> Device Tree node implementation doesn't actually say too much
>> about the sysfs interface you came up with, which is most vital
>> in this case.
> 
> In our case it is very simple. There is "color" named sysfs node under
> gpio instance.
> 
> It creates own led instance for each children in this case it is named
> as "status" and then uses properties under it to define operation.
> 
> Currently we do have fixed list of color names in driver to require
> "standardized" names but that could be easily changed to be dynamic.
> 
> Driver registers all GPIOs defined in "gpios" under the instance.
> 
> So one can say:
> 
> echo "orange" > color
> 
> This setting goes to the driver, it figures out logical name "orange"
> and the configure all listed GPIO's to its "pin-mask" state. Polarity of
> the GPIO's is configured in GPIO definition so this is more or less turn
> this particular pin to activate state.
> 
> So in this case it changes led's color to orange and still lets one to
> use standard led triggers. Eg. set periodic blinking or so.
> 
> If one cat's "color" it lists all available colors for user and shows
> which one is active.
> 
> When brightness is configured as zero the all registered go to off state
> and when non-zero then it goes to state what ever is configured with
> "color" sysfs entry.
> 
>> Support for RGB LEDs, or other variations of LED synchronization
>> have been approached several times, but without satisfying result
>> so far.
>>
>> Generally the problem boils down to the issue of how triggers
>> should handle multiple synchronized LED class devices in a backwards
>> compatible way with monochrome LEDs.
>>
>> At some point the HSV [0] approach was proposed, but there was a problem
>> with getting uniform colors across devices. Especially white.
>> Certainly a calibration mechanism would be required.
>>
>> [0] https://lkml.org/lkml/2017/8/30/423
> 
> We do not usually use PWM controlled leds so our calibration has been HW
> engineer tuning the resistors for the leds to get acceptable color for
> different colors variations.
> 
> If one wants to have fixed colors for such device then one could use
> this similar method to define them or/and free form interface to enter
> RGB values there. Thou with PWM RGB leds you probably want to have more
> animation there which probably would require some additional support code.
> 
> One way to do atomic PWM RGB color change with sysfs could be:
> 
> echo "21 223 242" > color
> 
> or
> 
> echo "21 223 242" > rgb
> 
> or:
> 
> echo "r:21 g:232 b:242" > color (or something similar)
> 
> and if there is know registered name then just write it to "color" which
> would pick registered color rgb values to led instances rgb value.
> 
> Now for PWM RGB led one could use "brightness" and "rgb" value to
> calculate actual color with some color space formula (like hsv in [0]).
> 
> Doing white with RGB LED is a bit hard so usually you want to get RGBW
> LED (or RGBAW LED) if "real" white is something that is needed. This
> could then be "rgbw" entry and "color" to pick from fixed set.
> 
> These presets in device tree for "color" could be considered one way of
> doing calibration for particular hardware.
> 
> So in device tree for RGB PWM led it could be like:
> 
> color-orange {
>     rgb = <249 197 9>
> }
> 
> color-warm-white {
>     rgb = <255 253 249>
> }
> 
> How would that sound like?

Thank you for the description of your approach.

Predefined DT color definitions make an interesting option. Nonetheless,
your design assumes that for RGB LEDs max_brightness would have to be
always 1.

While it would solve the issue, it wouldn't allow to benefit from
the whole potential of RGB LEDs - think of having adjustable "color
brightness" (like in HSV color model).

How abut allowing for providing an array of color intensity/brightness
levels per each color? In the simplest case there could be a single
level per color, but it should be possible to provide up to 255 levels.

-- 
Best regards,
Jacek Anaszewski

  reply	other threads:[~2018-11-12 16:02 UTC|newest]

Thread overview: 105+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-06 22:07 [PATCH 00/24] Add generic support for composing LED class device name Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 01/24] leds: class: Improve LED and LED flash class registration API Jacek Anaszewski
2018-11-07  6:55   ` Baolin Wang
2018-11-07 20:51     ` Jacek Anaszewski
2018-11-08 17:50   ` Dan Murphy
2018-11-08 20:47     ` Jacek Anaszewski
2018-11-11 11:31   ` Pavel Machek
2018-11-06 22:07 ` [PATCH 02/24] leds: core: Add support for composing LED class device names Jacek Anaszewski
2018-11-07  7:20   ` Baolin Wang
2018-11-08 20:47     ` Jacek Anaszewski
2018-11-09  2:35       ` Baolin Wang
2018-11-08 18:06   ` Dan Murphy
2018-11-08 20:48     ` Jacek Anaszewski
2018-11-11 12:02   ` Pavel Machek
2018-11-11 20:02     ` Jacek Anaszewski
2018-11-11 20:16       ` Pavel Machek
2018-11-11 21:14         ` Jacek Anaszewski
2018-11-12  0:01           ` Vesa Jääskeläinen
2018-11-12 15:59             ` Jacek Anaszewski
2018-11-12 21:25             ` Linus Walleij
2018-11-12 22:11               ` LEDs on USB keyboards was " Pavel Machek
2018-11-12 10:35           ` Pavel Machek
2018-11-12 16:01             ` Jacek Anaszewski
2018-11-12 19:05               ` Pavel Machek
2018-11-12 20:11                 ` Jacek Anaszewski
2018-11-12 22:06                   ` Pavel Machek
2018-11-13 20:57                     ` Jacek Anaszewski
2018-11-13 21:38                     ` Geert Uytterhoeven
2018-11-13 21:50                       ` Pavel Machek
2018-11-12 21:23     ` Linus Walleij
2018-11-13 19:55       ` Jacek Anaszewski
2018-11-15  9:10         ` Linus Walleij
2018-11-06 22:07 ` [PATCH 03/24] leds: dt-bindings: Add LED_FUNCTION definitions Jacek Anaszewski
2018-11-07  8:36   ` Vokáč Michal
2018-11-07 19:28     ` Jacek Anaszewski
2018-11-08 15:13   ` Rob Herring
2018-11-08 21:03     ` Jacek Anaszewski
2018-11-11 11:31   ` Pavel Machek
2018-11-11 20:02     ` Jacek Anaszewski
2018-11-11 20:20       ` Pavel Machek
2018-11-11 21:16         ` Jacek Anaszewski
2018-11-12  0:25   ` Vesa Jääskeläinen
2018-11-12 16:01     ` Jacek Anaszewski
2018-11-15  9:16   ` Linus Walleij
2018-11-06 22:07 ` [PATCH 04/24] dt-bindings: leds: Add function and color properties Jacek Anaszewski
2018-11-08 18:00   ` Dan Murphy
2018-11-08 20:47     ` Jacek Anaszewski
2018-11-08 21:08       ` Dan Murphy
2018-11-09 20:00         ` Jacek Anaszewski
2018-11-09  8:32   ` Vesa Jääskeläinen
2018-11-09 20:42     ` Jacek Anaszewski
2018-11-10 17:19       ` Vesa Jääskeläinen
2018-11-12 16:02         ` Jacek Anaszewski [this message]
2018-11-13  7:10           ` Vesa Jääskeläinen
2018-11-13 19:02             ` Jacek Anaszewski
     [not found]   ` <5bea0eb8.1c69fb81.6b921.80e6@mx.google.com>
2018-11-13 20:57     ` Jacek Anaszewski
2018-11-27 20:37       ` Jacek Anaszewski
2018-11-30 14:38         ` Rob Herring
2018-11-30 21:08           ` Pavel Machek
2018-11-30 22:19             ` Rob Herring
2018-12-01 21:17               ` Jacek Anaszewski
2018-12-11 17:27                 ` Rob Herring
2018-12-11 22:44                   ` Pavel Machek
2018-12-21 10:12                   ` Linus Walleij
2018-12-12  9:59           ` Pavel Machek
2018-12-12 13:56             ` Rob Herring
2018-12-12 18:32               ` Pavel Machek
2018-12-23 20:11                 ` Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 05/24] dt-bindings: sc27xx-blt: " Jacek Anaszewski
2018-11-11 14:29   ` Pavel Machek
2018-11-11 20:03     ` Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 06/24] leds: sc27xx-blt: Use led_compose_name() Jacek Anaszewski
2018-11-07  7:22   ` Baolin Wang
2018-11-11 14:31   ` Pavel Machek
2018-11-06 22:07 ` [PATCH 07/24] dt-bindings: lt3593: Add function and color properties Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 08/24] leds: lt3593: Use led_compose_name() Jacek Anaszewski
2018-11-07 19:37   ` Daniel Mack
2018-11-07 19:49     ` Jacek Anaszewski
2018-11-08  8:33       ` Daniel Mack
2018-11-06 22:07 ` [PATCH 09/24] dt-bindings: lp8860: Add function and color properties Jacek Anaszewski
2018-11-08 18:01   ` Dan Murphy
2018-11-06 22:07 ` [PATCH 10/24] leds: lp8860: Use led_compose_name() Jacek Anaszewski
2018-11-08 18:16   ` Dan Murphy
2018-11-08 20:48     ` Jacek Anaszewski
2018-11-12 14:05       ` Dan Murphy
2018-11-06 22:07 ` [PATCH 11/24] dt-bindings: lm3692x: Add function and color properties Jacek Anaszewski
2018-11-08 18:12   ` Dan Murphy
2018-11-06 22:07 ` [PATCH 12/24] leds: lm3692x: Use led_compose_name() Jacek Anaszewski
2018-11-08 18:14   ` Dan Murphy
2018-11-08 20:48     ` Jacek Anaszewski
2018-11-08 21:11       ` Dan Murphy
2018-11-11 14:31   ` Pavel Machek
2018-11-06 22:07 ` [PATCH 13/24] dt-bindings: lm36010: Add function and color properties Jacek Anaszewski
2018-11-08 18:15   ` Dan Murphy
2018-11-06 22:07 ` [PATCH 14/24] leds: lm3601x: Use led_compose_name() Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 15/24] dt-bindings: cr0014114: Add function and color properties Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 16/24] leds: cr0014114: Use led_compose_name() Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 17/24] dt-bindings: aat1290: Add function and color properties Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 18/24] leds: aat1290: Use led_compose_name() Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 19/24] dt-bindings: as3645a: Add function and color properties Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 20/24] leds: as3645a: Use led_compose_name() Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 21/24] dt-bindings: leds-gpio: Add function and color properties Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 22/24] leds: gpio: Use led_compose_name() Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 23/24] dt-bindings: an30259a: Add function and color properties Jacek Anaszewski
2018-11-06 22:07 ` [PATCH 24/24] leds: an30259a: Use led_compose_name() Jacek Anaszewski

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=d1ef315d-1216-7e63-f24f-5c6fee8793be@gmail.com \
    --to=jacek.anaszewski@gmail.com \
    --cc=baolin.wang@linaro.org \
    --cc=dachaac@gmail.com \
    --cc=daniel@zonque.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dmurphy@ti.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-leds@vger.kernel.org \
    --cc=oleg@kaa.org.ua \
    --cc=pavel@ucw.cz \
    --cc=robh@kernel.org \
    --cc=sakari.ailus@linux.intel.com \
    --cc=simon@lineageos.org \
    --cc=xiaotong.lu@spreadtrum.com \
    /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).