# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/rohm,bd72720-pmic.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: ROHM BD72720 and BD73900 Power Management Integrated Circuits

maintainers:
  - Matti Vaittinen <mazziesaccount@gmail.com>

description:
  BD72720 and BD73900 are single-chip power management ICs for
  battery-powered portable devices. They integrate 10 bucks and 11 LDOs,
  and a 3000 mA switching charger. ICs also include a Coulomb counter,
  a real-time clock (RTC), GPIOs and a 32.768 kHz clock gate.

# In addition to the properties found from the charger node, PMICs
# use properties from a static battery node. Please see the:
# Documentation/devicetree/bindings/power/supply/battery.yaml
#
# Following properties are used
# when present:
#
# charge-full-design-microamp-hours: Battry capacity in mAh
# voltage-max-design-microvolt:      Maximum voltage
# voltage-min-design-microvolt:      Minimum voltage system is still operating.
# degrade-cycle-microamp-hours:      Capacity lost due to aging at each full
#                                    charge cycle.
# ocv-capacity-celsius:              Array of OCV table temperatures. 1/table.
# ocv-capacity-table-<N>:            Table of OCV voltage/SOC pairs. Corresponds
#                                    N.th temperature in ocv-capacity-celsius
#
# volt-drop-thresh-microvolt: Threshold for starting the VDR correction
# volt-drop-soc:                Table of capacity values matching the
#                                    values in VDR tables.
#
# volt-drop-temperatures-millicelsius: Temperatures corresponding to the volage
# drop values given in volt-drop-[0-9]-microvolt
#
# volt-drop-[0-9]-microvolt: VDR table for a temperature specified in
# volt-drop-temperatures-millicelsius
#
# VDR tables are (usually) determined for a specific battery by ROHM.
# The battery node would then be referred from the charger node:
#
# monitored-battery = <&battery>;

properties:
  compatible:
    oneOf:
      - const: rohm,bd72720

      - items:
          - const: rohm,bd73900
          - const: rohm,bd72720

  reg:
    description:
      I2C slave address.
    maxItems: 1

  interrupts:
    maxItems: 1

  gpio-controller: true

  "#gpio-cells":
    const: 2
    description:
      The first cell is the pin number and the second cell is used to specify
      flags. See the gpio binding document for more information.

  clocks:
    maxItems: 1

  "#clock-cells":
    const: 0

  clock-output-names:
    const: bd71828-32k-out

  rohm,clkout-open-drain:
    description: clk32kout mode. Set to 1 for "open-drain" or 0 for "cmos".
    $ref: /schemas/types.yaml#/definitions/uint32
    maximum: 1

  rohm,charger-sense-resistor-micro-ohms:
    minimum: 10000
    maximum: 50000
    description:
      PMIC has a SAR ADC for measuring charging currents. External sense
      resistor (RSENSE in data sheet) should be used. If some other but
      30 mOhm resistor is used the resistance value should be given here in
      micro Ohms.

  regulators:
    $ref: /schemas/regulator/rohm,bd72720-regulator.yaml
    description:
      List of child nodes that specify the regulators.

  leds:
    $ref: /schemas/leds/rohm,bd71828-leds.yaml

  rohm,pin-fault_b:
    $ref: /schemas/types.yaml#/definitions/string
    description:
      PMIC has an OTP option to use fault_b-pin for different
      purposes. Set this property accordingly. OTP options are
      OTP0 - bi-directional FAULT_B or READY indicator depending on a
      'sub option'
      OTP1 - GPO
      OTP2 - Power sequencer output.
    enum:
      - faultb
      - readyind
      - gpo
      - pwrseq

patternProperties:
  "^rohm,pin-dvs[0-1]$":
    $ref: /schemas/types.yaml#/definitions/string
    description:
      PMIC has 4 different OTP options to determine the use of dvs<X>-pins.
      OTP0 - regulator RUN state control.
      OTP1 - GPI.
      OTP2 - GPO.
      OTP3 - Power sequencer output.
      This property specifies the use of the pin.
    enum:
      - dvs-input
      - gpi
      - gpo
      - pwrseq

  "^rohm,pin-exten[0-1]$":
    $ref: /schemas/types.yaml#/definitions/string
    description: PMIC has an OTP option to use exten0-pin for different
      purposes. Set this property accordingly.
      OTP0 - GPO
      OTP1 - Power sequencer output.
    enum:
      - gpo
      - pwrseq

required:
  - compatible
  - reg
  - interrupts
  - clocks
  - "#clock-cells"
  - regulators
  - gpio-controller
  - "#gpio-cells"

additionalProperties: false

examples:
  - |
    #include <dt-bindings/interrupt-controller/irq.h>
    #include <dt-bindings/leds/common.h>
    i2c {
        #address-cells = <1>;
        #size-cells = <0>;
        pmic: pmic@4b {
            compatible = "rohm,bd72720";
            reg = <0x4b>;

            interrupt-parent = <&gpio1>;
            interrupts = <29 IRQ_TYPE_LEVEL_LOW>;

            clocks = <&osc 0>;
            #clock-cells = <0>;
            clock-output-names = "bd71828-32k-out";

            gpio-controller;
            #gpio-cells = <2>;

            rohm,pin-dvs0 = "gpi";
            rohm,pin-dvs1 = "gpi";
            rohm,pin-exten0 = "gpo";
            rohm,pin-exten1 = "gpo";
            rohm,pin-fault_b = "faultb";

            rohm,charger-sense-resistor-micro-ohms = <10000>;

            regulators {
                buck1 {
                    regulator-name = "buck1";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-ramp-delay = <2500>;
                };
                buck2 {
                    regulator-name = "buck2";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-ramp-delay = <2500>;
                };
                buck3 {
                    regulator-name = "buck3";
                    regulator-min-microvolt = <1200000>;
                    regulator-max-microvolt = <2000000>;
                };
                buck4 {
                    regulator-name = "buck4";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1800000>;
                };
                buck5 {
                    regulator-name = "buck5";
                    regulator-min-microvolt = <2500000>;
                    regulator-max-microvolt = <3300000>;
                };
                buck6 {
                    regulator-name = "buck6";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-ramp-delay = <2500>;
                };
                buck7 {
                    regulator-name = "buck7";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <2000000>;
                    regulator-ramp-delay = <2500>;
                };
                buck8 {
                    regulator-name = "buck8";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <1700000>;
                    regulator-ramp-delay = <2500>;
                    rohm,dvs-run-voltage = <1700000>;
                    rohm,dvs-idle-voltage = <1>;
                    rohm,dvs-suspend-voltage = <1>;
                    rohm,dvs-lpsr-voltage = <0>;
                    regulator-boot-on;
                };
                buck9 {
                    regulator-name = "buck9";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <1700000>;
                    regulator-ramp-delay = <2500>;
                    rohm,dvs-run-voltage = <1700000>;
                    rohm,dvs-idle-voltage = <1>;
                    rohm,dvs-suspend-voltage = <1>;
                    rohm,dvs-lpsr-voltage = <0>;
                    regulator-boot-on;
                };
                buck10 {
                    regulator-name = "buck10";
                    regulator-min-microvolt = <500000>;
                    regulator-max-microvolt = <1700000>;
                    regulator-ramp-delay = <2500>;
                    rohm,dvs-run-voltage = <1700000>;
                    rohm,dvs-idle-voltage = <1>;
                    rohm,dvs-suspend-voltage = <1>;
                    rohm,dvs-lpsr-voltage = <0>;
                    regulator-boot-on;
                };
                ldo1 {
                    regulator-name = "ldo1";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo2 {
                    regulator-name = "ldo2";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo3 {
                    regulator-name = "ldo3";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo4 {
                    regulator-name = "ldo4";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo5 {
                    regulator-name = "ldo5";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo6 {
                    regulator-name = "ldo6";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;
                };
                ldo7 {
                    regulator-name = "ldo7";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <3300000>;
                };
                ldo8 {
                    regulator-name = "ldo8";
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <3300000>;
                    rohm,dvs-suspend-voltage = <0>;
                    rohm,dvs-lpsr-voltage = <1>;
                    rohm,dvs-run-voltage = <750000>;
                };
                ldo9 {
                    regulator-name = "ldo9";
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <3300000>;
                    rohm,dvs-suspend-voltage = <0>;
                    rohm,dvs-lpsr-voltage = <1>;
                    rohm,dvs-run-voltage = <750000>;
                };
                ldo10 {
                    regulator-name = "ldo10";
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <3300000>;
                    rohm,dvs-suspend-voltage = <0>;
                    rohm,dvs-lpsr-voltage = <1>;
                    rohm,dvs-run-voltage = <750000>;
                };
                ldo11 {
                    regulator-name = "ldo11";
                    regulator-min-microvolt = <750000>;
                    regulator-max-microvolt = <3300000>;
                    rohm,dvs-suspend-voltage = <0>;
                    rohm,dvs-lpsr-voltage = <1>;
                    rohm,dvs-run-voltage = <750000>;
                };
            };

            leds {
                compatible = "rohm,bd71828-leds";

                led-1 {
                    rohm,led-compatible = "bd71828-grnled";
                    function = LED_FUNCTION_INDICATOR;
                    color = <LED_COLOR_ID_GREEN>;
                };
                led-2 {
                    rohm,led-compatible = "bd71828-ambled";
                    function = LED_FUNCTION_CHARGING;
                    color = <LED_COLOR_ID_AMBER>;
                };
            };
        };
    };