diff options
| author | Dhaval Patel <pdhaval@codeaurora.org> | 2015-04-27 10:37:21 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:41:47 -0700 |
| commit | ef1fdddf22ab04a08472aec746892e23ba60aa04 (patch) | |
| tree | b71ad852263350259bd2bcbd23c32a8b7a17d582 | |
| parent | 5223e55f1d8abb7cc8a8812b96a7b20de44ae2b5 (diff) | |
clk: msm: mdss: update pll ldo configuration for 8996 v2
msm8996 v2 pll needs different ldo configuration in DSI
pll compared to v1 target. This changes updates the DSI
pll driver to support this new configuration.
Change-Id: Idccfad2e388273a15b45a0e8bb822513fcbbe70e
Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org>
| -rw-r--r-- | Documentation/devicetree/bindings/fb/mdss-pll.txt | 3 | ||||
| -rw-r--r-- | drivers/clk/msm/mdss/mdss-dsi-pll-8996-util.c | 13 | ||||
| -rw-r--r-- | drivers/clk/msm/mdss/mdss-pll.c | 6 | ||||
| -rw-r--r-- | drivers/clk/msm/mdss/mdss-pll.h | 5 |
4 files changed, 22 insertions, 5 deletions
diff --git a/Documentation/devicetree/bindings/fb/mdss-pll.txt b/Documentation/devicetree/bindings/fb/mdss-pll.txt index d1749b0ba0ab..2549aeea81b0 100644 --- a/Documentation/devicetree/bindings/fb/mdss-pll.txt +++ b/Documentation/devicetree/bindings/fb/mdss-pll.txt @@ -11,7 +11,8 @@ Required properties: "qcom,mdss_dsi_pll_8994", "qcom,mdss_dsi_pll_8909", "qcom,mdss_hdmi_pll", "qcom,mdss_hdmi_pll_8994", "qcom,mdss_dsi_pll_8992", "qcom,mdss_hdmi_pll_8992", - "qcom,mdss_dsi_pll_8996", "qcom,mdss_hdmi_pll_8996" + "qcom,mdss_dsi_pll_8996", "qcom,mdss_hdmi_pll_8996", + "qcom,mdss_dsi_pll_8996_v2" - cell-index: Specifies the controller used - reg: offset and length of the register set for the device. - reg-names : names to refer to register sets related to this device diff --git a/drivers/clk/msm/mdss/mdss-dsi-pll-8996-util.c b/drivers/clk/msm/mdss/mdss-dsi-pll-8996-util.c index 7d812fc3e5bb..dbaafa7129db 100644 --- a/drivers/clk/msm/mdss/mdss-dsi-pll-8996-util.c +++ b/drivers/clk/msm/mdss/mdss-dsi-pll-8996-util.c @@ -24,6 +24,7 @@ #define DSI_PLL_POLL_MAX_READS 15 #define DSI_PLL_POLL_TIMEOUT_US 1000 +#define MSM8996_DSI_PLL_REVISION_2 2 int set_mdss_byte_mux_sel_8996(struct mux_clk *clk, int sel) { @@ -336,13 +337,15 @@ static void mdss_dsi_pll_8996_input_init(struct dsi_pll_db *pdb) } static void pll_8996_dec_frac_calc(struct dsi_pll_db *pdb, - s64 vco_clk_rate, s64 fref) + struct mdss_pll_resources *pll) { struct dsi_pll_input *pin = &pdb->in; struct dsi_pll_output *pout = &pdb->out; s64 multiplier = BIT(20); s64 dec_start_multiple, dec_start, pll_comp_val; s32 duration, div_frac_start; + s64 vco_clk_rate = pll->vco_current_rate; + s64 fref = pll->vco_ref_clk_rate; pr_debug("vco_clk_rate=%lld ref_clk_rate=%lld\n", vco_clk_rate, fref); @@ -371,7 +374,10 @@ static void pll_8996_dec_frac_calc(struct dsi_pll_db *pdb, pout->plllock_cmp = (u32)pll_comp_val; pout->pll_txclk_en = 1; - pout->cmn_ldo_cntrl = 0x1c; + if (pll->revision == MSM8996_DSI_PLL_REVISION_2) + pout->cmn_ldo_cntrl = 0x3c; + else + pout->cmn_ldo_cntrl = 0x1c; } static u32 pll_8996_kvco_slop(u32 vrate) @@ -608,8 +614,7 @@ int pll_vco_set_rate_8996(struct clk *c, unsigned long rate) mdss_dsi_pll_8996_input_init(pdb); - pll_8996_dec_frac_calc(pdb, pll->vco_current_rate, - pll->vco_ref_clk_rate); + pll_8996_dec_frac_calc(pdb, pll); pll_8996_calc_vco_count(pdb, pll->vco_current_rate, pll->vco_ref_clk_rate); diff --git a/drivers/clk/msm/mdss/mdss-pll.c b/drivers/clk/msm/mdss/mdss-pll.c index b17a093e98c7..2db57b780e2a 100644 --- a/drivers/clk/msm/mdss/mdss-pll.c +++ b/drivers/clk/msm/mdss/mdss-pll.c @@ -129,6 +129,11 @@ static int mdss_pll_resource_parse(struct platform_device *pdev, if (!strcmp(compatible_stream, "qcom,mdss_dsi_pll_8996")) { pll_res->pll_interface_type = MDSS_DSI_PLL_8996; pll_res->target_id = MDSS_PLL_TARGET_8996; + pll_res->revision = 1; + } else if (!strcmp(compatible_stream, "qcom,mdss_dsi_pll_8996_v2")) { + pll_res->pll_interface_type = MDSS_DSI_PLL_8996; + pll_res->target_id = MDSS_PLL_TARGET_8996; + pll_res->revision = 2; } else if (!strcmp(compatible_stream, "qcom,mdss_hdmi_pll_8996")) { pll_res->pll_interface_type = MDSS_HDMI_PLL_8996; } else { @@ -334,6 +339,7 @@ static int mdss_pll_remove(struct platform_device *pdev) static const struct of_device_id mdss_pll_dt_match[] = { {.compatible = "qcom,mdss_dsi_pll_8996"}, + {.compatible = "qcom,mdss_dsi_pll_8996_v2"}, {.compatible = "qcom,mdss_hdmi_pll_8996"}, {} }; diff --git a/drivers/clk/msm/mdss/mdss-pll.h b/drivers/clk/msm/mdss/mdss-pll.h index b87233a22e10..9d36aabe4285 100644 --- a/drivers/clk/msm/mdss/mdss-pll.h +++ b/drivers/clk/msm/mdss/mdss-pll.h @@ -128,6 +128,11 @@ struct mdss_pll_resources { struct mdss_pll_resources *slave; + /* + * target pll revision information + */ + int revision; + void *priv; }; |
