# SPDX-License-Identifier: GPL-2.0
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/ti,twl.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Texas Instruments TWL family

maintainers:
  - Andreas Kemnade <andreas@kemnade.info>

description: |
  The TWLs are Integrated Power Management Chips.
  Some versions might contain much more analog functions like
  USB transceiver or Audio amplifier.
  These chips are connected to an I2C bus.

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: ti,twl4030
    then:
      patternProperties:
        "^regulator-":
          properties:
            compatible:
              enum:
                - ti,twl4030-vaux1
                - ti,twl4030-vaux2
                - ti,twl4030-vaux3
                - ti,twl4030-vaux4
                - ti,twl4030-vmmc1
                - ti,twl4030-vmmc2
                - ti,twl4030-vpll1
                - ti,twl4030-vpll2
                - ti,twl4030-vsim
                - ti,twl4030-vdac
                - ti,twl4030-vintana2
                - ti,twl4030-vio
                - ti,twl4030-vdd1
                - ti,twl4030-vdd2
                - ti,twl4030-vintana1
                - ti,twl4030-vintdig
                - ti,twl4030-vusb1v5
                - ti,twl4030-vusb1v8
                - ti,twl4030-vusb3v1
            ti,retain-on-reset: false

      properties:
        charger:
          $ref: /schemas/power/supply/twl4030-charger.yaml
          unevaluatedProperties: false

        gpadc: false

        usb-comparator: false

  - if:
      properties:
        compatible:
          contains:
            const: ti,twl6030
    then:
      patternProperties:
        "^regulator-":
          properties:
            compatible:
              enum:
                - ti,twl6030-vaux1
                - ti,twl6030-vaux2
                - ti,twl6030-vaux3
                - ti,twl6030-vmmc
                - ti,twl6030-vpp
                - ti,twl6030-vusim
                - ti,twl6030-vana
                - ti,twl6030-vcxio
                - ti,twl6030-vdac
                - ti,twl6030-vusb
                - ti,twl6030-v1v8
                - ti,twl6030-v2v1
                - ti,twl6030-vdd1
                - ti,twl6030-vdd2
                - ti,twl6030-vdd3
            regulator-initial-mode: false

      properties:
        charger:
          $ref: /schemas/power/supply/ti,twl6030-charger.yaml
          unevaluatedProperties: false

        gpadc:
          properties:
            compatible:
              const: ti,twl6030-gpadc

        pwrbutton: false

        madc: false

        watchdog: false

        audio: false

        keypad: false

        twl4030-usb: false

        gpio: false

        power: false

  - if:
      properties:
        compatible:
          contains:
            const: ti,twl6032
    then:
      patternProperties:
        "^regulator-":
          properties:
            compatible:
              enum:
                - ti,twl6032-ldo1
                - ti,twl6032-ldo2
                - ti,twl6032-ldo3
                - ti,twl6032-ldo4
                - ti,twl6032-ldo5
                - ti,twl6032-ldo6
                - ti,twl6032-ldo7
                - ti,twl6032-ldoln
                - ti,twl6032-ldousb
                - ti,twl6032-smps3
                - ti,twl6032-smps4
                - ti,twl6032-vio
            regulator-initial-mode: false

      properties:
        charger:
          $ref: /schemas/power/supply/ti,twl6030-charger.yaml
          unevaluatedProperties: false

        gpadc:
          properties:
            compatible:
              const: ti,twl6032-gpadc

        pwrbutton: false

        madc: false

        watchdog: false

        audio: false

        keypad: false

        twl4030-usb: false

        gpio: false

        power: false

properties:
  compatible:
    description: >
      TWL4030 for integrated power-management/audio CODEC device used in
      OMAP3 based boards.

      TWL6030/32 for integrated power-management used in OMAP4 based boards
    enum:
      - ti,twl4030
      - ti,twl6030
      - ti,twl6032

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  interrupt-controller: true

  system-power-controller: true

  "#interrupt-cells":
    const: 1

  "#clock-cells":
    const: 1

  clocks:
    maxItems: 1

  clock-names:
    const: fck

  charger:
    type: object

    properties:
      compatible: true

    required:
      - compatible

  rtc:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: ti,twl4030-rtc
      interrupts:
        maxItems: 1

  madc:
    type: object
    $ref: /schemas/iio/adc/ti,twl4030-madc.yaml
    unevaluatedProperties: false

  pwrbutton:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: ti,twl4030-pwrbutton
      interrupts:
        items:
          - items:
              const: 8

  watchdog:
    type: object
    additionalProperties: false

    properties:
      compatible:
        const: ti,twl4030-wdt

  audio:
    type: object
    additionalProperties: true

    properties:
      compatible:
        const: ti,twl4030-audio

    required:
      - compatible

  keypad:
    type: object
    additionalProperties: true

    properties:
      compatible:
        const: ti,twl4030-keypad

    required:
      - compatible

  twl4030-usb:
    type: object
    additionalProperties: true

    properties:
      compatible:
        const: ti,twl4030-usb

    required:
      - compatible

  gpio:
    type: object
    additionalProperties: true

    properties:
      compatible:
        const: ti,twl4030-gpio

    required:
      - compatible

  power:
    type: object
    additionalProperties: false
    description: >
      The power management module inside the TWL4030 provides several
      facilities to control the power resources, including power scripts.

      For now, the binding only supports the complete shutdown of the
      system after poweroff.

      Board-specific compatible strings may be used for platform-specific
      power configurations.

      A board-specific compatible string (e.g., ti,twl4030-power-omap3-evm)
      may be paired with a generic fallback (generally for power saving mode).

    properties:
      compatible:
        oneOf:
          # Case 1: A single compatible string is provided.
          - enum:
              - ti,twl4030-power
              - ti,twl4030-power-reset
              - ti,twl4030-power-idle
              - ti,twl4030-power-idle-osc-off
              - ti,twl4030-power-omap3-sdp
              - ti,twl4030-power-omap3-ldp
              - ti,twl4030-power-omap3-evm

          # Case 2: The specific, valid fallback for 'idle-osc-off'.
          - items:
              - const: ti,twl4030-power-idle-osc-off
              - const: ti,twl4030-power-idle

          # Case 3: The specific, valid fallback for 'omap3-evm'.
          - items:
              - const: ti,twl4030-power-omap3-evm
              - const: ti,twl4030-power-idle

      ti,system-power-controller:
        type: boolean
        deprecated: true
        description: >
          DEPRECATED. The standard 'system-power-controller'
          property on the parent node should be used instead.

      ti,use_poweroff:
        type: boolean
        deprecated: true
        description: DEPRECATED, to be removed.

    required:
      - compatible

  gpadc:
    type: object
    $ref: /schemas/iio/adc/ti,twl6030-gpadc.yaml
    unevaluatedProperties: false

    properties:
      compatible: true

  usb-comparator:
    type: object
    additionalProperties: true

    properties:
      compatible:
        const: ti,twl6030-usb

    required:
      - compatible

  pwm:
    type: object
    $ref: /schemas/pwm/pwm.yaml#
    unevaluatedProperties: false
    description:
      PWM controllers (PWM1 and PWM2 on TWL4030, PWM0 and PWM1 on TWL6030/32).

    properties:
      compatible:
        enum:
          - ti,twl4030-pwm
          - ti,twl6030-pwm

      '#pwm-cells':
        const: 2

    required:
      - compatible
      - '#pwm-cells'

  pwmled:
    type: object
    $ref: /schemas/pwm/pwm.yaml#
    unevaluatedProperties: false
    description: >
      PWM controllers connected to LED terminals (PWMA and PWMB on TWL4030.

      LED PWM on TWL6030/32, mainly used as charging indicator LED).

    properties:
      compatible:
        enum:
          - ti,twl4030-pwmled
          - ti,twl6030-pwmled

      '#pwm-cells':
        const: 2

    required:
      - compatible
      - '#pwm-cells'

patternProperties:
  "^regulator-":
    type: object
    unevaluatedProperties: false
    $ref: /schemas/regulator/regulator.yaml

    properties:
      compatible: true
      regulator-initial-mode:
        enum:
          - 0x08 # Sleep mode, the nominal output voltage is maintained
                 # with low power consumption with low load current capability
          - 0x0e # Active mode, the regulator can deliver its nominal output
                 # voltage with full-load current capability

      ti,retain-on-reset:
        description: >
          Does not turn off the supplies during warm reset.

          Could be needed for VMMC, as TWL6030 reset sequence for
          this signal does not comply with the SD specification.
        type: boolean

unevaluatedProperties: false

required:
  - compatible
  - reg
  - interrupts
  - interrupt-controller
  - "#interrupt-cells"

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

      pmic@48 {
        compatible = "ti,twl6030";
        reg = <0x48>;
        interrupts = <39>; /* IRQ_SYS_1N cascaded to gic */
        interrupt-parent = <&gic>;
        interrupt-controller;
        #interrupt-cells = <1>;

        charger {
          compatible = "ti,twl6030-charger";
          interrupts = <2>, <5>;
          io-channels = <&gpadc 10>;
          io-channel-names = "vusb";
          monitored-battery = <&bat>;
        };

        gpadc {
          compatible = "ti,twl6030-gpadc";
          interrupts = <6>;
          #io-channel-cells = <1>;
        };

        rtc {
          compatible = "ti,twl4030-rtc";
          interrupts = <8>;
        };

        regulator-vaux1 {
          compatible = "ti,twl6030-vaux1";
          regulator-min-microvolt = <1000000>;
          regulator-max-microvolt = <3000000>;
        };

        regulator-vmmc1 {
          compatible = "ti,twl6030-vmmc";
          ti,retain-on-reset;
        };

        pwm {
          compatible = "ti,twl6030-pwm";
          #pwm-cells = <2>;
        };

        pwmled {
          compatible = "ti,twl6030-pwmled";
          #pwm-cells = <2>;
        };
      };
    };

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

      pmic@48 {
        compatible = "ti,twl4030";
        reg = <0x48>;
        interrupts = <7>; /* SYS_NIRQ cascaded to intc */
        interrupt-parent = <&intc>;
        interrupt-controller;
        #interrupt-cells = <1>;

        charger {
          compatible = "ti,twl4030-bci";
          interrupts = <9>, <2>;
          bci3v1-supply = <&vusb3v1>;
          io-channels = <&twl_madc 11>;
          io-channel-names = "vac";
        };

        twl_madc: madc {
          compatible = "ti,twl4030-madc";
          interrupts = <3>;
          #io-channel-cells = <1>;
        };

        pwrbutton {
          compatible = "ti,twl4030-pwrbutton";
          interrupts = <8>;
        };

        rtc {
          compatible = "ti,twl4030-rtc";
          interrupts = <11>;
        };

        regulator-vaux1 {
          compatible = "ti,twl4030-vaux1";
          regulator-min-microvolt = <1000000>;
          regulator-max-microvolt = <3000000>;
          regulator-initial-mode = <0xe>;
        };

        vusb3v1: regulator-vusb3v1 {
          compatible = "ti,twl4030-vusb3v1";
        };

        watchdog {
          compatible = "ti,twl4030-wdt";
        };

        power {
          compatible = "ti,twl4030-power";
        };

        pwm {
          compatible = "ti,twl4030-pwm";
          #pwm-cells = <2>;
        };

        pwmled {
          compatible = "ti,twl4030-pwmled";
          #pwm-cells = <2>;
        };
      };
    };
...
