disp: msm: dsi: Update dsi byte interface clock calculation

Update dsi byte interface clock as per hardware recommendation.
For Phy ver 2.0 and below: byte intf clk equals to byte clk.
For Phy ver 3.0 and above: byte intf clk equals to byte clk / 2.

Change-Id: Ic3af2e4348403aeacb2e1c73c4dc133db63a51a4
Signed-off-by: Ritesh Kumar <riteshk@codeaurora.org>
Signed-off-by: Lipsa Rout <lrout@codeaurora.org>
Signed-off-by: Satya Rama Aditya Pinapala <psraditya30@codeaurora.org>
Цей коміт міститься в:
Lipsa Rout
2019-12-03 19:02:41 +05:30
зафіксовано Satya Rama Aditya Pinapala
джерело b15ed9edec
коміт 5644d01f7a
7 змінених файлів з 71 додано та 18 видалено

Переглянути файл

@@ -3861,6 +3861,22 @@ static bool dsi_display_is_seamless_dfps_possible(
return true;
}
void dsi_display_update_byte_intf_div(struct dsi_display *display)
{
struct dsi_host_common_cfg *config;
struct dsi_display_ctrl *m_ctrl;
int phy_ver;
m_ctrl = &display->ctrl[display->cmd_master_idx];
config = &display->panel->host_config;
phy_ver = dsi_phy_get_version(m_ctrl->phy);
if (phy_ver <= DSI_PHY_VERSION_2_0)
config->byte_intf_clk_div = 1;
else
config->byte_intf_clk_div = 2;
}
static int dsi_display_update_dsi_bitrate(struct dsi_display *display,
u32 bit_clk_rate)
{
@@ -3883,8 +3899,9 @@ static int dsi_display_update_dsi_bitrate(struct dsi_display *display,
display_for_each_ctrl(i, display) {
struct dsi_display_ctrl *dsi_disp_ctrl = &display->ctrl[i];
struct dsi_ctrl *ctrl = dsi_disp_ctrl->ctrl;
u32 num_of_lanes = 0, bpp;
u64 bit_rate, pclk_rate, bit_rate_per_lane, byte_clk_rate;
u32 num_of_lanes = 0, bpp, byte_intf_clk_div;
u64 bit_rate, pclk_rate, bit_rate_per_lane, byte_clk_rate,
byte_intf_clk_rate;
struct dsi_host_common_cfg *host_cfg;
mutex_lock(&ctrl->ctrl_lock);
@@ -3914,12 +3931,18 @@ static int dsi_display_update_dsi_bitrate(struct dsi_display *display,
do_div(pclk_rate, bpp);
byte_clk_rate = bit_rate_per_lane;
do_div(byte_clk_rate, 8);
byte_intf_clk_rate = byte_clk_rate;
byte_intf_clk_div = host_cfg->byte_intf_clk_div;
do_div(byte_intf_clk_rate, byte_intf_clk_div);
DSI_DEBUG("bit_clk_rate = %llu, bit_clk_rate_per_lane = %llu\n",
bit_rate, bit_rate_per_lane);
DSI_DEBUG("byte_clk_rate = %llu, pclk_rate = %llu\n",
byte_clk_rate, pclk_rate);
DSI_DEBUG("byte_clk_rate = %llu, byte_intf_clk_rate = %llu\n",
byte_clk_rate, byte_intf_clk_rate);
DSI_DEBUG("pclk_rate = %llu\n", pclk_rate);
ctrl->clk_freq.byte_clk_rate = byte_clk_rate;
ctrl->clk_freq.byte_intf_clk_rate = byte_intf_clk_rate;
ctrl->clk_freq.pix_clk_rate = pclk_rate;
rc = dsi_clk_set_link_frequencies(display->dsi_clk_handle,
ctrl->clk_freq, ctrl->cell_index);
@@ -4013,7 +4036,8 @@ static int _dsi_display_dyn_update_clks(struct dsi_display *display,
if (!ctrl->ctrl)
continue;
rc = dsi_clk_set_byte_clk_rate(display->dsi_clk_handle,
ctrl->ctrl->clk_freq.byte_clk_rate, i);
ctrl->ctrl->clk_freq.byte_clk_rate,
ctrl->ctrl->clk_freq.byte_intf_clk_rate, i);
if (rc) {
DSI_ERR("failed to set byte rate for index:%d\n", i);
goto recover_byte_clk;
@@ -4076,7 +4100,8 @@ recover_byte_clk:
if (!ctrl->ctrl)
continue;
dsi_clk_set_byte_clk_rate(display->dsi_clk_handle,
bkp_freq->byte_clk_rate, i);
bkp_freq->byte_clk_rate,
bkp_freq->byte_intf_clk_rate, i);
}
exit:
@@ -4112,6 +4137,7 @@ static int dsi_display_dynamic_clk_switch_vid(struct dsi_display *display,
/* back up existing rates to handle failure case */
bkp_freq.byte_clk_rate = m_ctrl->ctrl->clk_freq.byte_clk_rate;
bkp_freq.byte_intf_clk_rate = m_ctrl->ctrl->clk_freq.byte_intf_clk_rate;
bkp_freq.pix_clk_rate = m_ctrl->ctrl->clk_freq.pix_clk_rate;
bkp_freq.esc_clk_rate = m_ctrl->ctrl->clk_freq.esc_clk_rate;
@@ -4939,6 +4965,7 @@ static int dsi_display_bind(struct device *dev,
}
}
dsi_display_update_byte_intf_div(display);
rc = dsi_display_mipi_host_init(display);
if (rc) {
DSI_ERR("[%s] failed to initialize mipi host, rc=%d\n",