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

Commit 46e1eb43 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mdss: Configure minimum voltage for CX power rail"

parents 27bf8acb 00f5a7d1
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -140,6 +140,7 @@ Bus Scaling Data:

Optional properties:
- batfet-supply :	Phandle for battery FET regulator device node.
- vdd-cx-supply :	Phandle for vdd CX regulator device node.
- qcom,vbif-settings :	Array with key-value pairs of constant VBIF register
			settings used to setup MDSS QoS for optimum performance.
			The key used should be offset from "vbif_phys" register
@@ -222,6 +223,7 @@ Example:
		interrupts = <0 72 0>;
		vdd-supply = <&gdsc_mdss>;
		batfet-supply = <&pm8941_chg_batif>;
		vdd-cx-supply = <&pm8841_s2_corner>;

		/* Bus Scale Settings */
		qcom,msm-bus,name = "mdss_mdp";
+1 −0
Original line number Diff line number Diff line
@@ -70,6 +70,7 @@ struct mdss_data_type {
	u32 mdp_rev;
	struct clk *mdp_clk[MDSS_MAX_CLK];
	struct regulator *fs;
	struct regulator *vdd_cx;
	bool batfet_required;
	struct regulator *batfet;
	u32 max_mdp_clk_rate;
+54 −0
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@
#include <mach/iommu_domains.h>
#include <mach/memory.h>
#include <mach/msm_memtypes.h>
#include <mach/rpm-regulator-smd.h>

#include "mdss.h"
#include "mdss_fb.h"
@@ -741,6 +742,14 @@ static int mdss_mdp_irq_clk_setup(struct mdss_data_type *mdata)
	}
	mdata->fs_ena = false;

	mdata->vdd_cx = devm_regulator_get(&mdata->pdev->dev,
				"vdd-cx");
	if (IS_ERR_OR_NULL(mdata->vdd_cx)) {
		pr_debug("unable to get CX reg. rc=%d\n",
					PTR_RET(mdata->vdd_cx));
		mdata->vdd_cx = NULL;
	}

	if (mdss_mdp_irq_clk_register(mdata, "bus_clk", MDSS_CLK_AXI) ||
	    mdss_mdp_irq_clk_register(mdata, "iface_clk", MDSS_CLK_AHB) ||
	    mdss_mdp_irq_clk_register(mdata, "core_clk_src",
@@ -2144,6 +2153,49 @@ int mdss_panel_get_boot_cfg(void)
	return rc;
}

static int mdss_mdp_cx_ctrl(struct mdss_data_type *mdata, int enable)
{
	int rc = 0;

	if (!mdata->vdd_cx)
		return rc;

	if (enable) {
		rc = regulator_set_voltage(
				mdata->vdd_cx,
				RPM_REGULATOR_CORNER_SVS_SOC,
				RPM_REGULATOR_CORNER_SUPER_TURBO);
		if (rc < 0)
			goto vreg_set_voltage_fail;

		pr_debug("Enabling CX power rail\n");
		rc = regulator_enable(mdata->vdd_cx);
		if (rc) {
			pr_err("Failed to enable regulator.\n");
			return rc;
		}
	} else {
		pr_debug("Disabling CX power rail\n");
		rc = regulator_disable(mdata->vdd_cx);
		if (rc) {
			pr_err("Failed to disable regulator.\n");
			return rc;
		}
		rc = regulator_set_voltage(
				mdata->vdd_cx,
				RPM_REGULATOR_CORNER_NONE,
				RPM_REGULATOR_CORNER_SUPER_TURBO);
		if (rc < 0)
			goto vreg_set_voltage_fail;
	}

	return rc;

vreg_set_voltage_fail:
	pr_err("Set vltg fail\n");
	return rc;
}

static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on)
{
	int ret;
@@ -2158,6 +2210,7 @@ static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on)
			if (ret)
				pr_err("Footswitch failed to enable\n");
			mdss_mdp_batfet_ctrl(mdata, true);
			mdss_mdp_cx_ctrl(mdata, true);
		}
		mdata->fs_ena = true;
	} else {
@@ -2166,6 +2219,7 @@ static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on)
		if (mdata->fs_ena) {
			regulator_disable(mdata->fs);
			mdss_mdp_batfet_ctrl(mdata, false);
			mdss_mdp_cx_ctrl(mdata, false);
		}
		mdata->fs_ena = false;
	}