summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/clk/msm/mdss/mdss-hdmi-pll-8998.c91
1 files changed, 58 insertions, 33 deletions
diff --git a/drivers/clk/msm/mdss/mdss-hdmi-pll-8998.c b/drivers/clk/msm/mdss/mdss-hdmi-pll-8998.c
index c4215f30acce..9d3bf287b88b 100644
--- a/drivers/clk/msm/mdss/mdss-hdmi-pll-8998.c
+++ b/drivers/clk/msm/mdss/mdss-hdmi-pll-8998.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -141,6 +141,11 @@ struct hdmi_8998_reg_cfg {
u32 l3_pre_driver_1;
u32 l3_pre_driver_2;
+ u32 l0_res_code_offset;
+ u32 l1_res_code_offset;
+ u32 l2_res_code_offset;
+ u32 l3_res_code_offset;
+
bool debug;
};
@@ -394,14 +399,14 @@ static int hdmi_8998_config_phy(unsigned long rate,
if (ver == HDMI_VERSION_8998_3_3) {
if (bclk > high_freq_bit_clk_threshold) {
- cfg->l0_tx_drv_lvl = 0xA;
+ cfg->l0_tx_drv_lvl = 0xf;
cfg->l0_tx_emp_post1_lvl = 0x3;
- cfg->l1_tx_drv_lvl = 0xA;
- cfg->l1_tx_emp_post1_lvl = 0x3;
- cfg->l2_tx_drv_lvl = 0xA;
+ cfg->l1_tx_drv_lvl = 0xf;
+ cfg->l1_tx_emp_post1_lvl = 0x2;
+ cfg->l2_tx_drv_lvl = 0xf;
cfg->l2_tx_emp_post1_lvl = 0x3;
- cfg->l3_tx_drv_lvl = 0x8;
- cfg->l3_tx_emp_post1_lvl = 0x3;
+ cfg->l3_tx_drv_lvl = 0xf;
+ cfg->l3_tx_emp_post1_lvl = 0x0;
cfg->l0_pre_driver_1 = 0x0;
cfg->l0_pre_driver_2 = 0x1C;
cfg->l1_pre_driver_1 = 0x0;
@@ -410,15 +415,19 @@ static int hdmi_8998_config_phy(unsigned long rate,
cfg->l2_pre_driver_2 = 0x1C;
cfg->l3_pre_driver_1 = 0x0;
cfg->l3_pre_driver_2 = 0x0;
+ cfg->l0_res_code_offset = 0x3;
+ cfg->l1_res_code_offset = 0x0;
+ cfg->l2_res_code_offset = 0x0;
+ cfg->l3_res_code_offset = 0x3;
} else if (bclk > dig_freq_bit_clk_threshold) {
- cfg->l0_tx_drv_lvl = 0x9;
+ cfg->l0_tx_drv_lvl = 0xf;
cfg->l0_tx_emp_post1_lvl = 0x3;
- cfg->l1_tx_drv_lvl = 0x9;
+ cfg->l1_tx_drv_lvl = 0xf;
cfg->l1_tx_emp_post1_lvl = 0x3;
- cfg->l2_tx_drv_lvl = 0x9;
+ cfg->l2_tx_drv_lvl = 0xf;
cfg->l2_tx_emp_post1_lvl = 0x3;
- cfg->l3_tx_drv_lvl = 0x8;
- cfg->l3_tx_emp_post1_lvl = 0x3;
+ cfg->l3_tx_drv_lvl = 0xf;
+ cfg->l3_tx_emp_post1_lvl = 0x0;
cfg->l0_pre_driver_1 = 0x0;
cfg->l0_pre_driver_2 = 0x16;
cfg->l1_pre_driver_1 = 0x0;
@@ -426,16 +435,20 @@ static int hdmi_8998_config_phy(unsigned long rate,
cfg->l2_pre_driver_1 = 0x0;
cfg->l2_pre_driver_2 = 0x16;
cfg->l3_pre_driver_1 = 0x0;
- cfg->l3_pre_driver_2 = 0x0;
+ cfg->l3_pre_driver_2 = 0x18;
+ cfg->l0_res_code_offset = 0x3;
+ cfg->l1_res_code_offset = 0x0;
+ cfg->l2_res_code_offset = 0x0;
+ cfg->l3_res_code_offset = 0x0;
} else if (bclk > mid_freq_bit_clk_threshold) {
- cfg->l0_tx_drv_lvl = 0x9;
- cfg->l0_tx_emp_post1_lvl = 0x3;
- cfg->l1_tx_drv_lvl = 0x9;
- cfg->l1_tx_emp_post1_lvl = 0x3;
- cfg->l2_tx_drv_lvl = 0x9;
- cfg->l2_tx_emp_post1_lvl = 0x3;
- cfg->l3_tx_drv_lvl = 0x8;
- cfg->l3_tx_emp_post1_lvl = 0x3;
+ cfg->l0_tx_drv_lvl = 0xf;
+ cfg->l0_tx_emp_post1_lvl = 0x5;
+ cfg->l1_tx_drv_lvl = 0xf;
+ cfg->l1_tx_emp_post1_lvl = 0x5;
+ cfg->l2_tx_drv_lvl = 0xf;
+ cfg->l2_tx_emp_post1_lvl = 0x5;
+ cfg->l3_tx_drv_lvl = 0xf;
+ cfg->l3_tx_emp_post1_lvl = 0x0;
cfg->l0_pre_driver_1 = 0x0;
cfg->l0_pre_driver_2 = 0x0E;
cfg->l1_pre_driver_1 = 0x0;
@@ -443,24 +456,32 @@ static int hdmi_8998_config_phy(unsigned long rate,
cfg->l2_pre_driver_1 = 0x0;
cfg->l2_pre_driver_2 = 0x0E;
cfg->l3_pre_driver_1 = 0x0;
- cfg->l3_pre_driver_2 = 0x0;
+ cfg->l3_pre_driver_2 = 0x0E;
+ cfg->l0_res_code_offset = 0x0;
+ cfg->l1_res_code_offset = 0x0;
+ cfg->l2_res_code_offset = 0x0;
+ cfg->l3_res_code_offset = 0x0;
} else {
- cfg->l0_tx_drv_lvl = 0x0;
+ cfg->l0_tx_drv_lvl = 0x1;
cfg->l0_tx_emp_post1_lvl = 0x0;
- cfg->l1_tx_drv_lvl = 0x0;
+ cfg->l1_tx_drv_lvl = 0x1;
cfg->l1_tx_emp_post1_lvl = 0x0;
- cfg->l2_tx_drv_lvl = 0x0;
+ cfg->l2_tx_drv_lvl = 0x1;
cfg->l2_tx_emp_post1_lvl = 0x0;
cfg->l3_tx_drv_lvl = 0x0;
cfg->l3_tx_emp_post1_lvl = 0x0;
cfg->l0_pre_driver_1 = 0x0;
- cfg->l0_pre_driver_2 = 0x01;
+ cfg->l0_pre_driver_2 = 0x16;
cfg->l1_pre_driver_1 = 0x0;
- cfg->l1_pre_driver_2 = 0x01;
+ cfg->l1_pre_driver_2 = 0x16;
cfg->l2_pre_driver_1 = 0x0;
- cfg->l2_pre_driver_2 = 0x01;
+ cfg->l2_pre_driver_2 = 0x16;
cfg->l3_pre_driver_1 = 0x0;
- cfg->l3_pre_driver_2 = 0x0;
+ cfg->l3_pre_driver_2 = 0x18;
+ cfg->l0_res_code_offset = 0x0;
+ cfg->l1_res_code_offset = 0x0;
+ cfg->l2_res_code_offset = 0x0;
+ cfg->l3_res_code_offset = 0x0;
}
} else {
cfg->l0_tx_drv_lvl = 0xF;
@@ -479,6 +500,10 @@ static int hdmi_8998_config_phy(unsigned long rate,
cfg->l2_pre_driver_2 = 0x1E;
cfg->l3_pre_driver_1 = 0x0;
cfg->l3_pre_driver_2 = 0x10;
+ cfg->l0_res_code_offset = 0x3;
+ cfg->l1_res_code_offset = 0x0;
+ cfg->l2_res_code_offset = 0x0;
+ cfg->l3_res_code_offset = 0x3;
}
return rc;
@@ -564,10 +589,10 @@ static int hdmi_8998_pll_set_clk_rate(struct clk *c, unsigned long rate,
_W(pll, PHY_TX_PRE_DRIVER_2(2), cfg.l2_pre_driver_2);
_W(pll, PHY_TX_PRE_DRIVER_2(3), cfg.l3_pre_driver_2);
- _W(pll, PHY_TX_DRV_LVL_RES_CODE_OFFSET(0), 0x3);
- _W(pll, PHY_TX_DRV_LVL_RES_CODE_OFFSET(1), 0x0);
- _W(pll, PHY_TX_DRV_LVL_RES_CODE_OFFSET(2), 0x0);
- _W(pll, PHY_TX_DRV_LVL_RES_CODE_OFFSET(3), 0x3);
+ _W(pll, PHY_TX_DRV_LVL_RES_CODE_OFFSET(0), cfg.l0_res_code_offset);
+ _W(pll, PHY_TX_DRV_LVL_RES_CODE_OFFSET(1), cfg.l1_res_code_offset);
+ _W(pll, PHY_TX_DRV_LVL_RES_CODE_OFFSET(2), cfg.l2_res_code_offset);
+ _W(pll, PHY_TX_DRV_LVL_RES_CODE_OFFSET(3), cfg.l3_res_code_offset);
_W(phy, PHY_MODE, cfg.phy_mode);