platform: msm_shared: program kvco code for 8996 pll
Calculate and program kvco code, accodring to the
vco clock rate.
Change-Id: I83afe7921ecbd827fb04015daf6f7c6854685506
diff --git a/platform/msm_shared/include/mipi_dsi_autopll_thulium.h b/platform/msm_shared/include/mipi_dsi_autopll_thulium.h
index bac4776..9467853 100644
--- a/platform/msm_shared/include/mipi_dsi_autopll_thulium.h
+++ b/platform/msm_shared/include/mipi_dsi_autopll_thulium.h
@@ -59,6 +59,7 @@
#define DSIPHY_PLL_KVCO_COUNT1 0x0448
#define DSIPHY_PLL_KVCO_COUNT2 0x044c
+#define DSIPHY_PLL_KVCO_CODE 0x0458
#define DSIPHY_PLL_VCO_DIV_REF1 0x046c
#define DSIPHY_PLL_VCO_DIV_REF2 0x0470
diff --git a/platform/msm_shared/mipi_dsi_autopll_thulium.c b/platform/msm_shared/mipi_dsi_autopll_thulium.c
index 706a5ce..8531730 100644
--- a/platform/msm_shared/mipi_dsi_autopll_thulium.c
+++ b/platform/msm_shared/mipi_dsi_autopll_thulium.c
@@ -133,6 +133,22 @@
return slop;
}
+static inline uint32_t mdss_mdp_pll_calc_kvco_code(uint32_t vco_clk_rate)
+{
+ uint32_t kvco_code;
+
+ if ((vco_clk_rate >= 2300000000ULL) &&
+ (vco_clk_rate <= 2600000000ULL))
+ kvco_code = 0x2f;
+ else if ((vco_clk_rate >= 1800000000ULL) &&
+ (vco_clk_rate < 2300000000ULL))
+ kvco_code = 0x2c;
+ else
+ kvco_code = 0x28;
+
+ return kvco_code;
+}
+
static void mdss_mdp_pll_calc_vco_count(struct dsi_pll_db *pdb,
uint32_t vco_clk_rate, uint32_t fref)
{
@@ -166,7 +182,7 @@
pdb->out.pll_resetsm_cntrl = 48;
pdb->out.pll_resetsm_cntrl2 = pdb->in.bandgap_timer << 3;
pdb->out.pll_resetsm_cntrl5 = pdb->in.pll_wakeup_timer;
- pdb->out.pll_kvco_code = 0;
+ pdb->out.pll_kvco_code = mdss_mdp_pll_calc_kvco_code(vco_clk_rate);
}
static void mdss_mdp_pll_assert_and_div_cfg(uint32_t phy_base,
@@ -291,6 +307,9 @@
data &= 0x03;
writel(data, phy_base + DSIPHY_PLL_KVCO_COUNT2);
+ data = pdb->out.pll_kvco_code;
+ writel(data, phy_base + DSIPHY_PLL_KVCO_CODE);
+
/*
* tx_band = pll_postdiv
* 0: divided by 1 <== for now