diff mbox series

[v6,2/3] dt-bindings: leds: Add multicolor PWM LED bindings

Message ID 20220208191236.660172-2-sven@svenschwermer.de
State Superseded
Headers show
Series [v6,1/3] dt-bindings: leds: Optional multi-led unit address | expand

Commit Message

Sven Schwermer Feb. 8, 2022, 7:12 p.m. UTC
From: Sven Schwermer <sven.schwermer@disruptive-technologies.com>

This allows to group multiple PWM-connected monochrome LEDs into
multicolor LEDs, e.g. RGB LEDs.

Signed-off-by: Sven Schwermer <sven.schwermer@disruptive-technologies.com>
---

Notes:
    Changes in v6:
    * Fix device tree binding schema
    
    Changes in v5:
    * (no changes)
    
    Changes in v4:
    * (no changes)
    
    Changes in v3:
    * Remove multi-led unit name

 .../bindings/leds/leds-pwm-multicolor.yaml    | 69 +++++++++++++++++++
 1 file changed, 69 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml

Comments

Alexander Dahl Feb. 9, 2022, 9:17 a.m. UTC | #1
Hello Sven,

Am Tue, Feb 08, 2022 at 08:12:35PM +0100 schrieb sven@svenschwermer.de:
> From: Sven Schwermer <sven.schwermer@disruptive-technologies.com>
> 
> This allows to group multiple PWM-connected monochrome LEDs into
> multicolor LEDs, e.g. RGB LEDs.
> 
> Signed-off-by: Sven Schwermer <sven.schwermer@disruptive-technologies.com>
> ---
> 
> Notes:
>     Changes in v6:
>     * Fix device tree binding schema
>     
>     Changes in v5:
>     * (no changes)
>     
>     Changes in v4:
>     * (no changes)
>     
>     Changes in v3:
>     * Remove multi-led unit name
> 
>  .../bindings/leds/leds-pwm-multicolor.yaml    | 69 +++++++++++++++++++
>  1 file changed, 69 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml
> 
> diff --git a/Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml b/Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml
> new file mode 100644
> index 000000000000..f7ce29c8ae63
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml
> @@ -0,0 +1,69 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/leds/leds-pwm-multicolor.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Multi-color LEDs connected to PWM
> +
> +maintainers:
> +  - Sven Schwermer <sven.schwermer@disruptive-technologies.com>
> +
> +description: |
> +  This driver combines several monochrome PWM LEDs into one multi-color
> +  LED using the multicolor LED class.
> +
> +properties:
> +  compatible:
> +    const: pwm-leds-multicolor
> +  multi-led:
> +    type: object
> +    patternProperties:
> +      "^led-[0-9a-z]+$":
> +        type: object
> +        $ref: common.yaml#
> +        properties:
> +          pwms:
> +            maxItems: 1
> +          pwm-names: true
> +          color: true
> +        required:
> +          - pwms
> +          - color
> +        additionalProperties: false
> +required:
> +  - compatible
> +allOf:
> +  - $ref: leds-class-multicolor.yaml#
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/leds/common.h>
> +
> +    rgb-led {

I think this should be 'led-controller'. See
Documentation/devicetree/bindings/leds/common.yaml for reference.

> +        compatible = "pwm-leds-multicolor";
> +
> +        multi-led {
> +          color = <LED_COLOR_ID_RGB>;
> +          function = LED_FUNCTION_INDICATOR;
> +          max-brightness = <65535>;
> +
> +          led-red {
> +              pwms = <&pwm1 0 1000000>;
> +              color = <LED_COLOR_ID_RED>;
> +          };
> +
> +          led-green {
> +              pwms = <&pwm2 0 1000000>;
> +              color = <LED_COLOR_ID_GREEN>;
> +          };
> +
> +          led-blue {
> +              pwms = <&pwm3 0 1000000>;
> +              color = <LED_COLOR_ID_BLUE>;
> +          };

Not sure if those node names should be more generic like led-0, led-1
etc.?  At least the color information is redundant here.  This would
make it more similar to bindings of other LED drivers.

And how is it supposed to be named if you have multiple
"multi-led"s, e.g. one on three PWM channels, and another one on three
different PWM channels?

Greets
Alex

> +        };
> +    };
> +
> +...
> -- 
> 2.35.1
>
Rob Herring Feb. 9, 2022, 6:44 p.m. UTC | #2
On Tue, Feb 08, 2022 at 08:12:35PM +0100, sven@svenschwermer.de wrote:
> From: Sven Schwermer <sven.schwermer@disruptive-technologies.com>
> 
> This allows to group multiple PWM-connected monochrome LEDs into
> multicolor LEDs, e.g. RGB LEDs.
> 
> Signed-off-by: Sven Schwermer <sven.schwermer@disruptive-technologies.com>
> ---
> 
> Notes:
>     Changes in v6:
>     * Fix device tree binding schema
>     
>     Changes in v5:
>     * (no changes)
>     
>     Changes in v4:
>     * (no changes)
>     
>     Changes in v3:
>     * Remove multi-led unit name
> 
>  .../bindings/leds/leds-pwm-multicolor.yaml    | 69 +++++++++++++++++++
>  1 file changed, 69 insertions(+)
>  create mode 100644 Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml
> 
> diff --git a/Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml b/Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml
> new file mode 100644
> index 000000000000..f7ce29c8ae63
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml
> @@ -0,0 +1,69 @@
> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/leds/leds-pwm-multicolor.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Multi-color LEDs connected to PWM
> +
> +maintainers:
> +  - Sven Schwermer <sven.schwermer@disruptive-technologies.com>
> +
> +description: |
> +  This driver combines several monochrome PWM LEDs into one multi-color
> +  LED using the multicolor LED class.
> +
> +properties:
> +  compatible:
> +    const: pwm-leds-multicolor

blank line

> +  multi-led:
> +    type: object

blank line

> +    patternProperties:
> +      "^led-[0-9a-z]+$":
> +        type: object
> +        $ref: common.yaml#

blank line

> +        properties:
> +          pwms:
> +            maxItems: 1

blank line and so on. (There not a hard rule, but roughly it's 
blank lines between DT property sub-schemas, top-level keywords, and 
properties/patternProperties/required.)

> +          pwm-names: true
> +          color: true
> +        required:
> +          - pwms
> +          - color

> +        additionalProperties: false

While the top level goes at the end, I find it is easier to read putting 
the indented cases before properties/patternProperties. 

> +required:
> +  - compatible
> +allOf:
> +  - $ref: leds-class-multicolor.yaml#
> +additionalProperties: false
> +
> +examples:
> +  - |
> +    #include <dt-bindings/leds/common.h>
> +
> +    rgb-led {
> +        compatible = "pwm-leds-multicolor";
> +
> +        multi-led {
> +          color = <LED_COLOR_ID_RGB>;
> +          function = LED_FUNCTION_INDICATOR;
> +          max-brightness = <65535>;
> +
> +          led-red {
> +              pwms = <&pwm1 0 1000000>;
> +              color = <LED_COLOR_ID_RED>;
> +          };
> +
> +          led-green {
> +              pwms = <&pwm2 0 1000000>;
> +              color = <LED_COLOR_ID_GREEN>;
> +          };
> +
> +          led-blue {
> +              pwms = <&pwm3 0 1000000>;
> +              color = <LED_COLOR_ID_BLUE>;
> +          };
> +        };
> +    };
> +
> +...
> -- 
> 2.35.1
> 
>
Sven Schwermer Feb. 10, 2022, 7:55 a.m. UTC | #3
Hi Alex,

On 2/9/22 10:17, Alexander Dahl wrote:
>> +    rgb-led {
> 
> I think this should be 'led-controller'. See
> Documentation/devicetree/bindings/leds/common.yaml for reference.

Sure, I don't have a preference.

>> +        multi-led {
>> +          color = <LED_COLOR_ID_RGB>;
>> +          function = LED_FUNCTION_INDICATOR;
>> +          max-brightness = <65535>;
>> +
>> +          led-red {
>> +              pwms = <&pwm1 0 1000000>;
>> +              color = <LED_COLOR_ID_RED>;
>> +          };
>> +
>> +          led-green {
>> +              pwms = <&pwm2 0 1000000>;
>> +              color = <LED_COLOR_ID_GREEN>;
>> +          };
>> +
>> +          led-blue {
>> +              pwms = <&pwm3 0 1000000>;
>> +              color = <LED_COLOR_ID_BLUE>;
>> +          };
> 
> Not sure if those node names should be more generic like led-0, led-1
> etc.?  At least the color information is redundant here.  This would
> make it more similar to bindings of other LED drivers.

I don't see how naming them led-{0,1,2} would be better in any way, 
please elaborate.

> And how is it supposed to be named if you have multiple
> "multi-led"s, e.g. one on three PWM channels, and another one on three
> different PWM channels?

I'm not 100% sure what you mean. If you want multiple instances of these 
multi-color PWM LEDs, you'd do something like this:

indicator-led-controller {
     compatible = "pwm-leds-multicolor";
     multi-led {
       color = <LED_COLOR_ID_RGB>;
       function = LED_FUNCTION_INDICATOR;
       max-brightness = <65535>;
       led-red {
           pwms = <&pwm1 0 1000000>;
           color = <LED_COLOR_ID_RED>;
       };
       led-green {
           pwms = <&pwm2 0 1000000>;
           color = <LED_COLOR_ID_GREEN>;
       };
       led-blue {
           pwms = <&pwm3 0 1000000>;
           color = <LED_COLOR_ID_BLUE>;
       };
     };
};
status-led-controller {
     compatible = "pwm-leds-multicolor";
     multi-led {
       color = <LED_COLOR_ID_MULTI>;
       function = LED_FUNCTION_STATUS;
       max-brightness = <255>;
       led-red {
           pwms = <&pwm4 0 1000000>;
           color = <LED_COLOR_ID_RED>;
       };
       led-amber {
           pwms = <&pwm5 0 1000000>;
           color = <LED_COLOR_ID_AMBER>;
       };
     };
};
Sven Schwermer Feb. 11, 2022, 7:37 p.m. UTC | #4
Hi Alex,

On 2/10/22 10:33, Alexander Dahl wrote:
>> I don't see how naming them led-{0,1,2} would be better in any way, please
>> elaborate.
> 
> - consistency with other LED driver bindings
> - spot the number of "sub"-LEDs more easily
> - prevent all kinds of different names people will come up with, if
>    all is allowed instead of a clear scheme
> 
> The color is in the color property anyways.

Let's hear what others on this list say. I don't feel too strongly about 
this either way.

> I would have expected something like this:
> 
>    led-controller-0 {
>        compatible = "pwm-leds-multicolor";
> 
>        multi-led-0 {
>          color = <LED_COLOR_ID_RGB>;
>          function = LED_FUNCTION_INDICATOR;
>          max-brightness = <65535>;
> 
>          led-0 {
>              pwms = <&pwm1 0 1000000>;
>              color = <LED_COLOR_ID_RED>;
>          };
> 
>          led-1 {
>              pwms = <&pwm2 0 1000000>;
>              color = <LED_COLOR_ID_GREEN>;
>          };
> 
>          led-2 {
>              pwms = <&pwm3 0 1000000>;
>              color = <LED_COLOR_ID_BLUE>;
>          };
>        };
> 
>        multi-led-1 {
>          color = <LED_COLOR_ID_RGB>;
>          function = LED_FUNCTION_INDICATOR;
>          max-brightness = <65535>;
> 
>          led-0 {
>              pwms = <&pwm1 0 1000000>;
>              color = <LED_COLOR_ID_RED>;
>          };
> 
>          led-1 {
>              pwms = <&pwm2 0 1000000>;
>              color = <LED_COLOR_ID_GREEN>;
>          };
> 
>          led-2 {
>              pwms = <&pwm3 0 1000000>;
>              color = <LED_COLOR_ID_BLUE>;
>          };
>        };
>    };

That would make the driver more complex. I'm not sure that would be 
worth it. Additionally, we'd have to change the node name pattern for 
the multi LED class. Other opinions?

Best regards,
Sven
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml b/Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml
new file mode 100644
index 000000000000..f7ce29c8ae63
--- /dev/null
+++ b/Documentation/devicetree/bindings/leds/leds-pwm-multicolor.yaml
@@ -0,0 +1,69 @@ 
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/leds/leds-pwm-multicolor.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Multi-color LEDs connected to PWM
+
+maintainers:
+  - Sven Schwermer <sven.schwermer@disruptive-technologies.com>
+
+description: |
+  This driver combines several monochrome PWM LEDs into one multi-color
+  LED using the multicolor LED class.
+
+properties:
+  compatible:
+    const: pwm-leds-multicolor
+  multi-led:
+    type: object
+    patternProperties:
+      "^led-[0-9a-z]+$":
+        type: object
+        $ref: common.yaml#
+        properties:
+          pwms:
+            maxItems: 1
+          pwm-names: true
+          color: true
+        required:
+          - pwms
+          - color
+        additionalProperties: false
+required:
+  - compatible
+allOf:
+  - $ref: leds-class-multicolor.yaml#
+additionalProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/leds/common.h>
+
+    rgb-led {
+        compatible = "pwm-leds-multicolor";
+
+        multi-led {
+          color = <LED_COLOR_ID_RGB>;
+          function = LED_FUNCTION_INDICATOR;
+          max-brightness = <65535>;
+
+          led-red {
+              pwms = <&pwm1 0 1000000>;
+              color = <LED_COLOR_ID_RED>;
+          };
+
+          led-green {
+              pwms = <&pwm2 0 1000000>;
+              color = <LED_COLOR_ID_GREEN>;
+          };
+
+          led-blue {
+              pwms = <&pwm3 0 1000000>;
+              color = <LED_COLOR_ID_BLUE>;
+          };
+        };
+    };
+
+...