Re: [PATCH v2 11/14] dt-bindings: mfd: pm8008: rework binding

From: Dmitry Baryshkov
Date: Wed Jun 05 2024 - 04:43:33 EST


On Wed, May 29, 2024 at 06:29:55PM +0200, Johan Hovold wrote:
> Rework the pm8008 binding by dropping internal details like register
> offsets and interrupts and by adding the missing regulator and
> temperature alarm properties.
>
> Note that child nodes are still used for pinctrl and regulator
> configuration.
>
> Also note that the pinctrl state definition will be extended later and
> could eventually also be shared with other PMICs (e.g. by breaking out
> bits of qcom,pmic-gpio.yaml).

Obviously we want to adapt this style of bindings for the other PMICs
too. My main concern here are PMICs which have two kinds of controlled
pins: GPIOs and MPPs. With the existing bindings style those are
declared as two subdevices. What would be your suggested way to support
MPPs with the proposed kind of bindings?

>
> Signed-off-by: Johan Hovold <johan+linaro@xxxxxxxxxx>
> ---
> .../devicetree/bindings/mfd/qcom,pm8008.yaml | 149 +++++++++++-------
> 1 file changed, 90 insertions(+), 59 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/mfd/qcom,pm8008.yaml b/Documentation/devicetree/bindings/mfd/qcom,pm8008.yaml
> index d71657f488db..ccf472e7f552 100644
> --- a/Documentation/devicetree/bindings/mfd/qcom,pm8008.yaml
> +++ b/Documentation/devicetree/bindings/mfd/qcom,pm8008.yaml
> @@ -27,103 +27,134 @@ properties:
> reset-gpios:
> maxItems: 1
>
> - "#interrupt-cells":
> + vdd-l1-l2-supply: true
> + vdd-l3-l4-supply: true
> + vdd-l5-supply: true
> + vdd-l6-supply: true
> + vdd-l7-supply: true
> +
> + gpio-controller: true
> +
> + "#gpio-cells":
> const: 2
>
> - description: |
> - The first cell is the IRQ number, the second cell is the IRQ trigger
> - flag. All interrupts are listed in include/dt-bindings/mfd/qcom-pm8008.h.
> + gpio-ranges:
> + maxItems: 1
>
> interrupt-controller: true
>
> - "#address-cells":
> - const: 1
> + "#interrupt-cells":
> + const: 2
>
> - "#size-cells":
> + "#thermal-sensor-cells":
> const: 0
>
> -patternProperties:
> - "^gpio@[0-9a-f]+$":
> + pinctrl:
> type: object
> + additionalProperties: false
> + patternProperties:
> + "-state$":
> + type: object
> + $ref: "#/$defs/qcom-pm8008-pinctrl-state"
> + unevaluatedProperties: false
>
> - description: |
> - The GPIO peripheral. This node may be specified twice, one for each GPIO.
> -
> - properties:
> - compatible:
> - items:
> - - const: qcom,pm8008-gpio
> - - const: qcom,spmi-gpio
> + regulators:
> + type: object
> + additionalProperties: false
> + patternProperties:
> + "^ldo[1-7]$":
> + type: object
> + $ref: /schemas/regulator/regulator.yaml#
> + unevaluatedProperties: false
>
> - reg:
> - description: Peripheral address of one of the two GPIO peripherals.
> - maxItems: 1
> +required:
> + - compatible
> + - reg
> + - interrupts
> + - vdd-l1-l2-supply
> + - vdd-l3-l4-supply
> + - vdd-l5-supply
> + - vdd-l6-supply
> + - vdd-l7-supply
> + - gpio-controller
> + - "#gpio-cells"
> + - gpio-ranges
> + - interrupt-controller
> + - "#interrupt-cells"
> + - "#thermal-sensor-cells"
>
> - gpio-controller: true
> +additionalProperties: false
>
> - gpio-ranges:
> - maxItems: 1
> +$defs:
> + qcom-pm8008-pinctrl-state:
> + type: object
>
> - interrupt-controller: true
> + allOf:
> + - $ref: /schemas/pinctrl/pinmux-node.yaml
> + - $ref: /schemas/pinctrl/pincfg-node.yaml
>
> - "#interrupt-cells":
> - const: 2
> + properties:
> + pins:
> + items:
> + pattern: "^gpio[12]$"
>
> - "#gpio-cells":
> - const: 2
> + function:
> + items:
> + - enum:
> + - normal
>
> required:
> - - compatible
> - - reg
> - - gpio-controller
> - - interrupt-controller
> - - "#gpio-cells"
> - - gpio-ranges
> - - "#interrupt-cells"
> + - pins
> + - function
>
> additionalProperties: false
>
> -required:
> - - compatible
> - - reg
> - - interrupts
> - - "#address-cells"
> - - "#size-cells"
> - - "#interrupt-cells"
> -
> -additionalProperties: false
> -
> examples:
> - |
> #include <dt-bindings/gpio/gpio.h>
> - #include <dt-bindings/mfd/qcom-pm8008.h>
> #include <dt-bindings/interrupt-controller/irq.h>
>
> i2c {
> #address-cells = <1>;
> #size-cells = <0>;
>
> - pmic@8 {
> + pm8008: pmic@8 {
> compatible = "qcom,pm8008";
> reg = <0x8>;
> - #address-cells = <1>;
> - #size-cells = <0>;
> - interrupt-controller;
> - #interrupt-cells = <2>;
>
> interrupt-parent = <&tlmm>;
> interrupts = <32 IRQ_TYPE_EDGE_RISING>;
>
> reset-gpios = <&tlmm 42 GPIO_ACTIVE_LOW>;
>
> - pm8008_gpios: gpio@c000 {
> - compatible = "qcom,pm8008-gpio", "qcom,spmi-gpio";
> - reg = <0xc000>;
> - gpio-controller;
> - gpio-ranges = <&pm8008_gpios 0 0 2>;
> - #gpio-cells = <2>;
> - interrupt-controller;
> - #interrupt-cells = <2>;
> + vdd-l1-l2-supply = <&vreg_s8b_1p2>;
> + vdd-l3-l4-supply = <&vreg_s1b_1p8>;
> + vdd-l5-supply = <&vreg_bob>;
> + vdd-l6-supply = <&vreg_bob>;
> + vdd-l7-supply = <&vreg_bob>;
> +
> + gpio-controller;
> + #gpio-cells = <2>;
> + gpio-ranges = <&pm8008 0 0 2>;
> +
> + interrupt-controller;
> + #interrupt-cells = <2>;
> +
> + #thermal-sensor-cells = <0>;
> +
> + pinctrl {
> + gpio-keys-state {
> + pins = "gpio1";
> + function = "normal";
> + };
> + };
> +
> + regulators {
> + ldo1 {
> + regulator-name = "vreg_l1";
> + regulator-min-microvolt = <950000>;
> + regulator-max-microvolt = <1300000>;
> + };
> };
> };
> };
> --
> 2.44.1
>

--
With best wishes
Dmitry