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

Commit 3520ec90 authored by Jayant Shekhar's avatar Jayant Shekhar
Browse files

sde: rotator: add support to configure bus scale vectors



Add support to configure the bus scale vectors from sde rotator
device tree.

Change-Id: Ic9f65165f5e7490c36b7b97d293a05fc0091b7e6
Signed-off-by: default avatarJayant Shekhar <jshekhar@codeaurora.org>
parent 630218f7
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ Optional properties
				bandwidth compression (ubwc)
- qcom,mdss-has-downscale	Boolean property to indicate
				if the hw supports downscale
- qcom,sde-reg-bus:		Subnode to provide Bus scaling for register access for
				rotator

Example:
	mdss_rotator: qcom,mdss_rotator {
@@ -75,4 +77,16 @@ Example:
		vdd-supply = <&gdsc_mdss>;
		gdsc-mmagic-mdss-supply = <&gdsc_mmagic_mdss>;
		qcom,supply-names = "vdd", "gdsc-mmagic-mdss";
		qcom,sde-reg-bus {
		    /* Reg Bus Scale Settings */
		    qcom,msm-bus,name = "mdss_rot_reg";
		    qcom,msm-bus,num-cases = <4>;
		    qcom,msm-bus,num-paths = <1>;
		    qcom,msm-bus,active-only;
		    qcom,msm-bus,vectors-KBps =
			    <1 590 0 0>,
			    <1 590 0 76800>,
			    <1 590 0 160000>,
			    <1 590 0 320000>;
		};
	};
+16 −1
Original line number Diff line number Diff line
@@ -477,6 +477,7 @@ static int sde_mdp_parse_dt_misc(struct platform_device *pdev,
{
	int rc;
	u32 data;
	struct device_node *node;

	rc = of_property_read_u32(pdev->dev.of_node, "qcom,mdss-rot-block-size",
		&data);
@@ -505,6 +506,19 @@ static int sde_mdp_parse_dt_misc(struct platform_device *pdev,

	mdata->mdp_base = mdata->sde_io.base + SDE_MDP_OFFSET;

	node = of_get_child_by_name(pdev->dev.of_node,
				"qcom,sde-reg-bus");
	if (node) {
		mdata->reg_bus_pdata = msm_bus_pdata_from_node(pdev, node);
		if (IS_ERR_OR_NULL(mdata->reg_bus_pdata)) {
			SDEROT_DBG("bus_pdata reg_bus failed\n");
			mdata->reg_bus_pdata = NULL;
		}
	} else {
		SDEROT_DBG("sde-reg-bus not found\n");
		mdata->reg_bus_pdata = NULL;
	}

	return 0;
}

@@ -553,10 +567,11 @@ static int sde_mdp_bus_scale_register(struct sde_rot_data_type *mdata)
		if (!mdata->reg_bus_hdl) {
			/* Continue without reg_bus scaling */
			SDEROT_WARN("reg_bus_client register failed\n");
		} else
		} else {
			SDEROT_DBG("register reg_bus_hdl=%x\n",
					mdata->reg_bus_hdl);
		}
	}

	return 0;
}
+1 −0
Original line number Diff line number Diff line
@@ -195,6 +195,7 @@ struct sde_rot_data_type {
	struct ion_client *iclient;

	bool handoff_done;
	struct msm_bus_scale_pdata *reg_bus_pdata;
};

int sde_rotator_base_init(struct sde_rot_data_type **pmdata,
+11 −6
Original line number Diff line number Diff line
@@ -2419,6 +2419,7 @@ static int sde_rotator_parse_dt_bus(struct sde_rot_mgr *mgr,
{
	int ret = 0, i;
	int usecases;
	struct sde_rot_data_type *mdata = sde_rot_get_mdata();

	mgr->data_bus.bus_scale_pdata = msm_bus_cl_get_pdata(dev);
	if (IS_ERR_OR_NULL(mgr->data_bus.bus_scale_pdata)) {
@@ -2431,6 +2432,9 @@ static int sde_rotator_parse_dt_bus(struct sde_rot_mgr *mgr,
		}
	}

	if (mdata && mdata->reg_bus_pdata) {
		mgr->reg_bus.bus_scale_pdata = mdata->reg_bus_pdata;
	} else {
		mgr->reg_bus.bus_scale_pdata = &rot_reg_bus_scale_table;
		usecases = mgr->reg_bus.bus_scale_pdata->num_usecases;
		for (i = 0; i < usecases; i++) {
@@ -2438,6 +2442,7 @@ static int sde_rotator_parse_dt_bus(struct sde_rot_mgr *mgr,
			rot_reg_bus_usecases[i].vectors =
				&rot_reg_bus_vectors[i];
		}
	}

	return ret;
}