Re: [PATCH v4 3/3] dt-bindings: leds: Convert pwm to yaml
From: Alexander Dahl
Date: Fri Sep 18 2020 - 11:12:13 EST
Hello Rob,
thanks for your feedback. I have some questions/remarks on this new yaml
binding stuff before sending v5 (which will also replace patch 1/3 with a
different approach btw).
Am Dienstag, 15. September 2020, 22:37:35 CEST schrieb Rob Herring:
> On Fri, Sep 11, 2020 at 05:40:04PM +0200, Alexander Dahl wrote:
> > The example was adapted slightly to make use of the 'function' and
> > 'color' properties. License discussed with the original author.
> >
> > Suggested-by: Jacek Anaszewski <jacek.anaszewski@xxxxxxxxx>
> > Signed-off-by: Alexander Dahl <post@xxxxxxxxxxx>
> > Acked-by: Jacek Anaszewski <jacek.anaszewski@xxxxxxxxx>
> > Cc: Peter Ujfalusi <peter.ujfalusi@xxxxxx>
> > ---
> >
> > Notes:
> > v3 -> v4:
> > * added Cc to original author of the binding
> >
> > v2 -> v3:
> > * changed license identifier to recommended one
> > * added Acked-by
> >
> > v2:
> > * added this patch to series (Suggested-by: Jacek Anaszewski)
> >
> > .../devicetree/bindings/leds/leds-pwm.txt | 50 -----------
> > .../devicetree/bindings/leds/leds-pwm.yaml | 85 +++++++++++++++++++
> > 2 files changed, 85 insertions(+), 50 deletions(-)
> > delete mode 100644 Documentation/devicetree/bindings/leds/leds-pwm.txt
> > create mode 100644 Documentation/devicetree/bindings/leds/leds-pwm.yaml
> >
> > diff --git a/Documentation/devicetree/bindings/leds/leds-pwm.txt
> > b/Documentation/devicetree/bindings/leds/leds-pwm.txt deleted file mode
> > 100644
> > index 6c6583c35f2f..000000000000
> > --- a/Documentation/devicetree/bindings/leds/leds-pwm.txt
> > +++ /dev/null
> > @@ -1,50 +0,0 @@
> > -LED connected to PWM
> > -
> > -Required properties:
> > -- compatible : should be "pwm-leds".
> > -
> > -Each LED is represented as a sub-node of the pwm-leds device. Each
> > -node's name represents the name of the corresponding LED.
> > -
> > -LED sub-node properties:
> > -- pwms : PWM property to point to the PWM device (phandle)/port (id) and
> > to - specify the period time to be used: <&phandle id period_ns>;
> > -- pwm-names : (optional) Name to be used by the PWM subsystem for the PWM
> > device - For the pwms and pwm-names property please refer to:
> > - Documentation/devicetree/bindings/pwm/pwm.txt
> > -- max-brightness : Maximum brightness possible for the LED
> > -- active-low : (optional) For PWMs where the LED is wired to supply
> > - rather than ground.
> > -- label : (optional)
> > - see Documentation/devicetree/bindings/leds/common.txt
> > -- linux,default-trigger : (optional)
> > - see Documentation/devicetree/bindings/leds/common.txt
> > -
> > -Example:
> > -
> > -twl_pwm: pwm {
> > - /* provides two PWMs (id 0, 1 for PWM1 and PWM2) */
> > - compatible = "ti,twl6030-pwm";
> > - #pwm-cells = <2>;
> > -};
> > -
> > -twl_pwmled: pwmled {
> > - /* provides one PWM (id 0 for Charing indicator LED) */
> > - compatible = "ti,twl6030-pwmled";
> > - #pwm-cells = <2>;
> > -};
> > -
> > -pwmleds {
> > - compatible = "pwm-leds";
> > - kpad {
> > - label = "omap4::keypad";
> > - pwms = <&twl_pwm 0 7812500>;
> > - max-brightness = <127>;
> > - };
> > -
> > - charging {
> > - label = "omap4:green:chrg";
> > - pwms = <&twl_pwmled 0 7812500>;
> > - max-brightness = <255>;
> > - };
> > -};
> > diff --git a/Documentation/devicetree/bindings/leds/leds-pwm.yaml
> > b/Documentation/devicetree/bindings/leds/leds-pwm.yaml new file mode
> > 100644
> > index 000000000000..c74867492424
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/leds/leds-pwm.yaml
> > @@ -0,0 +1,85 @@
> > +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/leds/leds-pwm.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: LEDs connected to PWM
> > +
> > +maintainers:
> > + - Pavel Machek <pavel@xxxxxx>
> > +
> > +description:
> > + Each LED is represented as a sub-node of the pwm-leds device. Each
> > + node's name represents the name of the corresponding LED.
> > +
> > +properties:
> > + compatible:
> > + const: pwm-leds
> > +
> > +patternProperties:
>
> > + "^pwm-led-([0-9a-f])$":
> '^led-([0-9a-f])' would be my preference. A bit more on that below.
Fine for me.
> What about a single child case?
One child or multiple childs. I found .dts files with one to four sub-nodes
of the pwm-leds device in current master.
> > + type: object
> > +
> > + $ref: common.yaml#
> > +
> > + properties:
> > + pwms:
> > + description:
> > + "PWM property to point to the PWM device (phandle)/port (id)
> > + and to specify the period time to be used:
> > + <&phandle id period_ns>;"
>
> No need to redefine a common property.
Should this look like in 'Documentation/devicetree/bindings/leds/backlight/
pwm-backlight.yaml' then?
> What is needed is how many pwms? I'd assume 1 only: 'maxItems: 1'
Yes, one pwm channel per LED.
> > +
> > + pwm-names:
> > + description:
> > + "Name to be used by the PWM subsystem for the PWM device For
> > + the pwms and pwm-names property please refer to:
> > + Documentation/devicetree/bindings/pwm/pwm.txt"
>
> Same here.
>
> > +
> > + max-brightness:
> > + description:
> > + Maximum brightness possible for the LED
>
> Needs a type $ref.
fwnode_property_read_u32() is used to read this.
>
> > +
> > + active-low:
> > + description:
> > + For PWMs where the LED is wired to supply rather than ground.
>
> type: boolean
>
> > +
> > + required:
> > + - pwms
> > + - max-brightness
>
> additionalProperties: false
>
> That will cause errors if child node names were not consistent (no one
> checked, so they won't be). We could just allow anything, but I prefer
> to move things to be consistent yet try to capture any existing pattern.
Child node names follow no scheme at all currently as far as I could see,
examples from real current .dts files:
panel, led-red, blueled, kpad, front, green, pwm_blue, ds1, network_red,
alarm-brightness, pmu_stat, overo, heartbeat, power, …
Greets
Alex
>
> > +
> > +examples:
> > + - |
> > +
> > + #include <dt-bindings/leds/common.h>
> > +
> > + twl_pwm: pwm {
> > + /* provides two PWMs (id 0, 1 for PWM1 and PWM2) */
> > + compatible = "ti,twl6030-pwm";
> > + #pwm-cells = <2>;
> > + };
> > +
> > + twl_pwmled: pwmled {
> > + /* provides one PWM (id 0 for Charing indicator LED) */
> > + compatible = "ti,twl6030-pwmled";
> > + #pwm-cells = <2>;
> > + };
> > +
> > + pwm_leds {
> > + compatible = "pwm-leds";
> > +
> > + pwm-led-1 {
> > + label = "omap4::keypad";
> > + pwms = <&twl_pwm 0 7812500>;
> > + max-brightness = <127>;
> > + };
> > +
> > + pwm-led-2 {
> > + color = <LED_COLOR_ID_GREEN>;
> > + function = LED_FUNCTION_CHARGING;
> > + pwms = <&twl_pwmled 0 7812500>;
> > + max-brightness = <255>;
> > + };
> > + };
> > +
> > +...