mbox series

[v7,0/6] Qualcomm Light Pulse Generator

Message ID 20210429211517.312792-1-bjorn.andersson@linaro.org
Headers show
Series Qualcomm Light Pulse Generator | expand

Message

Bjorn Andersson April 29, 2021, 9:15 p.m. UTC
This introduces support for the Qualcomm Light Pulse Generator block found in a
wide range of Qualcomm PMICs.

Bjorn Andersson (6):
  dt-bindings: leds: Add Qualcomm Light Pulse Generator binding
  leds: Add driver for Qualcomm LPG
  arm64: dts: qcom: Add LPG to pm8916, pm8994, pmi8994 and pmi8998
  arm64: dts: qcom: sdm845: Enable user LEDs on DB845c
  arm64: dts: qcom: pmi8994: Define MPP block
  arm64: dts: qcom: db820c: Add user LEDs

 .../bindings/leds/leds-qcom-lpg.yaml          |  158 ++
 arch/arm64/boot/dts/qcom/apq8096-db820c.dtsi  |   49 +
 arch/arm64/boot/dts/qcom/pm8916.dtsi          |    8 +
 arch/arm64/boot/dts/qcom/pm8994.dtsi          |   10 +
 arch/arm64/boot/dts/qcom/pmi8994.dtsi         |   22 +
 arch/arm64/boot/dts/qcom/pmi8998.dtsi         |   10 +
 arch/arm64/boot/dts/qcom/sdm845-db845c.dts    |   24 +
 drivers/leds/Kconfig                          |    3 +
 drivers/leds/Makefile                         |    3 +
 drivers/leds/rgb/leds-qcom-lpg.c              | 1286 +++++++++++++++++
 10 files changed, 1573 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml
 create mode 100644 drivers/leds/rgb/leds-qcom-lpg.c

-- 
2.29.2

Comments

Rob Herring April 30, 2021, 8:05 p.m. UTC | #1
On Thu, Apr 29, 2021 at 02:15:12PM -0700, Bjorn Andersson wrote:
> This adds the binding document describing the three hardware blocks

> related to the Light Pulse Generator found in a wide range of Qualcomm

> PMICs.

> 

> Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>

> ---

> 

> Changes since v6:

> - Backed qcom,dtest out of the child nodes again, as it's useful to be able to

>   route pwm signals through dtest lines as well (and pwm channels aren't

>   described as children).

> - Added pm8150[bl] compatibles

> - Dropped quotes around qcom,dtest

> - Fixed indentation errors in subnode definition

> 

>  .../bindings/leds/leds-qcom-lpg.yaml          | 158 ++++++++++++++++++

>  1 file changed, 158 insertions(+)

>  create mode 100644 Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml

> 

> diff --git a/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml b/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml

> new file mode 100644

> index 000000000000..2998598e8785

> --- /dev/null

> +++ b/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml

> @@ -0,0 +1,158 @@

> +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)

> +%YAML 1.2

> +---

> +$id: http://devicetree.org/schemas/leds/leds-qcom-lpg.yaml#

> +$schema: http://devicetree.org/meta-schemas/core.yaml#

> +

> +title: Qualcomm Light Pulse Generator

> +

> +maintainers:

> +  - Bjorn Andersson <bjorn.andersson@linaro.org>

> +

> +description: >

> +  The Qualcomm Light Pulse Generator consists of three different hardware blocks;

> +  a ramp generator with lookup table, the light pulse generator and a three

> +  channel current sink. These blocks are found in a wide range of Qualcomm PMICs.

> +

> +properties:

> +  compatible:

> +    enum:

> +      - qcom,pm8150b-lpg

> +      - qcom,pm8150l-lpg

> +      - qcom,pm8916-pwm

> +      - qcom,pm8941-lpg

> +      - qcom,pm8994-lpg

> +      - qcom,pmi8994-lpg

> +      - qcom,pmi8998-lpg

> +

> +  "#pwm-cells":

> +    const: 2

> +

> +  "#address-cells":

> +    const: 1

> +

> +  "#size-cells":

> +    const: 0

> +

> +  qcom,power-source:

> +    $ref: /schemas/types.yaml#/definitions/uint32

> +    description:

> +      power-source used to drive the output, as defined in the datasheet.

> +      Should be specified if the TRILED block is present


constraints?

> +

> +  qcom,dtest:

> +    $ref: /schemas/types.yaml#/definitions/uint32-array

> +    description: >

> +      A list of integer pairs, where each pair represent the dtest line the

> +      particular channel should be connected to and the flags denoting how the

> +      value should be outputed, as defined in the datasheet. The number of

> +      pairs should be the same as the number of channels.


Sounds like a matrix rather than array. Constraints on the values?

> +

> +  multi-led:

> +    type: object

> +    $ref: leds-class-multicolor.yaml#

> +    properties:

> +      "#address-cells":

> +        const: 1

> +

> +      "#size-cells":

> +        const: 0

> +

> +      "^led@[0-9a-f]$":

> +        type: object

> +        $ref: common.yaml#

> +

> +patternProperties:

> +  "^led@[0-9a-f]$":

> +    type: object

> +    $ref: common.yaml#

> +

> +    properties:

> +      reg: true

> +

> +    required:

> +      - reg

> +

> +required:

> +  - compatible

> +

> +additionalProperties: false

> +

> +examples:

> +  - |

> +    #include <dt-bindings/leds/common.h>

> +

> +    lpg {

> +      compatible = "qcom,pmi8994-lpg";

> +

> +      #address-cells = <1>;

> +      #size-cells = <0>;

> +

> +      qcom,power-source = <1>;

> +

> +      qcom,dtest = <0 0

> +                    0 0

> +                    0 0

> +                    4 1>;

> +

> +      led@1 {

> +        reg = <1>;

> +        label = "green:user1";

> +      };

> +

> +      led@2 {

> +        reg = <2>;

> +        label = "green:user0";

> +        default-state = "on";

> +      };

> +

> +      led@3 {

> +        reg = <3>;

> +        label = "green:user2";

> +      };

> +

> +      led@4 {

> +        reg = <4>;

> +        label = "green:user3";

> +      };

> +    };

> +  - |

> +    #include <dt-bindings/leds/common.h>

> +

> +    lpg {

> +      compatible = "qcom,pmi8994-lpg";

> +

> +      #address-cells = <1>;

> +      #size-cells = <0>;

> +

> +      qcom,power-source = <1>;

> +

> +      multi-led {

> +        color = <LED_COLOR_ID_MULTI>;

> +        label = "rgb:notification";

> +

> +        #address-cells = <1>;

> +        #size-cells = <0>;

> +

> +        led@1 {

> +          reg = <1>;

> +          color = <LED_COLOR_ID_RED>;

> +        };

> +

> +        led@2 {

> +          reg = <2>;

> +          color = <LED_COLOR_ID_GREEN>;

> +        };

> +

> +        led@3 {

> +          reg = <3>;

> +          color = <LED_COLOR_ID_BLUE>;

> +        };

> +      };

> +    };

> +  - |

> +    lpg {

> +      compatible = "qcom,pm8916-pwm";

> +      #pwm-cells = <2>;

> +    };

> +...

> -- 

> 2.29.2

>
Bjorn Andersson May 2, 2021, 8:53 p.m. UTC | #2
On Fri 30 Apr 15:05 CDT 2021, Rob Herring wrote:
> > diff --git a/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml b/Documentation/devicetree/bindings/leds/leds-qcom-lpg.yaml
[..]
> > +  qcom,power-source:
> > +    $ref: /schemas/types.yaml#/definitions/uint32
> > +    description:
> > +      power-source used to drive the output, as defined in the datasheet.
> > +      Should be specified if the TRILED block is present
> 
> constraints?
> 

Yes, we should be able to constrain this a little bit.

> > +
> > +  qcom,dtest:
> > +    $ref: /schemas/types.yaml#/definitions/uint32-array
> > +    description: >
> > +      A list of integer pairs, where each pair represent the dtest line the
> > +      particular channel should be connected to and the flags denoting how the
> > +      value should be outputed, as defined in the datasheet. The number of
> > +      pairs should be the same as the number of channels.
> 
> Sounds like a matrix rather than array. Constraints on the values?
> 

I wasn't aware of uint32-matrix and that I can describe the constraints
of the values in the matrix. I'll familiarize myself with it and see if
I can tighten this up a little bit.

Thanks,
Bjorn