* ams AS3722 Power management IC.

Required properties:
-------------------
- compatible: Must be "ams,as3722".
- reg: I2C device address.
- interrupt-controller: AS3722 has internal interrupt controller which takes the
  interrupt request from internal sub-blocks like RTC, regulators, GPIOs as well
  as external input.
- #interrupt-cells: Should be set to 2 for IRQ number and flags.
  The first cell is the IRQ number. IRQ numbers for different interrupt source
  of AS3722 are defined at dt-bindings/mfd/as3722.h
  The second cell is the flags, encoded as the trigger masks from binding document
	interrupts.txt, using dt-bindings/irq.

Optional properties:
--------------------
- ams,enable-internal-int-pullup: Boolean property, to enable internal pullup on
	interrupt pin. Missing this will disable internal pullup on INT pin.
- ams,enable-internal-i2c-pullup: Boolean property, to enable internal pullup on
	i2c scl/sda pins. Missing this will disable internal pullup on i2c
	scl/sda lines.

Optional submodule and their properties:
=======================================

Pinmux and GPIO:
===============
Device has 8 GPIO pins which can be configured as GPIO as well as the special IO
functions.

Please refer to pinctrl-bindings.txt in this directory for details of the
common pinctrl bindings used by client devices, including the meaning of the
phrase "pin configuration node".

Following are properties which is needed if GPIO and pinmux functionality
is required:
    Required properties:
    -------------------
	- gpio-controller: Marks the device node as a GPIO controller.
	- #gpio-cells: Number of GPIO cells. Refer to binding document
			gpio/gpio.txt

    Optional properties:
    --------------------
	Following properties are require if pin control setting is required
	at boot.
	- pinctrl-names: A pinctrl state named "default" be defined, using the
		bindings in pinctrl/pinctrl-binding.txt.
	- pinctrl[0...n]: Properties to contain the phandle that refer to
		different nodes of pin control settings. These nodes represents
		the pin control setting of state 0 to state n. Each of these
		nodes contains different subnodes to represents some desired
		configuration for a list of pins. This configuration can
		include the mux function to select on those pin(s), and
		various pin configuration parameters, such as pull-up,
		open drain.

		Each subnode have following properties:
		Required properties:
		    - pins: List of pins. Valid values of pins properties are:
				gpio0, gpio1, gpio2, gpio3, gpio4, gpio5,
				gpio6, gpio7

		Optional properties:
			function, bias-disable, bias-pull-up, bias-pull-down,
			bias-high-impedance, drive-open-drain.

			Valid values for function properties are:
				gpio, interrupt-out, gpio-in-interrupt,
				vsup-vbat-low-undebounce-out,
				vsup-vbat-low-debounce-out,
				voltage-in-standby, oc-pg-sd0, oc-pg-sd6,
				powergood-out, pwm-in, pwm-out, clk32k-out,
				watchdog-in, soft-reset-in

Regulators:
===========
Device has multiple DCDC and LDOs. The node "regulators" is require if regulator
functionality is needed.

Following are properties of regulator subnode.

    Optional properties:
    -------------------
	The input supply of regulators are the optional properties on the
	regulator node. The input supply of these regulators are provided
	through following properties:
		vsup-sd2-supply: Input supply for SD2.
		vsup-sd3-supply: Input supply for SD3.
		vsup-sd4-supply: Input supply for SD4.
		vsup-sd5-supply: Input supply for SD5.
		vin-ldo0-supply: Input supply for LDO0.
		vin-ldo1-6-supply: Input supply for LDO1 and LDO6.
		vin-ldo2-5-7-supply: Input supply for LDO2, LDO5 and LDO7.
		vin-ldo3-4-supply: Input supply for LDO3 and LDO4.
		vin-ldo9-10-supply: Input supply for LDO9 and LDO10.
		vin-ldo11-supply: Input supply for LDO11.

    Optional sub nodes for regulators:
    ---------------------------------
	The subnodes name is the name of regulator and it must be one of:
	sd[0-6], ldo[0-7], ldo[9-11]

	Each sub-node should contain the constraints and initialization
	information for that regulator. See regulator.txt for a description
	of standard properties for these sub-nodes.
	Additional optional custom properties  are listed below.
		ams,ext-control: External control of the rail. The option of
			this properties will tell which external input is
			controlling this rail. Valid values are 0, 1, 2 ad 3.
			0: There is no external control of this rail.
			1: Rail is controlled by ENABLE1 input pin.
			2: Rail is controlled by ENABLE2 input pin.
			3: Rail is controlled by ENABLE3 input pin.
			Missing this property on DT will be assume as no
			external control. The external control pin macros
			are defined @dt-bindings/mfd/as3722.h

		ams,enable-tracking: Enable tracking with SD1, only supported
			by LDO3.

Power-off:
=========
AS3722 supports the system power off by turning off all its rails.
The device node should have the following properties to enable this
functionality
ams,system-power-controller: Boolean, to enable the power off functionality
        through this device.

Example:
--------
#include <dt-bindings/mfd/as3722.h>
...
ams3722 {
	compatible = "ams,as3722";
	reg = <0x48>;

	ams,system-power-controller;

	interrupt-parent = <&intc>;
	interrupt-controller;
	#interrupt-cells = <2>;

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

	pinctrl-names = "default";
	pinctrl-0 = <&as3722_default>;

	as3722_default: pinmux {
			gpio0 {
				pins = "gpio0";
				function = "gpio";
				bias-pull-down;
			};

			gpio1_2_4_7 {
				pins = "gpio1", "gpio2", "gpio4", "gpio7";
				function = "gpio";
				bias-pull-up;
			};

			gpio5 {
				pins = "gpio5";
				function = "clk32k_out";
			};
	}

	regulators {
			vsup-sd2-supply = <...>;
			...

			sd0 {
				regulator-name = "vdd_cpu";
				regulator-min-microvolt = <700000>;
				regulator-max-microvolt = <1400000>;
				regulator-always-on;
				ams,ext-control = <2>;
			};

			sd1 {
				regulator-name = "vdd_core";
				regulator-min-microvolt = <700000>;
				regulator-max-microvolt = <1400000>;
				regulator-always-on;
				ams,ext-control = <1>;
			};

			sd2 {
				regulator-name = "vddio_ddr";
				regulator-min-microvolt = <1350000>;
				regulator-max-microvolt = <1350000>;
				regulator-always-on;
			};

			sd4 {
				regulator-name = "avdd-hdmi-pex";
				regulator-min-microvolt = <1050000>;
				regulator-max-microvolt = <1050000>;
				regulator-always-on;
			};

			sd5 {
				regulator-name = "vdd-1v8";
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
			};
			....
	};
};
