Commit 9ada9690 authored by Lee Jones's avatar Lee Jones
Browse files

Merge branches 'ib-mfd-iio-touchscreen-clk-5.16', 'ib-mfd-misc-regulator-5.16'...

Merge branches 'ib-mfd-iio-touchscreen-clk-5.16', 'ib-mfd-misc-regulator-5.16' and 'tb-mfd-from-regulator-5.16' into ibs-for-mfd-merged
Loading
Loading
Loading
Loading
+0 −49
Original line number Diff line number Diff line
Binding for Samsung S2M and S5M family clock generator block
============================================================

This is a part of device tree bindings for S2M and S5M family multi-function
devices.
More information can be found in bindings/mfd/sec-core.txt file.

The S2MPS11/13/15 and S5M8767 provide three(AP/CP/BT) buffered 32.768 kHz
outputs. The S2MPS14 provides two (AP/BT) buffered 32.768 KHz outputs.

To register these as clocks with common clock framework instantiate under
main device node a sub-node named "clocks".

It uses the common clock binding documented in:
 - Documentation/devicetree/bindings/clock/clock-bindings.txt


Required properties of the "clocks" sub-node:
 - #clock-cells: should be 1.
 - compatible: Should be one of: "samsung,s2mps11-clk", "samsung,s2mps13-clk",
               "samsung,s2mps14-clk", "samsung,s5m8767-clk"
   The S2MPS15 uses the same compatible as S2MPS13, as both provides similar
   clocks.


Each clock is assigned an identifier and client nodes use this identifier
to specify the clock which they consume.
    Clock               ID           Devices
    ----------------------------------------------------------
    32KhzAP		0            S2MPS11/13/14/15, S5M8767
    32KhzCP		1            S2MPS11/13/15, S5M8767
    32KhzBT		2            S2MPS11/13/14/15, S5M8767

Include dt-bindings/clock/samsung,s2mps11.h file to use preprocessor defines
in device tree sources.


Example:

	s2mps11_pmic@66 {
		compatible = "samsung,s2mps11-pmic";
		reg = <0x66>;

		s2m_osc: clocks {
			compatible = "samsung,s2mps11-clk";
			#clock-cells = <1>;
			clock-output-names = "xx", "yy", "zz";
		};
	};
+45 −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/clock/samsung,s2mps11.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S2M and S5M family clock generator block

maintainers:
  - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>

description: |
  This is a part of device tree bindings for S2M and S5M family of Power
  Management IC (PMIC).

  The S2MPS11/13/15 and S5M8767 provide three(AP/CP/BT) buffered 32.768 kHz
  outputs. The S2MPS14 provides two (AP/BT) buffered 32.768 KHz outputs.

  All available clocks are defined as preprocessor macros in
  dt-bindings/clock/samsung,s2mps11.h header.

  See also Documentation/devicetree/bindings/mfd/samsung,s2mps11.yaml for
  additional information and example.

properties:
  compatible:
    enum:
      - samsung,s2mps11-clk
      - samsung,s2mps13-clk # S2MPS13 and S2MPS15
      - samsung,s2mps14-clk
      - samsung,s5m8767-clk

  "#clock-cells":
    const: 1

  clock-output-names:
    minItems: 3
    maxItems: 3
    description: Names for AP, CP and BT clocks.

required:
  - compatible
  - "#clock-cells"

additionalProperties: false
+91 −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/mfd/samsung,s2mpa01.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S2MPA01 Power Management IC

maintainers:
  - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>

description: |
  This is a part of device tree bindings for S2M and S5M family of Power
  Management IC (PMIC).

  The Samsung S2MPA01 is a Power Management IC which includes voltage
  and current regulators, RTC, clock outputs and other sub-blocks.

properties:
  compatible:
    const: samsung,s2mpa01-pmic

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  regulators:
    $ref: ../regulator/samsung,s2mpa01.yaml
    description:
      List of child nodes that specify the regulators.

  wakeup-source: true

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

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

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

        pmic@66 {
            compatible = "samsung,s2mpa01-pmic";
            reg = <0x66>;

            regulators {
                ldo1_reg: LDO1 {
                    regulator-name = "VDD_ALIVE";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                };

                ldo2_reg: LDO2 {
                    regulator-name = "VDDQ_MMC2";
                    regulator-min-microvolt = <2800000>;
                    regulator-max-microvolt = <2800000>;
                    regulator-always-on;
                };

                // ...

                buck1_reg: BUCK1 {
                    regulator-name = "vdd_mif";
                    regulator-min-microvolt = <950000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-always-on;
                    regulator-boot-on;
                };

                buck2_reg: BUCK2 {
                    regulator-name = "vdd_arm";
                    regulator-min-microvolt = <950000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-ramp-delay = <50000>;
                };

                // ...
            };
        };
    };
+267 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
%YAML 1.2
---
$id: http://devicetree.org/schemas/mfd/samsung,s2mps11.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S2MPS11/13/14/15 and S2MPU02 Power Management IC

maintainers:
  - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>

description: |
  This is a part of device tree bindings for S2M and S5M family of Power
  Management IC (PMIC).

  The Samsung S2MPS11/13/14/15 and S2MPU02 is a family of Power Management IC
  which include voltage and current regulators, RTC, clock outputs and other
  sub-blocks.

properties:
  compatible:
    enum:
      - samsung,s2mps11-pmic
      - samsung,s2mps13-pmic
      - samsung,s2mps14-pmic
      - samsung,s2mps15-pmic
      - samsung,s2mpu02-pmic

  clocks:
    $ref: ../clock/samsung,s2mps11.yaml
    description:
      Child node describing clock provider.

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  regulators:
    type: object
    description:
      List of child nodes that specify the regulators.

  samsung,s2mps11-acokb-ground:
    description: |
      Indicates that ACOKB pin of S2MPS11 PMIC is connected to the ground so
      the PMIC must manually set PWRHOLD bit in CTRL1 register to turn off the
      power. Usually the ACOKB is pulled up to VBATT so when PWRHOLD pin goes
      low, the rising ACOKB will trigger power off.
    type: boolean

  samsung,s2mps11-wrstbi-ground:
    description: |
      Indicates that WRSTBI pin of PMIC is pulled down. When the system is
      suspended it will always go down thus triggerring unwanted buck warm
      reset (setting buck voltages to default values).
    type: boolean

  wakeup-source: true

required:
  - compatible
  - reg
  - regulators

additionalProperties: false

allOf:
  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mps11-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mps11.yaml
        samsung,s2mps11-wrstbi-ground: false

  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mps13-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mps13.yaml
        samsung,s2mps11-acokb-ground: false

  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mps14-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mps14.yaml
        samsung,s2mps11-acokb-ground: false
        samsung,s2mps11-wrstbi-ground: false

  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mps15-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mps15.yaml
        samsung,s2mps11-acokb-ground: false
        samsung,s2mps11-wrstbi-ground: false

  - if:
      properties:
        compatible:
          contains:
            const: samsung,s2mpu02-pmic
    then:
      properties:
        regulators:
          $ref: ../regulator/samsung,s2mpu02.yaml
        samsung,s2mps11-acokb-ground: false
        samsung,s2mps11-wrstbi-ground: false

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

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

        pmic@66 {
            compatible = "samsung,s2mps11-pmic";
            reg = <0x66>;

            interrupt-parent = <&gpx0>;
            interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&s2mps11_irq>;
            samsung,s2mps11-acokb-ground;
            wakeup-source;

            clocks {
                compatible = "samsung,s2mps11-clk";
                #clock-cells = <1>;
                clock-output-names = "s2mps11_ap", "s2mps11_cp", "s2mps11_bt";
            };

            regulators {
                LDO1 {
                    regulator-name = "vdd_ldo1";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-always-on;
                };

                LDO4 {
                    regulator-name = "vdd_adc";
                    regulator-min-microvolt = <1800000>;
                    regulator-max-microvolt = <1800000>;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                // ....

                BUCK1 {
                    regulator-name = "vdd_mif";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1300000>;
                    regulator-always-on;
                    regulator-boot-on;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                BUCK2 {
                    regulator-name = "vdd_arm";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1500000>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-coupled-with = <&buck3_reg>;
                    regulator-coupled-max-spread = <300000>;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                BUCK3 {
                    regulator-name = "vdd_int";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1400000>;
                    regulator-always-on;
                    regulator-boot-on;
                    regulator-coupled-with = <&buck2_reg>;
                    regulator-coupled-max-spread = <300000>;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                // ...
            };
        };
    };

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

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

        pmic@66 {
            compatible = "samsung,s2mps14-pmic";
            reg = <0x66>;

            interrupt-parent = <&gpx0>;
            interrupts = <7 IRQ_TYPE_LEVEL_LOW>;
            wakeup-source;

            clocks {
                compatible = "samsung,s2mps14-clk";
                #clock-cells = <1>;
                clock-output-names = "s2mps14_ap", "unused", "s2mps14_bt";
            };

            regulators {
                LDO1 {
                    regulator-name = "VLDO1_1.0V";
                    regulator-min-microvolt = <1000000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-always-on;

                    regulator-state-mem {
                        regulator-on-in-suspend;
                    };
                };

                // ...

                BUCK1 {
                    regulator-name = "VBUCK1_1.0V";
                    regulator-min-microvolt = <800000>;
                    regulator-max-microvolt = <1000000>;
                    regulator-always-on;

                    regulator-state-mem {
                        regulator-off-in-suspend;
                    };
                };

                // ...
            };
        };
    };
+307 −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/mfd/samsung,s5m8767.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Samsung S5M8767 Power Management IC

maintainers:
  - Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>

description: |
  This is a part of device tree bindings for S2M and S5M family of Power
  Management IC (PMIC).

  The Samsung S5M8767 is a Power Management IC which includes voltage
  and current regulators, RTC, clock outputs and other sub-blocks.

properties:
  compatible:
    const: samsung,s5m8767-pmic

  clocks:
    $ref: ../clock/samsung,s2mps11.yaml
    description:
      Child node describing clock provider.

  interrupts:
    maxItems: 1

  reg:
    maxItems: 1

  regulators:
    $ref: ../regulator/samsung,s5m8767.yaml
    description:
      List of child nodes that specify the regulators.

  s5m8767,pmic-buck2-dvs-voltage:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 8
    maxItems: 8
    description: |
      A set of 8 voltage values in micro-volt (uV) units for buck2 when
      changing voltage using gpio dvs.

  s5m8767,pmic-buck3-dvs-voltage:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 8
    maxItems: 8
    description: |
      A set of 8 voltage values in micro-volt (uV) units for buck3 when
      changing voltage using gpio dvs.

  s5m8767,pmic-buck4-dvs-voltage:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minItems: 8
    maxItems: 8
    description: |
      A set of 8 voltage values in micro-volt (uV) units for buck4 when
      changing voltage using gpio dvs.

  s5m8767,pmic-buck-ds-gpios:
    minItems: 3
    maxItems: 3
    description: |
      GPIO specifiers for three host gpio's used for selecting GPIO DVS lines.
      It is one-to-one mapped to dvs gpio lines.

  s5m8767,pmic-buck2-uses-gpio-dvs:
    type: boolean
    description: buck2 can be controlled by gpio dvs.

  s5m8767,pmic-buck3-uses-gpio-dvs:
    type: boolean
    description: buck3 can be controlled by gpio dvs.

  s5m8767,pmic-buck4-uses-gpio-dvs:
    type: boolean
    description: buck4 can be controlled by gpio dvs.

  s5m8767,pmic-buck-default-dvs-idx:
    $ref: /schemas/types.yaml#/definitions/uint32-array
    minimum: 0
    maximum: 7
    default: 0
    description: |
      Default voltage setting selected from the possible 8 options selectable
      by the dvs gpios. The value of this property should be between 0 and 7.
      If not specified or if out of range, the default value of this property
      is set to 0.

  s5m8767,pmic-buck-dvs-gpios:
    minItems: 3
    maxItems: 3
    description: |
      GPIO specifiers for three host gpio's used for dvs.

  vinb1-supply:
    description: Power supply for buck1
  vinb2-supply:
    description: Power supply for buck2
  vinb3-supply:
    description: Power supply for buck3
  vinb4-supply:
    description: Power supply for buck4
  vinb5-supply:
    description: Power supply for buck5
  vinb6-supply:
    description: Power supply for buck6
  vinb7-supply:
    description: Power supply for buck7
  vinb8-supply:
    description: Power supply for buck8
  vinb9-supply:
    description: Power supply for buck9

  vinl1-supply:
    description: Power supply for LDO3, LDO10, LDO26, LDO27
  vinl2-supply:
    description: Power supply for LDO13, LDO16, LDO25, LDO28
  vinl3-supply:
    description: Power supply for LDO11, LDO14
  vinl4-supply:
    description: Power supply for LDO4, LDO9
  vinl5-supply:
    description: Power supply for LDO12, LDO17, LDO19, LDO23
  vinl6-supply:
    description: Power supply for LDO18, LDO20, LDO21, LDO24
  vinl7-supply:
    description: Power supply for LDO5, LDO22
  vinl8-supply:
    description: Power supply for LDO1, LDO6, LDO7, LDO8, LDO15
  vinl9-supply:
    description: Power supply for LDO2

  wakeup-source: true

required:
  - compatible
  - reg
  - regulators
  - s5m8767,pmic-buck-ds-gpios

dependencies:
  s5m8767,pmic-buck2-dvs-voltage: [ 's5m8767,pmic-buck-dvs-gpios' ]
  s5m8767,pmic-buck3-dvs-voltage: [ 's5m8767,pmic-buck-dvs-gpios' ]
  s5m8767,pmic-buck4-dvs-voltage: [ 's5m8767,pmic-buck-dvs-gpios' ]
  s5m8767,pmic-buck2-uses-gpio-dvs: [ 's5m8767,pmic-buck-dvs-gpios', 's5m8767,pmic-buck2-dvs-voltage' ]
  s5m8767,pmic-buck3-uses-gpio-dvs: [ 's5m8767,pmic-buck-dvs-gpios', 's5m8767,pmic-buck3-dvs-voltage' ]
  s5m8767,pmic-buck4-uses-gpio-dvs: [ 's5m8767,pmic-buck-dvs-gpios', 's5m8767,pmic-buck4-dvs-voltage' ]

additionalProperties: false

allOf:
  - if:
      required:
        - s5m8767,pmic-buck2-uses-gpio-dvs
    then:
      properties:
        s5m8767,pmic-buck3-uses-gpio-dvs: false
        s5m8767,pmic-buck4-uses-gpio-dvs: false

  - if:
      required:
        - s5m8767,pmic-buck3-uses-gpio-dvs
    then:
      properties:
        s5m8767,pmic-buck2-uses-gpio-dvs: false
        s5m8767,pmic-buck4-uses-gpio-dvs: false

  - if:
      required:
        - s5m8767,pmic-buck4-uses-gpio-dvs
    then:
      properties:
        s5m8767,pmic-buck2-uses-gpio-dvs: false
        s5m8767,pmic-buck3-uses-gpio-dvs: false

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

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

        pmic@66 {
            compatible = "samsung,s5m8767-pmic";
            reg = <0x66>;

            interrupt-parent = <&gpx3>;
            interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&s5m8767_irq &s5m8767_dvs &s5m8767_ds>;
            wakeup-source;

            s5m8767,pmic-buck-default-dvs-idx = <3>;
            s5m8767,pmic-buck2-uses-gpio-dvs;

            s5m8767,pmic-buck-dvs-gpios = <&gpd1 0 GPIO_ACTIVE_LOW>,
                                          <&gpd1 1 GPIO_ACTIVE_LOW>,
                                          <&gpd1 2 GPIO_ACTIVE_LOW>;

            s5m8767,pmic-buck-ds-gpios = <&gpx2 3 GPIO_ACTIVE_LOW>,
                                         <&gpx2 4 GPIO_ACTIVE_LOW>,
                                         <&gpx2 5 GPIO_ACTIVE_LOW>;

            s5m8767,pmic-buck2-dvs-voltage = <1350000>, <1300000>,
                                             <1250000>, <1200000>,
                                             <1150000>, <1100000>,
                                             <1000000>, <950000>;

            s5m8767,pmic-buck3-dvs-voltage = <1100000>, <1100000>,
                                             <1100000>, <1100000>,
                                             <1000000>, <1000000>,
                                             <1000000>, <1000000>;

            s5m8767,pmic-buck4-dvs-voltage = <1200000>, <1200000>,
                                             <1200000>, <1200000>,
                                             <1200000>, <1200000>,
                                             <1200000>, <1200000>;

            clocks {
                compatible = "samsung,s5m8767-clk";
                #clock-cells = <1>;
                clock-output-names = "en32khz_ap", "en32khz_cp", "en32khz_bt";
            };

            regulators {
                LDO1 {
                    regulator-name = "VDD_ALIVE";
                    regulator-min-microvolt = <1100000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-always-on;
                    regulator-boot-on;
                    op_mode = <1>; /* Normal Mode */
                };

                // ...

                BUCK1 {
                    regulator-name = "VDD_MIF";
                    regulator-min-microvolt = <950000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-always-on;
                    regulator-boot-on;
                    op_mode = <1>; /* Normal Mode */
                };

                BUCK2 {
                    regulator-name = "VDD_ARM";
                    regulator-min-microvolt = <900000>;
                    regulator-max-microvolt = <1350000>;
                    regulator-always-on;
                    regulator-boot-on;
                    op_mode = <1>; /* Normal Mode */
                };

                // ...
            };
        };
    };

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

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

        pmic@66 {
            compatible = "samsung,s5m8767-pmic";
            reg = <0x66>;

            interrupt-parent = <&gpx3>;
            interrupts = <2 IRQ_TYPE_LEVEL_LOW>;
            pinctrl-names = "default";
            pinctrl-0 = <&s5m8767_irq &s5m8767_dvs &s5m8767_ds>;
            wakeup-source;

            s5m8767,pmic-buck-ds-gpios = <&gpx2 3 GPIO_ACTIVE_LOW>,
                                         <&gpx2 4 GPIO_ACTIVE_LOW>,
                                         <&gpx2 5 GPIO_ACTIVE_LOW>;

            clocks {
                compatible = "samsung,s5m8767-clk";
                #clock-cells = <1>;
                clock-output-names = "en32khz_ap", "en32khz_cp", "en32khz_bt";
            };

            regulators {
                LDO1 {
                    regulator-name = "VDD_ALIVE";
                    regulator-min-microvolt = <1100000>;
                    regulator-max-microvolt = <1100000>;
                    regulator-always-on;
                    regulator-boot-on;
                    op_mode = <1>; /* Normal Mode */
                };

                // ...
            };
        };
    };
Loading