Unverified Commit eccd3d97 authored by Mark Brown's avatar Mark Brown
Browse files

regulator: add new PMIC PF0900 support



Merge series from Joy Zou <joy.zou@nxp.com>:

Add binding document and driver.

Signed-off-by: default avatarJoy Zou <joy.zou@nxp.com>
---
Changes in v3:

binding part
- change regulator node names into lowercase.
- add more description for nxp,i2c-crc-enable.
- remove the unnecessary nxp,dvs-run/standby-voltage property.
  These changes come from review comments:
  https://lore.kernel.org/imx/e9f38e38-7df7-4d19-b5c0-2f18aeebcc78@kernel.org/
- add regulator-state-mem property for example.

driver part
- convert to use maple tree register cache.
- change of_match_ptr() name to lowercase since dt-binding changed.
- add more nxp,i2c-crc-enable description for commit message.
- remove the of_parse_cb and dvs from pf0900_regulators since the
  unnecessary property nxp,dvs-run/standby-voltage removed.
- add set_suspend_enable/disable/voltage for the SW regulator_ops.
  the run/standby voltage can be adjusted via the API which regulator
  driver provides is recommended.
  These changes come from binding review comments:
  https://lore.kernel.org/imx/e9f38e38-7df7-4d19-b5c0-2f18aeebcc78@kernel.org/
- add bitfield.h header due to build issue.
- correct the sw4 id.
- add PF0900 prefix for short macro define in order to avoid duplication.
- merge the same mask define in order to simplify code.
- Link to v2: https://lore.kernel.org/r/20250721-b4-pf09-v2-v2-0-e2c568548032@nxp.com

Changes in v2:

binding part
- modify the binding file name to match compatible string.
- add one space for dt_binding_check warning.
- remove unnecessary quotes from "VAON".
- remove the unnecessary empty line.
- move unevaluatedProperties after the $ref.
- move additionalProperties after regulator type.
- remove unnecessary regulator description

driver part
- modify the copyright comment block to C++ style.
- add reg_read/write for regmap_bus.
- remove original pf0900_pmic_read/write.
- remove many regulator operations.
- use regmap_read replace pf0900_pmic_read.
- use regmap_update_bits and regmap_write_bits replace pf0900_pmic_write.
- move the code from pf0900.h to pf0900-regulator.c and delete the header file.
- remove unmask status interrupts and add unmask regulator interrupts.
- remove many interrupts check warning print from irq_handler.
- add notifier for regulator event.
- remove unused macro define.
- add PF0900 prefix for IRQ macro define in order to avoid duplication.
- use GENMASK() and BIT() to replace mask marco define
- remove redundant enum pf0900_chip_type.
- remove redundant print info and comments.
- add dvs property present check because this property is optional.
- remove ret == -EINVAL check from sw_set_dvs() function.
- Link to v1: https://lore.kernel.org/imx/20250617102025.3455544-1-joy.zou@nxp.com/

---
Joy Zou (2):
      dt-bindings: regulator: add PF0900 regulator yaml
      regulator: pf0900: Add PMIC PF0900 support

 .../devicetree/bindings/regulator/nxp,pf0900.yaml  | 163 ++++
 drivers/regulator/Kconfig                          |   8 +
 drivers/regulator/Makefile                         |   1 +
 drivers/regulator/pf0900-regulator.c               | 975 +++++++++++++++++++++
 4 files changed, 1147 insertions(+)
---
base-commit: 84b92a499e7eca54ba1df6f6c6e01766025943f1
change-id: 20250714-b4-pf09-v2-91cdee6d1272

Best regards,
--
Joy Zou <joy.zou@nxp.com>
parents a54ef141 162e2365
Loading
Loading
Loading
Loading
+163 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/regulator/nxp,pf0900.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: NXP PF0900 Power Management Integrated Circuit regulators

maintainers:
  - Joy Zou <joy.zou@nxp.com>

description:
  The PF0900 is a power management integrated circuit (PMIC) optimized
  for high performance i.MX9x based applications. It features five high
  efficiency buck converters, three linear and one vaon regulators. It
  provides low quiescent current in Standby and low power off Modes.

properties:
  compatible:
    enum:
      - nxp,pf0900

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  regulators:
    type: object
    additionalProperties: false

    properties:
      vaon:
        type: object
        $ref: regulator.yaml#
        unevaluatedProperties: false

    patternProperties:
      "^ldo[1-3]$":
        type: object
        $ref: regulator.yaml#
        unevaluatedProperties: false

      "^sw[1-5]$":
        type: object
        $ref: regulator.yaml#
        unevaluatedProperties: false

  nxp,i2c-crc-enable:
    type: boolean
    description:
      The CRC enabled during register read/write. Controlled by customer
      unviewable fuse bits OTP_I2C_CRC_EN. Check chip part number.

required:
  - compatible
  - reg
  - interrupts
  - regulators

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>

    i2c {
        #address-cells = <1>;
        #size-cells = <0>;

        pmic@8 {
            compatible = "nxp,pf0900";
            reg = <0x08>;
            interrupt-parent = <&pcal6524>;
            interrupts = <89 IRQ_TYPE_LEVEL_LOW>;
            nxp,i2c-crc-enable;

            regulators {
                vaon {
                    regulator-name = "VAON";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                    regulator-always-on;
                };

                sw1 {
                    regulator-name = "SW1";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-ramp-delay = <1950>;
                    regulator-state-mem {
                        regulator-on-in-suspend;
                        regulator-suspend-max-microvolt = <650000>;
                        regulator-suspend-min-microvolt = <650000>;
                    };
                };

                sw2 {
                    regulator-name = "SW2";
                    regulator-min-microvolt = <300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-ramp-delay = <1950>;
                };

                sw3 {
                    regulator-name = "SW3";
                    regulator-min-microvolt = <300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-ramp-delay = <1950>;
                };

                sw4 {
                    regulator-name = "SW4";
                    regulator-min-microvolt = <300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-ramp-delay = <1950>;
                };

                sw5 {
                    regulator-name = "SW5";
                    regulator-min-microvolt = <300000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                    regulator-always-on;
                    regulator-ramp-delay = <1950>;
                };

                ldo1 {
                    regulator-name = "LDO1";
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                    regulator-always-on;
                };

                ldo2 {
                    regulator-name = "LDO2";
                    regulator-min-microvolt = <650000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                    regulator-always-on;
                };

                ldo3 {
                    regulator-name = "LDO3";
                    regulator-min-microvolt = <650000>;
                    regulator-max-microvolt = <3300000>;
                    regulator-boot-on;
                    regulator-always-on;
                };
            };
        };
     };
+8 −0
Original line number Diff line number Diff line
@@ -1006,6 +1006,14 @@ config REGULATOR_PCAP
	 This driver provides support for the voltage regulators of the
	 PCAP2 PMIC.

config REGULATOR_PF0900
	tristate "NXP PF0900/PF0901/PF09XX regulator driver"
	depends on I2C
	select REGMAP_I2C
	help
	Say y here to support the NXP PF0900/PF0901/PF09XX PMIC
	regulator driver.

config REGULATOR_PF8X00
	tristate "NXP PF8100/PF8121A/PF8200 regulator driver"
	depends on I2C && OF
+1 −0
Original line number Diff line number Diff line
@@ -124,6 +124,7 @@ obj-$(CONFIG_REGULATOR_QCOM_SPMI) += qcom_spmi-regulator.o
obj-$(CONFIG_REGULATOR_QCOM_USB_VBUS) += qcom_usb_vbus-regulator.o
obj-$(CONFIG_REGULATOR_PALMAS) += palmas-regulator.o
obj-$(CONFIG_REGULATOR_PCA9450) += pca9450-regulator.o
obj-$(CONFIG_REGULATOR_PF0900) += pf0900-regulator.o
obj-$(CONFIG_REGULATOR_PF9453) += pf9453-regulator.o
obj-$(CONFIG_REGULATOR_PF8X00) += pf8x00-regulator.o
obj-$(CONFIG_REGULATOR_PFUZE100) += pfuze100-regulator.o
+975 −0

File added.

Preview size limit exceeded, changes collapsed.