disp: msm: support for HBM_FOD mode

FOD: Fingerprint of display.

For tianma panel, there are two hbm mode.
1. hbm
2. hbm for FOD(hbm_fod);
But for SMD panel ,there is only one HBM mode.

Port from 9701d728f

Change-Id: Icc09d39502a9549bfba7cd47efca2993a2716110
Signed-off-by: houdz1 <houdz1@motorola.com>
Reviewed-on: https://gerrit.mot.com/1697595
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Guobin Zhang <zhanggb@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
houdz1 2019-01-15 17:34:44 +08:00 • committed by tongkun1
commit 84265334e2
3 changed files with 22 additions and 1 deletions

View file

@ -262,6 +262,7 @@ enum dsi_dyn_clk_feature_type {
* @DSI_CMD_SET_POST_TIMING_SWITCH: Post timing switch
* @DSI_CMD_SET_QSYNC_ON Enable qsync mode
* @DSI_CMD_SET_QSYNC_OFF Disable qsync mode
* @DSI_CMD_SET_HBM_FOD_ON: Turning HBM_FOD on
* @DSI_CMD_SET_HBM_ON: Turning HBM on
* @DSI_CMD_SET_HBM_OFF: Turning HBM off
* @DSI_CMD_SET_ACL_ON: Turning ACL on
@ -292,6 +293,7 @@ enum dsi_cmd_set_type {
DSI_CMD_SET_POST_TIMING_SWITCH,
DSI_CMD_SET_QSYNC_ON,
DSI_CMD_SET_QSYNC_OFF,
DSI_CMD_SET_HBM_FOD_ON,
DSI_CMD_SET_HBM_ON,
DSI_CMD_SET_HBM_OFF,
DSI_CMD_SET_ACL_ON,

View file

@ -45,6 +45,7 @@
static struct panel_param_val_map hbm_map[HBM_STATE_NUM] = {
{HBM_OFF_STATE, DSI_CMD_SET_HBM_OFF, NULL},
{HBM_ON_STATE, DSI_CMD_SET_HBM_ON, NULL},
{HBM_FOD_ON_STATE, DSI_CMD_SET_HBM_FOD_ON, NULL},
};
static struct panel_param_val_map acl_map[ACL_STATE_NUM] = {
@ -755,6 +756,10 @@ static int dsi_panel_send_param_cmd(struct dsi_panel *panel,
panel_param->default_value, panel_param->value);
mutex_lock(&panel->panel_lock);
if (param_info->value >= panel_param->val_max)
param_info->value = panel_param->val_max - 1;
if (panel_param->value == param_info->value)
{
DSI_INFO("(mode=%d): requested value=%d is same. Do nothing\n",
@ -1952,6 +1957,7 @@ const char *cmd_set_prop_map[DSI_CMD_SET_MAX] = {
"qcom,mdss-dsi-post-mode-switch-on-command",
"qcom,mdss-dsi-qsync-on-commands",
"qcom,mdss-dsi-qsync-off-commands",
"qcom,mdss-dsi-hbm-fod-on-command",
"qcom,mdss-dsi-hbm-on-command",
"qcom,mdss-dsi-hbm-off-command",
"qcom,mdss-dsi-acl-on-command",
@ -1982,6 +1988,7 @@ const char *cmd_set_state_map[DSI_CMD_SET_MAX] = {
"qcom,mdss-dsi-post-mode-switch-on-command-state",
"qcom,mdss-dsi-qsync-on-commands-state",
"qcom,mdss-dsi-qsync-off-commands-state",
"qcom,mdss-dsi-hbm-fod-on-command-state",
"qcom,mdss-dsi-hbm-on-command-state",
"qcom,mdss-dsi-hbm-off-command-state",
"qcom,mdss-dsi-acl-on-command-state",
@ -3716,6 +3723,12 @@ static int dsi_panel_parse_param_prop(struct dsi_panel *panel,
if (!prop)
continue;
if ((type == DSI_CMD_SET_HBM_FOD_ON) &&
(!panel->panel_hbm_fod)) {
param->val_max -= 1;
continue;
}
rc = dsi_panel_parse_cmd_sets_sub(param_map->cmds,
type, utils);
if (rc) {
@ -3732,6 +3745,9 @@ static int dsi_panel_parse_param_prop(struct dsi_panel *panel,
}
}
panel->panel_hbm_fod = of_property_read_bool(of_node,
"qcom,mdss-dsi-hbm-fod");
return rc;
parse_err:

View file

@ -201,6 +201,7 @@ enum acl_state {
enum hbm_state {
HBM_OFF_STATE = 0,
HBM_ON_STATE,
HBM_FOD_ON_STATE,
HBM_STATE_NUM
};
@ -213,7 +214,7 @@ struct panel_param_val_map {
struct panel_param {
const char *param_name;
struct panel_param_val_map *val_map;
const u16 val_max;
u16 val_max;
const u16 default_value;
u16 value;
bool is_supported;
@ -312,6 +313,8 @@ struct dsi_panel {
u32 disp_on_chk_val;
bool no_panel_on_read_support;
bool panel_hbm_fod;
struct panel_param *param_cmds;
};