Merge "sde: rotator: add support to configure bus scale vectors"

This commit is contained in:
Linux Build Service Account 2017-03-31 21:24:32 -07:00 committed by Gerrit - the friendly Code Review server
commit 13c1e33923
4 changed files with 42 additions and 7 deletions

View file

@ -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>;
};
};

View file

@ -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,9 +567,10 @@ 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;

View file

@ -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,

View file

@ -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,12 +2432,16 @@ static int sde_rotator_parse_dt_bus(struct sde_rot_mgr *mgr,
}
}
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++) {
rot_reg_bus_usecases[i].num_paths = 1;
rot_reg_bus_usecases[i].vectors =
&rot_reg_bus_vectors[i];
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++) {
rot_reg_bus_usecases[i].num_paths = 1;
rot_reg_bus_usecases[i].vectors =
&rot_reg_bus_vectors[i];
}
}
return ret;