[1/3] dt-bindings: pwm: Add binding for RPi firmware PWM bus
diff mbox series

Message ID 20201009153031.986-2-nsaenzjulienne@suse.de
State New, archived
Headers show
Series
  • Raspberry Pi 4 PoE HAT fan support
Related show

Commit Message

Nicolas Saenz Julienne Oct. 9, 2020, 3:30 p.m. UTC
The PWM bus controlling the fan in RPi's official PoE hat can only be
controlled by the board's co-processor.

Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
---
 .../arm/bcm/raspberrypi,bcm2835-firmware.yaml | 21 +++++++++++++++++++
 .../pwm/raspberrypi,firmware-pwm.h            | 13 ++++++++++++
 2 files changed, 34 insertions(+)
 create mode 100644 include/dt-bindings/pwm/raspberrypi,firmware-pwm.h

Comments

Uwe Kleine-König Oct. 12, 2020, 7:01 a.m. UTC | #1
On Fri, Oct 09, 2020 at 05:30:28PM +0200, Nicolas Saenz Julienne wrote:
> The PWM bus controlling the fan in RPi's official PoE hat can only be
> controlled by the board's co-processor.
> 
> Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> ---
>  .../arm/bcm/raspberrypi,bcm2835-firmware.yaml | 21 +++++++++++++++++++
>  .../pwm/raspberrypi,firmware-pwm.h            | 13 ++++++++++++
>  2 files changed, 34 insertions(+)
>  create mode 100644 include/dt-bindings/pwm/raspberrypi,firmware-pwm.h
> 
> diff --git a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> index a2c63c8b1d10..dcaf00e8602e 100644
> --- a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> +++ b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> @@ -64,6 +64,22 @@ properties:
>        - compatible
>        - "#reset-cells"
>  
> +  pwm:
> +    type: object
> +
> +    properties:
> +      compatible:
> +        const: raspberrypi,firmware-pwm
> +
> +      "#pwm-cells":
> +        const: 1
> +        description: >
> +          The argument is the PWM bus number.

This is wrong. #pwm-cells specifies the number of "arguments" for
phandles pointing to this node. And I would prefer this being 2 to match
the stuff described in the generic pwm binding.

Best regards
Uwe
Nicolas Saenz Julienne Oct. 13, 2020, 10:35 a.m. UTC | #2
Hi Uwe, thanks for having a look at this.

On Mon, 2020-10-12 at 09:01 +0200, Uwe Kleine-König wrote:
> On Fri, Oct 09, 2020 at 05:30:28PM +0200, Nicolas Saenz Julienne wrote:
> > The PWM bus controlling the fan in RPi's official PoE hat can only be
> > controlled by the board's co-processor.
> > 
> > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> > ---
> >  .../arm/bcm/raspberrypi,bcm2835-firmware.yaml | 21 +++++++++++++++++++
> >  .../pwm/raspberrypi,firmware-pwm.h            | 13 ++++++++++++
> >  2 files changed, 34 insertions(+)
> >  create mode 100644 include/dt-bindings/pwm/raspberrypi,firmware-pwm.h
> > 
> > diff --git a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > index a2c63c8b1d10..dcaf00e8602e 100644
> > --- a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > +++ b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > @@ -64,6 +64,22 @@ properties:
> >        - compatible
> >        - "#reset-cells"
> >  
> > +  pwm:
> > +    type: object
> > +
> > +    properties:
> > +      compatible:
> > +        const: raspberrypi,firmware-pwm
> > +
> > +      "#pwm-cells":
> > +        const: 1
> > +        description: >
> > +          The argument is the PWM bus number.
> 
> This is wrong. #pwm-cells specifies the number of "arguments" for
> phandles pointing to this node. And I would prefer this being 2 to match
> the stuff described in the generic pwm binding.

I saw buses out there with the same limitation as this one (unable to change
frequency) that used a single cell, so I whent with it. That said I'll be happy
to change it and drop the custom *_xlate() function in benefit of the default
one.

Regards,
Nicolas
Uwe Kleine-König Oct. 13, 2020, 12:08 p.m. UTC | #3
On Tue, Oct 13, 2020 at 12:35:38PM +0200, Nicolas Saenz Julienne wrote:
> Hi Uwe, thanks for having a look at this.
> 
> On Mon, 2020-10-12 at 09:01 +0200, Uwe Kleine-König wrote:
> > On Fri, Oct 09, 2020 at 05:30:28PM +0200, Nicolas Saenz Julienne wrote:
> > > The PWM bus controlling the fan in RPi's official PoE hat can only be
> > > controlled by the board's co-processor.
> > > 
> > > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> > > ---
> > >  .../arm/bcm/raspberrypi,bcm2835-firmware.yaml | 21 +++++++++++++++++++
> > >  .../pwm/raspberrypi,firmware-pwm.h            | 13 ++++++++++++
> > >  2 files changed, 34 insertions(+)
> > >  create mode 100644 include/dt-bindings/pwm/raspberrypi,firmware-pwm.h
> > > 
> > > diff --git a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > > index a2c63c8b1d10..dcaf00e8602e 100644
> > > --- a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > > +++ b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > > @@ -64,6 +64,22 @@ properties:
> > >        - compatible
> > >        - "#reset-cells"
> > >  
> > > +  pwm:
> > > +    type: object
> > > +
> > > +    properties:
> > > +      compatible:
> > > +        const: raspberrypi,firmware-pwm
> > > +
> > > +      "#pwm-cells":
> > > +        const: 1
> > > +        description: >
> > > +          The argument is the PWM bus number.
> > 
> > This is wrong. #pwm-cells specifies the number of "arguments" for
> > phandles pointing to this node. And I would prefer this being 2 to match
> > the stuff described in the generic pwm binding.
> 
> I saw buses out there with the same limitation as this one (unable to change
> frequency) that used a single cell, so I whent with it. That said I'll be happy
> to change it and drop the custom *_xlate() function in benefit of the default
> one.

As the first cell after the phandle is for the period and only the
second if for flags, this is a poor argument. So yes, use #pwm-cells =
<2> and drop the custom xlate() function please.

Best regards
Uwe
Nicolas Saenz Julienne Oct. 13, 2020, 12:33 p.m. UTC | #4
On Tue, 2020-10-13 at 14:08 +0200, Uwe Kleine-König wrote:
> On Tue, Oct 13, 2020 at 12:35:38PM +0200, Nicolas Saenz Julienne wrote:
> > Hi Uwe, thanks for having a look at this.
> > 
> > On Mon, 2020-10-12 at 09:01 +0200, Uwe Kleine-König wrote:
> > > On Fri, Oct 09, 2020 at 05:30:28PM +0200, Nicolas Saenz Julienne wrote:
> > > > The PWM bus controlling the fan in RPi's official PoE hat can only be
> > > > controlled by the board's co-processor.
> > > > 
> > > > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> > > > ---
> > > >  .../arm/bcm/raspberrypi,bcm2835-firmware.yaml | 21 +++++++++++++++++++
> > > >  .../pwm/raspberrypi,firmware-pwm.h            | 13 ++++++++++++
> > > >  2 files changed, 34 insertions(+)
> > > >  create mode 100644 include/dt-bindings/pwm/raspberrypi,firmware-pwm.h
> > > > 
> > > > diff --git a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > > > index a2c63c8b1d10..dcaf00e8602e 100644
> > > > --- a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > > > +++ b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > > > @@ -64,6 +64,22 @@ properties:
> > > >        - compatible
> > > >        - "#reset-cells"
> > > >  
> > > > +  pwm:
> > > > +    type: object
> > > > +
> > > > +    properties:
> > > > +      compatible:
> > > > +        const: raspberrypi,firmware-pwm
> > > > +
> > > > +      "#pwm-cells":
> > > > +        const: 1
> > > > +        description: >
> > > > +          The argument is the PWM bus number.
> > > 
> > > This is wrong. #pwm-cells specifies the number of "arguments" for
> > > phandles pointing to this node. And I would prefer this being 2 to match
> > > the stuff described in the generic pwm binding.
> > 
> > I saw buses out there with the same limitation as this one (unable to change
> > frequency) that used a single cell, so I whent with it. That said I'll be happy
> > to change it and drop the custom *_xlate() function in benefit of the default
> > one.
> 
> As the first cell after the phandle is for the period and only the
> second if for flags, this is a poor argument.

In that case aren't these bindings wrong (and associated xlate() functions)?

google,cros-ec-pwm.yaml:
[...]
	properties:
	  compatible:
	    const: google,cros-ec-pwm
	  "#pwm-cells":
	    description: The cell specifies the PWM index.
	    const: 1
[...]

cirrus,clps711x-pwm.txt:
[...]
	- #pwm-cells: Should be 1. The cell specifies the index of the channel.
[...]

Note that pxa-pwm.txt behaves as you comment.

Ultimately note that in of_pwm_simple_xlate() the second argument is used to
assign the pwm period, the first one is passed as an index to
pwm_request_from_chip().

> So yes, use #pwm-cells = <2> and drop the custom xlate() function please.

I'll still go this way nontheless. Just want to make sure I understand things
correctly.

Regards,
Nicolas
Uwe Kleine-König Oct. 13, 2020, 3:18 p.m. UTC | #5
On Tue, Oct 13, 2020 at 02:33:20PM +0200, Nicolas Saenz Julienne wrote:
> On Tue, 2020-10-13 at 14:08 +0200, Uwe Kleine-König wrote:
> > On Tue, Oct 13, 2020 at 12:35:38PM +0200, Nicolas Saenz Julienne wrote:
> > > Hi Uwe, thanks for having a look at this.
> > > 
> > > On Mon, 2020-10-12 at 09:01 +0200, Uwe Kleine-König wrote:
> > > > On Fri, Oct 09, 2020 at 05:30:28PM +0200, Nicolas Saenz Julienne wrote:
> > > > > The PWM bus controlling the fan in RPi's official PoE hat can only be
> > > > > controlled by the board's co-processor.
> > > > > 
> > > > > Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
> > > > > ---
> > > > >  .../arm/bcm/raspberrypi,bcm2835-firmware.yaml | 21 +++++++++++++++++++
> > > > >  .../pwm/raspberrypi,firmware-pwm.h            | 13 ++++++++++++
> > > > >  2 files changed, 34 insertions(+)
> > > > >  create mode 100644 include/dt-bindings/pwm/raspberrypi,firmware-pwm.h
> > > > > 
> > > > > diff --git a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > > > > index a2c63c8b1d10..dcaf00e8602e 100644
> > > > > --- a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > > > > +++ b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
> > > > > @@ -64,6 +64,22 @@ properties:
> > > > >        - compatible
> > > > >        - "#reset-cells"
> > > > >  
> > > > > +  pwm:
> > > > > +    type: object
> > > > > +
> > > > > +    properties:
> > > > > +      compatible:
> > > > > +        const: raspberrypi,firmware-pwm
> > > > > +
> > > > > +      "#pwm-cells":
> > > > > +        const: 1
> > > > > +        description: >
> > > > > +          The argument is the PWM bus number.
> > > > 
> > > > This is wrong. #pwm-cells specifies the number of "arguments" for
> > > > phandles pointing to this node. And I would prefer this being 2 to match
> > > > the stuff described in the generic pwm binding.
> > > 
> > > I saw buses out there with the same limitation as this one (unable to change
> > > frequency) that used a single cell, so I whent with it. That said I'll be happy
> > > to change it and drop the custom *_xlate() function in benefit of the default
> > > one.
> > 
> > As the first cell after the phandle is for the period and only the
> > second if for flags, this is a poor argument.
> 
> In that case aren't these bindings wrong (and associated xlate() functions)?

Ah, got it wrong, I want #pwm-cells = <3> where the first argument is
the index, the second the period and the third flags.

> google,cros-ec-pwm.yaml:
> [...]
> 	properties:
> 	  compatible:
> 	    const: google,cros-ec-pwm
> 	  "#pwm-cells":
> 	    description: The cell specifies the PWM index.
> 	    const: 1
> [...]
> 
> cirrus,clps711x-pwm.txt:
> [...]
> 	- #pwm-cells: Should be 1. The cell specifies the index of the channel.
> [...]
> 
> Note that pxa-pwm.txt behaves as you comment.

Hmm, this one has a custom .xlate function, too :-\

Best regards
Uwe

Patch
diff mbox series

diff --git a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
index a2c63c8b1d10..dcaf00e8602e 100644
--- a/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
+++ b/Documentation/devicetree/bindings/arm/bcm/raspberrypi,bcm2835-firmware.yaml
@@ -64,6 +64,22 @@  properties:
       - compatible
       - "#reset-cells"
 
+  pwm:
+    type: object
+
+    properties:
+      compatible:
+        const: raspberrypi,firmware-pwm
+
+      "#pwm-cells":
+        const: 1
+        description: >
+          The argument is the PWM bus number.
+
+    required:
+      - compatible
+      - "#pwm-cells"
+
     additionalProperties: false
 
 required:
@@ -87,5 +103,10 @@  examples:
             compatible = "raspberrypi,firmware-reset";
             #reset-cells = <1>;
         };
+
+        pwm: pwm {
+            compatible = "raspberrypi,firmware-pwm";
+            #pwm-cells = <1>;
+        };
     };
 ...
diff --git a/include/dt-bindings/pwm/raspberrypi,firmware-pwm.h b/include/dt-bindings/pwm/raspberrypi,firmware-pwm.h
new file mode 100644
index 000000000000..27c5ce68847b
--- /dev/null
+++ b/include/dt-bindings/pwm/raspberrypi,firmware-pwm.h
@@ -0,0 +1,13 @@ 
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (c) 2020 Nicolas Saenz Julienne
+ * Author: Nicolas Saenz Julienne <nsaenzjulienne@suse.de>
+ */
+
+#ifndef _DT_BINDINGS_RASPBERRYPI_FIRMWARE_PWM_H
+#define _DT_BINDINGS_RASPBERRYPI_FIRMWARE_PWM_H
+
+#define RASPBERRYPI_FIRMWARE_PWM_POE		0
+#define RASPBERRYPI_FIRMWARE_PWM_NUM		1
+
+#endif