disp: msm: dsi: update PHY configuration to support cphy
Add support to read cphy boolean flag from panel dtsi and configure DSI PHY registers accordingly. Update the bit/byte clock calculation according to cphy specifications. Update clock parents so that the relevant divider blocks are configured to support cphy. Change-Id: Iaca61eec01a488657b086f59910c52f8c79e26a4 Signed-off-by: Chandan Uddaraju <chandanu@codeaurora.org> Signed-off-by: Yuan Zhao <yzhao@codeaurora.org>
This commit is contained in:

کامیت شده توسط
Gerrit - the friendly Code Review server

والد
43069ad44a
کامیت
5139cad2d4
@@ -865,6 +865,7 @@ static int dsi_ctrl_update_link_freqs(struct dsi_ctrl *dsi_ctrl,
|
||||
{
|
||||
int rc = 0;
|
||||
u32 num_of_lanes = 0;
|
||||
u32 bits_per_symbol = 16, num_of_symbols = 7; /* For Cphy */
|
||||
u32 bpp, frame_time_us, byte_intf_clk_div;
|
||||
u64 h_period, v_period, bit_rate, pclk_rate, bit_rate_per_lane,
|
||||
byte_clk_rate, byte_intf_clk_rate;
|
||||
@@ -895,6 +896,10 @@ static int dsi_ctrl_update_link_freqs(struct dsi_ctrl *dsi_ctrl,
|
||||
|
||||
if (config->bit_clk_rate_hz_override != 0) {
|
||||
bit_rate = config->bit_clk_rate_hz_override * num_of_lanes;
|
||||
if (host_cfg->phy_type == DSI_PHY_TYPE_CPHY) {
|
||||
bit_rate *= bits_per_symbol;
|
||||
do_div(bit_rate, num_of_symbols);
|
||||
}
|
||||
} else if (config->panel_mode == DSI_OP_CMD_MODE) {
|
||||
/* Calculate the bit rate needed to match dsi transfer time */
|
||||
bit_rate = min_dsi_clk_hz * frame_time_us;
|
||||
@@ -906,16 +911,29 @@ static int dsi_ctrl_update_link_freqs(struct dsi_ctrl *dsi_ctrl,
|
||||
bit_rate = h_period * v_period * timing->refresh_rate * bpp;
|
||||
}
|
||||
|
||||
bit_rate_per_lane = bit_rate;
|
||||
do_div(bit_rate_per_lane, num_of_lanes);
|
||||
|
||||
pclk_rate = bit_rate;
|
||||
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);
|
||||
|
||||
if (host_cfg->phy_type == DSI_PHY_TYPE_DPHY) {
|
||||
bit_rate_per_lane = bit_rate;
|
||||
do_div(bit_rate_per_lane, num_of_lanes);
|
||||
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);
|
||||
config->bit_clk_rate_hz = byte_clk_rate * 8;
|
||||
} else {
|
||||
do_div(bit_rate, bits_per_symbol);
|
||||
bit_rate *= num_of_symbols;
|
||||
bit_rate_per_lane = bit_rate;
|
||||
do_div(bit_rate_per_lane, num_of_lanes);
|
||||
byte_clk_rate = bit_rate_per_lane;
|
||||
do_div(byte_clk_rate, 7);
|
||||
/* For CPHY, byte_intf_clk is same as byte_clk */
|
||||
byte_intf_clk_rate = byte_clk_rate;
|
||||
config->bit_clk_rate_hz = byte_clk_rate * 7;
|
||||
}
|
||||
DSI_CTRL_DEBUG(dsi_ctrl, "bit_clk_rate = %llu, bit_clk_rate_per_lane = %llu\n",
|
||||
bit_rate, bit_rate_per_lane);
|
||||
DSI_CTRL_DEBUG(dsi_ctrl, "byte_clk_rate = %llu, byte_intf_clk = %llu\n",
|
||||
@@ -923,10 +941,9 @@ static int dsi_ctrl_update_link_freqs(struct dsi_ctrl *dsi_ctrl,
|
||||
DSI_CTRL_DEBUG(dsi_ctrl, "pclk_rate = %llu\n", pclk_rate);
|
||||
|
||||
dsi_ctrl->clk_freq.byte_clk_rate = byte_clk_rate;
|
||||
dsi_ctrl->clk_freq.byte_intf_clk_rate = byte_intf_clk_rate;
|
||||
dsi_ctrl->clk_freq.pix_clk_rate = pclk_rate;
|
||||
dsi_ctrl->clk_freq.esc_clk_rate = config->esc_clk_rate_hz;
|
||||
dsi_ctrl->clk_freq.byte_intf_clk_rate = byte_intf_clk_rate;
|
||||
config->bit_clk_rate_hz = dsi_ctrl->clk_freq.byte_clk_rate * 8;
|
||||
|
||||
rc = dsi_clk_set_link_frequencies(clk_handle, dsi_ctrl->clk_freq,
|
||||
dsi_ctrl->cell_index);
|
||||
|
مرجع در شماره جدید
Block a user