From 3520ec904c9c60cce57d24ed54686b4c15657dc1 Mon Sep 17 00:00:00 2001 From: Jayant Shekhar Date: Wed, 22 Mar 2017 17:51:44 +0530 Subject: [PATCH] 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: Jayant Shekhar --- .../devicetree/bindings/fb/mdss-rotator.txt | 14 ++++++++++++++ .../platform/msm/sde/rotator/sde_rotator_base.c | 17 ++++++++++++++++- .../platform/msm/sde/rotator/sde_rotator_base.h | 1 + .../platform/msm/sde/rotator/sde_rotator_core.c | 17 +++++++++++------ 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/Documentation/devicetree/bindings/fb/mdss-rotator.txt b/Documentation/devicetree/bindings/fb/mdss-rotator.txt index 5e077ac23819..d424201cd427 100644 --- a/Documentation/devicetree/bindings/fb/mdss-rotator.txt +++ b/Documentation/devicetree/bindings/fb/mdss-rotator.txt @@ -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>; + }; }; diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_base.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_base.c index 92b6e8ffa92e..76a4f1e39837 100644 --- a/drivers/media/platform/msm/sde/rotator/sde_rotator_base.c +++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_base.c @@ -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; diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_base.h b/drivers/media/platform/msm/sde/rotator/sde_rotator_base.h index 9ba0b7d93616..d68ff4fde306 100644 --- a/drivers/media/platform/msm/sde/rotator/sde_rotator_base.h +++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_base.h @@ -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, diff --git a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c index 1e85923c20b1..442e80e7100e 100644 --- a/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c +++ b/drivers/media/platform/msm/sde/rotator/sde_rotator_core.c @@ -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;