From b524392a8dcb9b5b1239cdb06fe7b947d2dea030 Mon Sep 17 00:00:00 2001 From: Jishnu Prakash Date: Fri, 23 Jun 2023 20:46:20 +0530 Subject: [PATCH] dt-bindings: regulator: add rpmh-regulator bindings Add rpmh-regulator device bindings for PMIC regulator management via the RPMh hardware block on Qualcomm Technologies, Inc. SoCs. Change-Id: Ic31ca6eae36c51a4bff9fa740913e425e64d08b1 Signed-off-by: Jishnu Prakash --- bindings/regulator/rpmh-regulator.yaml | 329 +++++++++++++++++++++++++ 1 file changed, 329 insertions(+) create mode 100644 bindings/regulator/rpmh-regulator.yaml diff --git a/bindings/regulator/rpmh-regulator.yaml b/bindings/regulator/rpmh-regulator.yaml new file mode 100644 index 00000000..0f64eac5 --- /dev/null +++ b/bindings/regulator/rpmh-regulator.yaml @@ -0,0 +1,329 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/regulator/rpmh-regulator.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm Technologies, Inc. RPMh Regulators + +maintainers: + - David Collins + +description: | + rpmh-regulator devices support PMIC regulator management via the Voltage + Regulator Manager (VRM), Aggregated Resource Controller (ARC) and + Oscillator Buffer (XOB) RPMh accelerators. The APPS processor communicates + with these hardware blocks via a Resource State Coordinator (RSC) using command + packets. The VRM allows changing four parameters for a given regulator: enable state, + output voltage, operating mode and minimum headroom voltage. The ARC allows changing + only a single parameter for a given regulator: its operating level. This + operating level is fed into CPR which then decides upon a final explicit voltage + for the regulator. The XOB allows changing only a single parameter for a given + regulator: its enable state. Despite its name, the XOB is capable of controlling + the enable state of any PMIC peripheral. It is used for clock buffers, low-voltage + switches, and LDO/SMPS regulators which have a fixed voltage and mode. + + Required Node Structure: + + RPMh regulators must be described in two levels of device nodes. The first + level describes the interface with RPMh (resource) and must reside within an + RPMh device node. The second level describes properties of one regulator + framework interface (of potentially many) for the regulator resource. + +properties: + compatible: + enum: + - qcom,rpmh-vrm-regulator + - qcom,rpmh-arc-regulator + - qcom,rpmh-xob-regulator + + qcom,resource-name: + description: | + RPMh resource name which encodes the specific instance + of a given type of regulator (LDO, SMPS, VS, etc) within + a particular PMIC found in the system. This name must match + to one that is defined by the bootloader. + $ref: /schemas/types.yaml#/definitions/string + + qcom,regulator-type: + description: | + The physical type of the regulator including the PMIC family. + This is used for mode control. + enum: + - pmic4-ldo + - pmic4-hfsmps + - pmic4-ftsmps + - pmic4-bob + - pmic5-ldo + - pmic5-hfsmps + - pmic5-ftsmps + - pmic5-bob + + qcom,always-wait-for-ack: + description: | + Boolean flag which indicates that the application processor + must wait for an ACK or a NACK from RPMh for every request + sent for this regulator including those which are for a + strictly lower power state. + $ref: /schemas/types.yaml#/definitions/flag + + qcom,supported-modes: + description: | + A list of integers specifying the PMIC regulator modes + supported by this regulator. Supported values are + RPMH_REGULATOR_MODE_* (i.e. 0 to 4). Elements must be + specified in order from lowest to highest. + $ref: /schemas/types.yaml#/definitions/uint32-array + minItems: 1 + maxItems: 5 + items: + minimum: 0 + maximum: 4 + + qcom,mode-threshold-currents: + description: | + A list of integers specifying minimum allowed current in + microamps for each of the modes listed in qcom,supported-modes. + The first element should always be 0. Elements must be specified + in order from lowest to highest. + $ref: /schemas/types.yaml#/definitions/uint32-array + minItems: 1 + maxItems: 5 + + qcom,send-defaults: + description: | + Boolean flag which indicates that the initial parameter + values should be sent to RPMh before consumers make their + own requests. If this flag is not specified, then initial + parameters values will only be sent after some consumer + makes a request. + $ref: /schemas/types.yaml#/definitions/flag + + qcom,disable-mode: + description: | + Specifies the mode to set for a VRM regulator when it gets disabled. + The actual previously voted mode will be restored when the regulator + is enabled. + Supported values are RPMH_REGULATOR_MODE_* (i.e. 0 to 4). + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 4 + +additionalProperties: false + +required: + - compatible + - qcom,resource-name + +patternProperties: + "^regulator.*$": + type: object + $ref: "regulator.yaml#" + description: regulator client voting interface node(s). + + properties: + regulator-name: + description: Specifies the name for this RPMh regulator. + + regulator-min-microvolt: + description: | + For VRM resources, this is the minimum supported voltage in + microvolts. For ARC resources, this is the minimum + supported voltage level from RPMH_REGULATOR_LEVEL_*. + + regulator-max-microvolt: + description: | + For VRM resources, this is the maximum supported voltage in + microvolts. For ARC resources, this is the maximum + supported voltage level from RPMH_REGULATOR_LEVEL_*. + + regulator-enable-ramp-delay: + description: | + For VRM and XOB resources, the time in microseconds to delay + after enabling a regulator. + + qcom,set: + description: | + Specifies which sets that requests made with this regulator + interface should be sent to. Regulator requests sent in the + active set take effect immediately. Requests sent in the + sleep set take effect when the Apps processor transitions + into RPMh assisted power collapse. + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 1 + maximum: 3 + + qcom,init-enable: + description: | + Specifies the initial enable state to request for a VRM + regulator: 0 = disabled and 1 = enabled. + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 1 + + qcom,init-voltage: + description: | + Specifies the initial voltage in microvolts to request for a + VRM regulator. + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 8191000 + + qcom,init-mode: + description: | + Specifies the initial mode to request for a VRM regulator. + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 4 + + qcom,init-headroom-voltage: + description: | + Specifies the initial headroom voltage in microvolts to + request for a VRM regulator. RPMh ensures that the parent + of this regulator outputs a voltage high enough to satisfy + the requested headroom. + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 511000 + + qcom,init-voltage-level: + description: | + Specifies the initial voltage level to request for an ARC + regulator. + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 0 + maximum: 65535 + + qcom,min-dropout-voltage: + description: | + Specifies the minimum voltage in microvolts that the parent + supply regulator must output above the output of this + regulator. It is only meaningful if the property + -parent-supply has been specified in the + first level node. + $ref: /schemas/types.yaml#/definitions/uint32 + + qcom,min-dropout-voltage-level: + description: | + Specifies the minimum voltage level difference that the + parent supply regulator must output above the output of this + regulator. It is only meaningful if the property + -parent-supply has been specified in the + first level node. + $ref: /schemas/types.yaml#/definitions/uint32 + + patternProperties: + "^.*-parent-supply$": + description: | + phandle of the parent supply regulator of one of the + regulators for this RPMh resource. The property name is defined by + the value specified for the regulator-name property. + + additionalProperties: false + + required: + - regulator-name + - qcom,set + +examples: + - | + #include + + rpmh-regulator-cxlvl { + compatible = "qcom,rpmh-arc-regulator"; + qcom,resource-name = "cx.lvl"; + qcom,send-defaults; + pm8998_s9_level: regulator-s9-level { + regulator-name = "pm8998_s9_level"; + qcom,set = ; + regulator-min-microvolt = + ; + regulator-max-microvolt = ; + qcom,init-voltage-level = ; + }; + + pm8998_s9_level_ao: regulator-s9-level-ao { + regulator-name = "pm8998_s9_level_ao"; + qcom,set = ; + regulator-min-microvolt = + ; + regulator-max-microvolt = ; + }; + }; + + rpmh-regulator-smpa2 { + compatible = "qcom,rpmh-vrm-regulator"; + qcom,resource-name = "smpa2"; + qcom,regulator-type = "pmic4-hfsmps"; + qcom,supported-modes = + ; + qcom,mode-threshold-currents = <0 2000000>; + + pm8998_s2: regulator-s2 { + regulator-name = "pm8998_s2"; + qcom,set = ; + regulator-min-microvolt = <1100000>; + regulator-max-microvolt = <1200000>; + regulator-enable-ramp-delay = <200>; + qcom,init-mode = ; + qcom,init-voltage = <1150000>; + }; + }; + + rpmh-regulator-ldoa4 { + compatible = "qcom,rpmh-vrm-regulator"; + qcom,resource-name = "ldoa4"; + qcom,regulator-type = "pmic4-ldo"; + pm8998_l4: regulator-l4 { + regulator-name = "pm8998_l4"; + qcom,set = ; + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1000000>; + qcom,init-voltage = <1000000>; + }; + }; + + rpmh-regulator-ldoc1 { + compatible = "qcom,rpmh-xob-regulator"; + qcom,resource-name = "ldoc1"; + pm8150l_l1: regulator-pm8150l-l1 { + regulator-name = "pm8150l_l1"; + qcom,set = ; + regulator-min-microvolt = <1800000>; + regulator-max-microvolt = <1800000>; + }; + }; + + - | + #include + + rpmh-regulator-ldoa3-disp { + compatible = "qcom,rpmh-vrm-regulator"; + qcom,resource-name = "ldoa3"; + qcom,regulator-type = "pmic4-ldo"; + qcom,supported-modes = + ; + qcom,mode-threshold-currents = <0 10000>; + qcom,always-wait-for-ack; + + pm8998_l3_disp_ao: regulator-l3-ao { + regulator-name = "pm8998_l3_disp_ao"; + qcom,set = ; + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1200000>; + qcom,init-voltage = <1000000>; + qcom,init-headroom-voltage = <60000>; + }; + + pm8998_l3_disp_so: regulator-l3-so { + regulator-name = "pm8998_l3_disp_so"; + qcom,set = ; + regulator-min-microvolt = <1000000>; + regulator-max-microvolt = <1200000>; + qcom,init-mode = ; + qcom,init-voltage = <1000000>; + qcom,init-enable = <0>; + }; + };