Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit db55c0b6 authored by Osvaldo Banuelos's avatar Osvaldo Banuelos Committed by Gerrit - the friendly Code Review server
Browse files

regulator: kryo-regulator: support LDO/APM config values from Device Tree



The LDO and APM configuration register initialization values vary per
chip revision. Support parsing these from Device Tree in order to program
the correct values according to hardware guidelines. Also, specify the
current known values for both msm8996v2 and msm899v3.

Change-Id: I6cdcc961578c2ea760a9b04a0128da4ff262684c
Signed-off-by: default avatarOsvaldo Banuelos <osvaldob@codeaurora.org>
parent 57235f8a
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -69,6 +69,16 @@ First Level Nodes
	Value type: <u32>
	Definition: The minimum configurable retention LDO voltage in microvolts.

- qcom,ldo-config-init
	Usage:      required
	Value type: <u32>
	Definition: Initialization value used to configure the Kryo LDO hardware.

- qcom,apm-config-init
	Usage:      required
	Value type: <u32>
	Definition: Initialization value used to configure the Kryo APM hardware.

- qcom,cluster-num
	Usage:      required
	Value type: <u32>
@@ -105,6 +115,8 @@ Example
		qcom,vref-functional-min-voltage = <299000>;
		qcom,vref-retention-step-voltage = <4554>;
		qcom,vref-retention-min-voltage = <332000>;
		qcom,ldo-config-init = <0xf1f0e471>;
		qcom,apm-config-init = <0x0>;
		qcom,cluster-num = <0>;
		kryo0_retention_vreg: regulator {
			regulator-name = "kryo0-retention";
@@ -128,6 +140,8 @@ Example
		qcom,vref-functional-min-voltage = <296000>;
		qcom,vref-retention-step-voltage = <4554>;
		qcom,vref-retention-min-voltage = <332000>;
		qcom,ldo-config-init = <0xf1f0e471>;
		qcom,apm-config-init = <0x0>;
		qcom,cluster-num = <1>;
		kryo1_retention_vreg: regulator {
			regulator-name = "kryo1-retention";
+4 −0
Original line number Diff line number Diff line
@@ -908,6 +908,8 @@
		qcom,vref-functional-min-voltage = <294800>;
		qcom,vref-retention-step-voltage = <4462>;
		qcom,vref-retention-min-voltage = <324950>;
		qcom,ldo-config-init = <0xf1f0e471>;
		qcom,apm-config-init = <0x0>;
		qcom,cluster-num = <0>;
		kryo0_retention_vreg: regulator {
			regulator-name = "kryo0-retention";
@@ -932,6 +934,8 @@
		qcom,vref-retention-step-voltage = <4462>;
		qcom,vref-retention-min-voltage = <324950>;
		qcom,cluster-num = <1>;
		qcom,ldo-config-init = <0xf1f0e471>;
		qcom,apm-config-init = <0x0>;
		kryo1_retention_vreg: regulator {
			regulator-name = "kryo1-retention";
			regulator-min-microvolt = <324950>;
+8 −0
Original line number Diff line number Diff line
@@ -298,6 +298,14 @@
		<0 130000 40000 85000 85000>;
};

&kryo0_vreg {
	qcom,ldo-config-init = <0x31f0e471>;
};

&kryo1_vreg {
	qcom,ldo-config-init = <0x31f0e471>;
};

/* GPU overrides */
&msm_gpu {
	/* Updated chip ID */
+18 −4
Original line number Diff line number Diff line
@@ -109,6 +109,8 @@ struct kryo_regulator {
	int				vref_ret_min_volt;
	int				vref_ret_max_volt;
	int				cluster_num;
	u32				ldo_config_init;
	u32				apm_config_init;
	u32				version;
	bool				vreg_en;
};
@@ -533,18 +535,16 @@ static void kryo_ldo_voltage_init(struct kryo_regulator *kvreg)
}

#define APC_PWR_GATE_DLY_INIT		0x00000101
#define APC_LDO_CFG_INIT		0x31f0e471
#define APC_APM_CFG_INIT		0x00000000
static int kryo_hw_init(struct kryo_regulator *kvreg)
{
	/* Set up VREF_LDO and VREF_RET */
	kryo_ldo_voltage_init(kvreg);

	/* Program LDO and APM configuration registers */
	writel_relaxed(APC_LDO_CFG_INIT, kvreg->reg_base + APC_LDO_CFG);
	writel_relaxed(kvreg->ldo_config_init, kvreg->reg_base + APC_LDO_CFG);

	kryo_masked_write(kvreg, APC_APM_CFG, APM_CFG_MASK,
			    APC_APM_CFG_INIT);
			  kvreg->apm_config_init);

	/* Configure power gate sequencer delay */
	kryo_masked_write(kvreg, APC_PWR_GATE_DLY, APC_PWR_GATE_DLY_MASK,
@@ -780,6 +780,20 @@ static int kryo_regulator_init_data(struct platform_device *pdev,
		return rc;
	}

	rc = of_property_read_u32(dev->of_node, "qcom,ldo-config-init",
				  &kvreg->ldo_config_init);
	if (rc < 0) {
		dev_err(dev, "qcom,ldo-config-init missing rc=%d\n", rc);
		return rc;
	}

	rc = of_property_read_u32(dev->of_node, "qcom,apm-config-init",
				  &kvreg->apm_config_init);
	if (rc < 0) {
		dev_err(dev, "qcom,apm-config-init missing rc=%d\n", rc);
		return rc;
	}

	rc = of_property_read_u32(dev->of_node, "qcom,cluster-num",
				  &kvreg->cluster_num);
	if (rc < 0) {