Loading Documentation/devicetree/bindings/fb/mdss-mdp.txt +2 −0 Original line number Diff line number Diff line Loading @@ -426,6 +426,8 @@ Fudge Factors: Fudge factors are used to boost demand for that a single pipe can support without underflow. - qcom,mdss-has-panic-ctrl: Boolean property to indicate if panic/robust signal control feature is available or not. - qcom,mdss-en-svs-high: Boolean property to indicate if this target needs to enable the svs high voltage level for CX rail. - qcom,mdss-pipe-vig-panic-ctrl-offsets: Array of panic/robust signal offsets corresponding to the respective VIG pipes. Number of signal offsets should match the Loading drivers/video/msm/mdss/mdss.h +1 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ struct mdss_data_type { struct regulator *vdd_cx; bool batfet_required; struct regulator *batfet; bool en_svs_high; u32 max_mdp_clk_rate; struct mdss_util_intf *mdss_util; Loading drivers/video/msm/mdss/mdss_mdp.c +61 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ #include <linux/msm-bus.h> #include <linux/msm-bus-board.h> #include <soc/qcom/scm.h> #include <soc/qcom/rpm-smd.h> #include "mdss.h" #include "mdss_fb.h" Loading Loading @@ -2702,6 +2703,10 @@ static int mdss_mdp_parse_dt_misc(struct platform_device *pdev) prop = of_find_property(pdev->dev.of_node, "batfet-supply", NULL); mdata->batfet_required = prop ? true : false; mdata->en_svs_high = of_property_read_bool(pdev->dev.of_node, "qcom,mdss-en-svs-high"); if (!mdata->en_svs_high) pr_debug("%s: svs_high is not enabled\n", __func__); rc = of_property_read_u32(pdev->dev.of_node, "qcom,mdss-highest-bank-bit", &(mdata->highest_bank_bit)); if (rc) Loading Loading @@ -3204,6 +3209,58 @@ exit: return; } #define RPM_MISC_REQ_TYPE 0x6373696d #define RPM_MISC_REQ_SVS_PLUS_KEY 0x2B737673 static void mdss_mdp_config_cx_voltage(struct mdss_data_type *mdata, int enable) { int ret = 0; static struct msm_rpm_kvp rpm_kvp; static uint8_t svs_en; if (!mdata->en_svs_high) return; if (!rpm_kvp.key) { rpm_kvp.key = RPM_MISC_REQ_SVS_PLUS_KEY; rpm_kvp.length = sizeof(unsigned); pr_debug("%s: Initialized rpm_kvp structure\n", __func__); } if (enable) { svs_en = 1; rpm_kvp.data = &svs_en; pr_debug("%s: voting for svs high\n", __func__); ret = msm_rpm_send_message(MSM_RPM_CTX_ACTIVE_SET, RPM_MISC_REQ_TYPE, 0, &rpm_kvp, 1); if (ret) pr_err("vote for active_set svs high failed: %d\n", ret); ret = msm_rpm_send_message(MSM_RPM_CTX_SLEEP_SET, RPM_MISC_REQ_TYPE, 0, &rpm_kvp, 1); if (ret) pr_err("vote for sleep_set svs high failed: %d\n", ret); } else { svs_en = 0; rpm_kvp.data = &svs_en; pr_debug("%s: Removing vote for svs high\n", __func__); ret = msm_rpm_send_message(MSM_RPM_CTX_ACTIVE_SET, RPM_MISC_REQ_TYPE, 0, &rpm_kvp, 1); if (ret) pr_err("Remove vote:active_set svs high failed: %d\n", ret); ret = msm_rpm_send_message(MSM_RPM_CTX_SLEEP_SET, RPM_MISC_REQ_TYPE, 0, &rpm_kvp, 1); if (ret) pr_err("Remove vote:sleep_set svs high failed: %d\n", ret); } } static int mdss_mdp_cx_ctrl(struct mdss_data_type *mdata, int enable) { Loading Loading @@ -3277,6 +3334,8 @@ static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on) mdss_mdp_batfet_ctrl(mdata, true); } } if (mdata->en_svs_high) mdss_mdp_config_cx_voltage(mdata, true); mdata->fs_ena = true; } else { if (mdata->fs_ena) { Loading @@ -3294,6 +3353,8 @@ static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on) mdss_mdp_cx_ctrl(mdata, false); mdss_mdp_batfet_ctrl(mdata, false); } if (mdata->en_svs_high) mdss_mdp_config_cx_voltage(mdata, false); regulator_disable(mdata->fs); } mdata->fs_ena = false; Loading Loading
Documentation/devicetree/bindings/fb/mdss-mdp.txt +2 −0 Original line number Diff line number Diff line Loading @@ -426,6 +426,8 @@ Fudge Factors: Fudge factors are used to boost demand for that a single pipe can support without underflow. - qcom,mdss-has-panic-ctrl: Boolean property to indicate if panic/robust signal control feature is available or not. - qcom,mdss-en-svs-high: Boolean property to indicate if this target needs to enable the svs high voltage level for CX rail. - qcom,mdss-pipe-vig-panic-ctrl-offsets: Array of panic/robust signal offsets corresponding to the respective VIG pipes. Number of signal offsets should match the Loading
drivers/video/msm/mdss/mdss.h +1 −0 Original line number Diff line number Diff line Loading @@ -132,6 +132,7 @@ struct mdss_data_type { struct regulator *vdd_cx; bool batfet_required; struct regulator *batfet; bool en_svs_high; u32 max_mdp_clk_rate; struct mdss_util_intf *mdss_util; Loading
drivers/video/msm/mdss/mdss_mdp.c +61 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ #include <linux/msm-bus.h> #include <linux/msm-bus-board.h> #include <soc/qcom/scm.h> #include <soc/qcom/rpm-smd.h> #include "mdss.h" #include "mdss_fb.h" Loading Loading @@ -2702,6 +2703,10 @@ static int mdss_mdp_parse_dt_misc(struct platform_device *pdev) prop = of_find_property(pdev->dev.of_node, "batfet-supply", NULL); mdata->batfet_required = prop ? true : false; mdata->en_svs_high = of_property_read_bool(pdev->dev.of_node, "qcom,mdss-en-svs-high"); if (!mdata->en_svs_high) pr_debug("%s: svs_high is not enabled\n", __func__); rc = of_property_read_u32(pdev->dev.of_node, "qcom,mdss-highest-bank-bit", &(mdata->highest_bank_bit)); if (rc) Loading Loading @@ -3204,6 +3209,58 @@ exit: return; } #define RPM_MISC_REQ_TYPE 0x6373696d #define RPM_MISC_REQ_SVS_PLUS_KEY 0x2B737673 static void mdss_mdp_config_cx_voltage(struct mdss_data_type *mdata, int enable) { int ret = 0; static struct msm_rpm_kvp rpm_kvp; static uint8_t svs_en; if (!mdata->en_svs_high) return; if (!rpm_kvp.key) { rpm_kvp.key = RPM_MISC_REQ_SVS_PLUS_KEY; rpm_kvp.length = sizeof(unsigned); pr_debug("%s: Initialized rpm_kvp structure\n", __func__); } if (enable) { svs_en = 1; rpm_kvp.data = &svs_en; pr_debug("%s: voting for svs high\n", __func__); ret = msm_rpm_send_message(MSM_RPM_CTX_ACTIVE_SET, RPM_MISC_REQ_TYPE, 0, &rpm_kvp, 1); if (ret) pr_err("vote for active_set svs high failed: %d\n", ret); ret = msm_rpm_send_message(MSM_RPM_CTX_SLEEP_SET, RPM_MISC_REQ_TYPE, 0, &rpm_kvp, 1); if (ret) pr_err("vote for sleep_set svs high failed: %d\n", ret); } else { svs_en = 0; rpm_kvp.data = &svs_en; pr_debug("%s: Removing vote for svs high\n", __func__); ret = msm_rpm_send_message(MSM_RPM_CTX_ACTIVE_SET, RPM_MISC_REQ_TYPE, 0, &rpm_kvp, 1); if (ret) pr_err("Remove vote:active_set svs high failed: %d\n", ret); ret = msm_rpm_send_message(MSM_RPM_CTX_SLEEP_SET, RPM_MISC_REQ_TYPE, 0, &rpm_kvp, 1); if (ret) pr_err("Remove vote:sleep_set svs high failed: %d\n", ret); } } static int mdss_mdp_cx_ctrl(struct mdss_data_type *mdata, int enable) { Loading Loading @@ -3277,6 +3334,8 @@ static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on) mdss_mdp_batfet_ctrl(mdata, true); } } if (mdata->en_svs_high) mdss_mdp_config_cx_voltage(mdata, true); mdata->fs_ena = true; } else { if (mdata->fs_ena) { Loading @@ -3294,6 +3353,8 @@ static void mdss_mdp_footswitch_ctrl(struct mdss_data_type *mdata, int on) mdss_mdp_cx_ctrl(mdata, false); mdss_mdp_batfet_ctrl(mdata, false); } if (mdata->en_svs_high) mdss_mdp_config_cx_voltage(mdata, false); regulator_disable(mdata->fs); } mdata->fs_ena = false; Loading