disp: msm: add support for INTF WD jitter
Change adds support for the INTF watchdog timer jitter feature for MDSS 9.x. Change-Id: I2cf821b5b5724f9adee95c282e0ec09719489a85 Signed-off-by: Satya Rama Aditya Pinapala <quic_spinapal@quicinc.com> Signed-off-by: Narendra Muppalla <quic_nmuppall@quicinc.com>
This commit is contained in:

committed by
Narendra Muppalla

parent
7d0468f562
commit
718cd25496
@@ -1,6 +1,6 @@
|
||||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2021-2022, Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2016-2021, The Linux Foundation. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -2203,16 +2203,71 @@ static int dsi_panel_parse_misc_features(struct dsi_panel *panel)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dsi_panel_parse_wd_jitter_config(struct dsi_display_mode_priv_info *priv_info,
|
||||
struct dsi_parser_utils *utils, u32 *jitter)
|
||||
{
|
||||
int rc = 0;
|
||||
struct msm_display_wd_jitter_config *wd_jitter = &priv_info->wd_jitter;
|
||||
u32 ltj[DEFAULT_PANEL_JITTER_ARRAY_SIZE] = {0, 1};
|
||||
u32 ltj_time = 0;
|
||||
const u32 min_ltj = 10;
|
||||
|
||||
if (!(utils->read_bool(utils->data, "qcom,dsi-wd-jitter-enable"))) {
|
||||
priv_info->panel_jitter_numer = DEFAULT_PANEL_JITTER_NUMERATOR;
|
||||
priv_info->panel_jitter_denom = DEFAULT_PANEL_JITTER_DENOMINATOR;
|
||||
return 0;
|
||||
}
|
||||
|
||||
rc = utils->read_u32_array(utils->data, "qcom,dsi-wd-ltj-max-jitter", ltj,
|
||||
DEFAULT_PANEL_JITTER_ARRAY_SIZE);
|
||||
rc |= utils->read_u32(utils->data, "qcom,dsi-wd-ltj-time-sec", <j_time);
|
||||
if (rc || !ltj[1] || !ltj_time || (ltj[0] / ltj[1] < min_ltj)) {
|
||||
DSI_DEBUG("No valid long term jitter defined\n");
|
||||
priv_info->panel_jitter_numer = DEFAULT_PANEL_JITTER_NUMERATOR;
|
||||
priv_info->panel_jitter_denom = DEFAULT_PANEL_JITTER_DENOMINATOR;
|
||||
rc = -EINVAL;
|
||||
} else {
|
||||
wd_jitter->ltj_max_numer = ltj[0];
|
||||
wd_jitter->ltj_max_denom = ltj[1];
|
||||
wd_jitter->ltj_time_sec = ltj_time;
|
||||
wd_jitter->jitter_type = MSM_DISPLAY_WD_LTJ_JITTER;
|
||||
}
|
||||
|
||||
if (jitter[0] && jitter[1]) {
|
||||
if (jitter[0] / jitter[1] > MAX_PANEL_JITTER) {
|
||||
wd_jitter->inst_jitter_numer = DEFAULT_PANEL_JITTER_NUMERATOR;
|
||||
wd_jitter->inst_jitter_denom = DEFAULT_PANEL_JITTER_DENOMINATOR;
|
||||
} else {
|
||||
wd_jitter->inst_jitter_numer = jitter[0];
|
||||
wd_jitter->inst_jitter_denom = jitter[1];
|
||||
}
|
||||
wd_jitter->jitter_type |= MSM_DISPLAY_WD_INSTANTANEOUS_JITTER;
|
||||
} else if (rc) {
|
||||
wd_jitter->inst_jitter_numer = DEFAULT_PANEL_JITTER_NUMERATOR;
|
||||
wd_jitter->inst_jitter_denom = DEFAULT_PANEL_JITTER_DENOMINATOR;
|
||||
wd_jitter->jitter_type |= MSM_DISPLAY_WD_INSTANTANEOUS_JITTER;
|
||||
}
|
||||
|
||||
priv_info->panel_jitter_numer = rc ?
|
||||
wd_jitter->inst_jitter_numer : wd_jitter->ltj_max_numer;
|
||||
priv_info->panel_jitter_denom = rc ?
|
||||
wd_jitter->inst_jitter_denom : wd_jitter->ltj_max_denom;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int dsi_panel_parse_jitter_config(
|
||||
struct dsi_display_mode *mode,
|
||||
struct dsi_parser_utils *utils)
|
||||
{
|
||||
int rc;
|
||||
struct dsi_display_mode_priv_info *priv_info;
|
||||
struct dsi_panel *panel;
|
||||
u32 jitter[DEFAULT_PANEL_JITTER_ARRAY_SIZE] = {0, 0};
|
||||
u64 jitter_val = 0;
|
||||
|
||||
priv_info = mode->priv_info;
|
||||
panel = container_of(utils, struct dsi_panel, utils);
|
||||
|
||||
rc = utils->read_u32_array(utils->data, "qcom,mdss-dsi-panel-jitter",
|
||||
jitter, DEFAULT_PANEL_JITTER_ARRAY_SIZE);
|
||||
@@ -2223,10 +2278,11 @@ static int dsi_panel_parse_jitter_config(
|
||||
jitter_val = div_u64(jitter_val, jitter[1]);
|
||||
}
|
||||
|
||||
if (rc || !jitter_val || (jitter_val > MAX_PANEL_JITTER)) {
|
||||
if (panel->te_using_watchdog_timer) {
|
||||
dsi_panel_parse_wd_jitter_config(priv_info, utils, jitter);
|
||||
} else if (rc || !jitter_val || (jitter_val > MAX_PANEL_JITTER)) {
|
||||
priv_info->panel_jitter_numer = DEFAULT_PANEL_JITTER_NUMERATOR;
|
||||
priv_info->panel_jitter_denom =
|
||||
DEFAULT_PANEL_JITTER_DENOMINATOR;
|
||||
priv_info->panel_jitter_denom = DEFAULT_PANEL_JITTER_DENOMINATOR;
|
||||
} else {
|
||||
priv_info->panel_jitter_numer = jitter[0];
|
||||
priv_info->panel_jitter_denom = jitter[1];
|
||||
|
Reference in New Issue
Block a user