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

Commit 3474e225 authored by Kyle Yan's avatar Kyle Yan
Browse files

soc: qcom: pil: Reorder votes for vdd_modem to be proxy voted



VDD_MODEM is used for modem Q6 block and will need to be controlled
by modem after it has come out of reset.

Change-Id: Ie3fe8d91206eab73d49790e516e3a99cde154045
Signed-off-by: default avatarKyle Yan <kyan@codeaurora.org>
parent 099e9fc7
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ Optional properties:
		      This may be a shared regulator that is already voted
		      on in the PIL proxy voting code (and also managed by the
		      modem on its own), hence we mark it as as optional.
- vdd_mss-uV:         Voltage to set for vdd_mss.
- vdd_pll-supply:     Reference to the regulator that supplies the PLL's rail.
- qcom,vdd_pll:       Voltage to be set for the PLL's rail.
- reg-names:          "cxrail_bhs_reg" - control register for modem power
+34 −10
Original line number Diff line number Diff line
@@ -124,13 +124,6 @@ static int pil_mss_power_up(struct q6v5_data *drv)
	int ret = 0;
	u32 regval;

	if (drv->vreg) {
		ret = regulator_enable(drv->vreg);
		if (ret)
			dev_err(drv->desc.dev, "Failed to enable modem regulator(rc:%d)\n",
									ret);
	}

	if (drv->cxrail_bhs) {
		regval = readl_relaxed(drv->cxrail_bhs);
		regval |= EXTERNAL_BHS_ON;
@@ -153,9 +146,6 @@ static int pil_mss_power_down(struct q6v5_data *drv)
		writel_relaxed(regval, drv->cxrail_bhs);
	}

	if (drv->vreg)
		return regulator_disable(drv->vreg);

	return 0;
}

@@ -456,7 +446,37 @@ int pil_mss_make_proxy_votes(struct pil_desc *pil)
		return ret;
	}

	if (drv->vreg) {
		ret = of_property_read_u32(pil->dev->of_node, "vdd_mss-uV",
								&uv);
		if (ret) {
			dev_err(pil->dev,
				"missing vdd_mss-uV property(rc:%d)\n", ret);
			goto out;
		}

		ret = regulator_set_voltage(drv->vreg, uv,
						INT_MAX);
		if (ret) {
			dev_err(pil->dev, "Failed to set vreg voltage(rc:%d)\n",
									ret);
			goto out;
		}

		ret = regulator_set_load(drv->vreg, 100000);
		if (ret < 0) {
			dev_err(pil->dev, "Failed to set vreg mode(rc:%d)\n",
									ret);
			goto out;
		}
	}

	ret = pil_q6v5_make_proxy_votes(pil);
	if (ret && drv->vreg) {
		regulator_disable(drv->vreg);
		regulator_set_voltage(drv->vreg, 0, INT_MAX);
	}
out:
	if (ret) {
		regulator_disable(drv->vreg_mx);
		regulator_set_voltage(drv->vreg_mx, 0, INT_MAX);
@@ -472,6 +492,10 @@ void pil_mss_remove_proxy_votes(struct pil_desc *pil)
	pil_q6v5_remove_proxy_votes(pil);
	regulator_disable(drv->vreg_mx);
	regulator_set_voltage(drv->vreg_mx, 0, INT_MAX);
	if (drv->vreg) {
		regulator_disable(drv->vreg);
		regulator_set_voltage(drv->vreg, 0, INT_MAX);
	}
}

static int pil_mss_mem_setup(struct pil_desc *pil,
+0 −2
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@

#include "peripheral-loader.h"

#define VDD_MSS_UV	1000000

struct modem_data {
	struct q6v5_data *q6;
	struct subsys_device *subsys;
+0 −14
Original line number Diff line number Diff line
@@ -35,7 +35,6 @@
#include "pil-q6v5.h"
#include "pil-msa.h"

#define MAX_VDD_MSS_UV		1150000
#define PROXY_TIMEOUT_MS	10000
#define MAX_SSR_REASON_LEN	256U
#define STOP_ACK_TIMEOUT_MS	1000
@@ -332,19 +331,6 @@ static int pil_mss_loadable_init(struct modem_data *drv,
		q6->vreg = devm_regulator_get(&pdev->dev, "vdd_mss");
		if (IS_ERR(q6->vreg))
			return PTR_ERR(q6->vreg);

		ret = regulator_set_voltage(q6->vreg, VDD_MSS_UV,
						MAX_VDD_MSS_UV);
		if (ret)
			dev_err(&pdev->dev, "Failed to set vreg voltage(rc:%d)\n",
									ret);

		ret = regulator_set_load(q6->vreg, 100000);
		if (ret < 0) {
			dev_err(&pdev->dev, "Failed to set vreg mode(rc:%d)\n",
									ret);
			return ret;
		}
	}

	q6->vreg_mx = devm_regulator_get(&pdev->dev, "vdd_mx");