Merge "msm: mdss: add support for multiple DSI host escape clk frequencies"

This commit is contained in:
Linux Build Service Account 2017-03-21 05:00:54 -07:00 committed by Gerrit - the friendly Code Review server
commit b23c3fca05
5 changed files with 28 additions and 7 deletions

View file

@ -271,6 +271,8 @@ Optional properties:
"trigger_sw_te" = Software trigger and TE "trigger_sw_te" = Software trigger and TE
- qcom,mdss-dsi-panel-framerate: Specifies the frame rate for the panel. - qcom,mdss-dsi-panel-framerate: Specifies the frame rate for the panel.
60 = 60 frames per second (default) 60 = 60 frames per second (default)
- qcom,mdss-dsi-host-esc-clk-freq-hz: Specifies the escape clock needed for the host.
19200000 = 19.2 MHz (default)
- qcom,mdss-dsi-panel-clockrate: A 64 bit value specifies the panel clock speed in Hz. - qcom,mdss-dsi-panel-clockrate: A 64 bit value specifies the panel clock speed in Hz.
0 = default value. 0 = default value.
- qcom,mdss-mdp-kickoff-threshold: This property can be used to define a region - qcom,mdss-mdp-kickoff-threshold: This property can be used to define a region
@ -657,6 +659,7 @@ Example:
qcom,mdss-dsi-mdp-trigger = <0>; qcom,mdss-dsi-mdp-trigger = <0>;
qcom,mdss-dsi-dma-trigger = <0>; qcom,mdss-dsi-dma-trigger = <0>;
qcom,mdss-dsi-panel-framerate = <60>; qcom,mdss-dsi-panel-framerate = <60>;
qcom,mdss-dsi-host-esc-clk-freq-hz = <19200000>;
qcom,mdss-dsi-panel-clockrate = <424000000>; qcom,mdss-dsi-panel-clockrate = <424000000>;
qcom,mdss-mdp-kickoff-threshold = <11 2430>; qcom,mdss-mdp-kickoff-threshold = <11 2430>;
qcom,mdss-mdp-kickoff-delay = <1000>; qcom,mdss-mdp-kickoff-delay = <1000>;

View file

@ -34,7 +34,6 @@
#include "mdss_dsi_phy.h" #include "mdss_dsi_phy.h"
#include "mdss_dba_utils.h" #include "mdss_dba_utils.h"
#define XO_CLK_RATE 19200000
#define CMDLINE_DSI_CTL_NUM_STRING_LEN 2 #define CMDLINE_DSI_CTL_NUM_STRING_LEN 2
/* Master structure to hold all the information about the DSI/panel */ /* Master structure to hold all the information about the DSI/panel */
@ -1871,7 +1870,7 @@ static void __mdss_dsi_dyn_refresh_config(
static void __mdss_dsi_calc_dfps_delay(struct mdss_panel_data *pdata) static void __mdss_dsi_calc_dfps_delay(struct mdss_panel_data *pdata)
{ {
u32 esc_clk_rate = XO_CLK_RATE; u32 esc_clk_rate_hz;
u32 pipe_delay, pipe_delay2 = 0, pll_delay; u32 pipe_delay, pipe_delay2 = 0, pll_delay;
u32 hsync_period = 0; u32 hsync_period = 0;
u32 pclk_to_esc_ratio, byte_to_esc_ratio, hr_bit_to_esc_ratio; u32 pclk_to_esc_ratio, byte_to_esc_ratio, hr_bit_to_esc_ratio;
@ -1898,9 +1897,11 @@ static void __mdss_dsi_calc_dfps_delay(struct mdss_panel_data *pdata)
pinfo = &pdata->panel_info; pinfo = &pdata->panel_info;
pd = &(pinfo->mipi.dsi_phy_db); pd = &(pinfo->mipi.dsi_phy_db);
pclk_to_esc_ratio = (ctrl_pdata->pclk_rate / esc_clk_rate); esc_clk_rate_hz = ctrl_pdata->esc_clk_rate_hz;
byte_to_esc_ratio = (ctrl_pdata->byte_clk_rate / esc_clk_rate); pclk_to_esc_ratio = (ctrl_pdata->pclk_rate / esc_clk_rate_hz);
hr_bit_to_esc_ratio = ((ctrl_pdata->byte_clk_rate * 4) / esc_clk_rate); byte_to_esc_ratio = (ctrl_pdata->byte_clk_rate / esc_clk_rate_hz);
hr_bit_to_esc_ratio = ((ctrl_pdata->byte_clk_rate * 4) /
esc_clk_rate_hz);
hsync_period = mdss_panel_get_htotal(pinfo, true); hsync_period = mdss_panel_get_htotal(pinfo, true);
pipe_delay = (hsync_period + 1) / pclk_to_esc_ratio; pipe_delay = (hsync_period + 1) / pclk_to_esc_ratio;
@ -1922,7 +1923,7 @@ static void __mdss_dsi_calc_dfps_delay(struct mdss_panel_data *pdata)
((pd->timing[4] >> 1) + 1)) / hr_bit_to_esc_ratio); ((pd->timing[4] >> 1) + 1)) / hr_bit_to_esc_ratio);
/* 130 us pll delay recommended by h/w doc */ /* 130 us pll delay recommended by h/w doc */
pll_delay = ((130 * esc_clk_rate) / 1000000) * 2; pll_delay = ((130 * esc_clk_rate_hz) / 1000000) * 2;
MIPI_OUTP((ctrl_pdata->ctrl_base) + DSI_DYNAMIC_REFRESH_PIPE_DELAY, MIPI_OUTP((ctrl_pdata->ctrl_base) + DSI_DYNAMIC_REFRESH_PIPE_DELAY,
pipe_delay); pipe_delay);
@ -3057,7 +3058,7 @@ static int mdss_dsi_set_clk_rates(struct mdss_dsi_ctrl_pdata *ctrl_pdata)
rc = mdss_dsi_clk_set_link_rate(ctrl_pdata->dsi_clk_handle, rc = mdss_dsi_clk_set_link_rate(ctrl_pdata->dsi_clk_handle,
MDSS_DSI_LINK_ESC_CLK, MDSS_DSI_LINK_ESC_CLK,
19200000, ctrl_pdata->esc_clk_rate_hz,
MDSS_DSI_CLK_UPDATE_CLK_RATE_AT_ON); MDSS_DSI_CLK_UPDATE_CLK_RATE_AT_ON);
if (rc) { if (rc) {
pr_err("%s: dsi_esc_clk - clk_set_rate failed\n", pr_err("%s: dsi_esc_clk - clk_set_rate failed\n",
@ -4236,6 +4237,9 @@ int dsi_panel_device_register(struct platform_device *ctrl_pdev,
pr_debug("%s: pclk=%d, bclk=%d\n", __func__, pr_debug("%s: pclk=%d, bclk=%d\n", __func__,
ctrl_pdata->pclk_rate, ctrl_pdata->byte_clk_rate); ctrl_pdata->pclk_rate, ctrl_pdata->byte_clk_rate);
ctrl_pdata->esc_clk_rate_hz = pinfo->esc_clk_rate_hz;
pr_debug("%s: esc clk=%d\n", __func__,
ctrl_pdata->esc_clk_rate_hz);
rc = mdss_dsi_get_dt_vreg_data(&ctrl_pdev->dev, pan_node, rc = mdss_dsi_get_dt_vreg_data(&ctrl_pdev->dev, pan_node,
&ctrl_pdata->panel_power_data, DSI_PANEL_PM); &ctrl_pdata->panel_power_data, DSI_PANEL_PM);

View file

@ -477,6 +477,7 @@ struct mdss_dsi_ctrl_pdata {
u32 byte_clk_rate; u32 byte_clk_rate;
u32 pclk_rate_bkp; u32 pclk_rate_bkp;
u32 byte_clk_rate_bkp; u32 byte_clk_rate_bkp;
u32 esc_clk_rate_hz;
bool refresh_clk_rate; /* flag to recalculate clk_rate */ bool refresh_clk_rate; /* flag to recalculate clk_rate */
struct dss_module_power panel_power_data; struct dss_module_power panel_power_data;
struct dss_module_power power_data[DSI_MAX_PM]; /* for 8x10 */ struct dss_module_power power_data[DSI_MAX_PM]; /* for 8x10 */

View file

@ -2819,6 +2819,13 @@ static int mdss_panel_parse_dt(struct device_node *np,
MSM_DBA_CHIP_NAME_MAX_LEN); MSM_DBA_CHIP_NAME_MAX_LEN);
} }
rc = of_property_read_u32(np,
"qcom,mdss-dsi-host-esc-clk-freq-hz",
&pinfo->esc_clk_rate_hz);
if (rc)
pinfo->esc_clk_rate_hz = MDSS_DSI_MAX_ESC_CLK_RATE_HZ;
pr_debug("%s: esc clk %d\n", __func__, pinfo->esc_clk_rate_hz);
return 0; return 0;
error: error:

View file

@ -29,6 +29,9 @@ struct panel_id {
#define DEFAULT_FRAME_RATE 60 #define DEFAULT_FRAME_RATE 60
#define DEFAULT_ROTATOR_FRAME_RATE 120 #define DEFAULT_ROTATOR_FRAME_RATE 120
#define ROTATOR_LOW_FRAME_RATE 30 #define ROTATOR_LOW_FRAME_RATE 30
#define MDSS_DSI_MAX_ESC_CLK_RATE_HZ 19200000
#define MDSS_DSI_RST_SEQ_LEN 10 #define MDSS_DSI_RST_SEQ_LEN 10
/* worst case prefill lines for all chipsets including all vertical blank */ /* worst case prefill lines for all chipsets including all vertical blank */
#define MDSS_MDP_MAX_PREFILL_FETCH 25 #define MDSS_MDP_MAX_PREFILL_FETCH 25
@ -909,6 +912,9 @@ struct mdss_panel_info {
/* HDR properties of display panel*/ /* HDR properties of display panel*/
struct mdss_panel_hdr_properties hdr_properties; struct mdss_panel_hdr_properties hdr_properties;
/* esc clk recommended for the panel */
u32 esc_clk_rate_hz;
}; };
struct mdss_panel_timing { struct mdss_panel_timing {