Display PanelMode: Add CABC control

Add CABC control interface for video mode panel. This interface is
also used by sde connector property.
port of : 09a47b9fa

Change-Id: Id3170799333bc7852c1b92895bd016fda13d580c
Reviewed-on: https://gerrit.mot.com/1782225
SLTApproved: Slta Waiver
SME-Granted: SME Approvals Granted
Tested-by: Jira Key
Reviewed-by: Yeqing Wang <wangyq13@motorola.com>
Reviewed-by: Shanshan Dai <daiss1@motorola.com>
Reviewed-by: Huosheng Liao <liaohs@motorola.com>
Submit-Approved: Jira Key
This commit is contained in:
houdz1 2020-10-22 16:56:08 +08:00 • committed by tongkun1
commit e65d196c2a
6 changed files with 61 additions and 2 deletions

View file

@ -267,7 +267,11 @@ enum dsi_dyn_clk_feature_type {
* @DSI_CMD_SET_HBM_OFF: Turning HBM off
* @DSI_CMD_SET_ACL_ON: Turning ACL on
* @DSI_CMD_SET_ACL_OFF: Turning ACL off
* DSI_CMD_SET_HBM_DIM_OFF: Turning HBM DIM off
* @DSI_CMD_SET_HBM_DIM_OFF: Turning HBM DIM off
* @DSI_CMD_SET_CABC_UI: CABC UI mode
* @DSI_CMD_SET_CABC_MV: CABC MV mode
* @DSI_CMD_SET_CABC_DIS: CABC DIS mode
* @DSI_CMD_SET_MAX
*/
enum dsi_cmd_set_type {
@ -300,6 +304,9 @@ enum dsi_cmd_set_type {
DSI_CMD_SET_ACL_ON,
DSI_CMD_SET_ACL_OFF,
DSI_CMD_SET_HBM_DIM_OFF,
DSI_CMD_SET_CABC_UI,
DSI_CMD_SET_CABC_MV,
DSI_CMD_SET_CABC_DIS,
DSI_CMD_SET_MAX
};

View file

@ -68,10 +68,18 @@ static struct panel_param_val_map acl_map[ACL_STATE_NUM] = {
{ACL_ON_STATE, DSI_CMD_SET_ACL_ON, NULL},
};
static struct panel_param_val_map cabc_map[CABC_STATE_NUM] = {
{CABC_UI_STATE, DSI_CMD_SET_CABC_UI, NULL},
{CABC_MV_STATE, DSI_CMD_SET_CABC_MV, NULL},
{CABC_DIS_STATE, DSI_CMD_SET_CABC_DIS, NULL},
};
static struct panel_param dsi_panel_param[PANEL_IDX_MAX][PARAM_ID_NUM] = {
{
{"HBM", hbm_map, HBM_STATE_NUM, HBM_OFF_STATE,
HBM_OFF_STATE, false},
{"CABC", cabc_map, CABC_STATE_NUM, CABC_UI_STATE,
CABC_UI_STATE, false},
{"ACL", acl_map, ACL_STATE_NUM, ACL_OFF_STATE,
ACL_OFF_STATE, false}
},
@ -864,7 +872,7 @@ static int dsi_panel_send_param_cmd(struct dsi_panel *panel,
param_map = panel_param->val_map;
DSI_DEBUG("%s: param_name=%s; val_max =%d, default_value=%d, value=%d\n",
DSI_INFO("%s: param_name=%s; val_max =%d, default_value=%d, value=%d\n",
__func__, panel_param->param_name, panel_param->val_max,
panel_param->default_value, panel_param->value);
@ -950,6 +958,19 @@ static int dsi_panel_set_acl(struct dsi_panel *panel,
return rc;
};
static int dsi_panel_set_cabc(struct dsi_panel *panel,
struct msm_param_info *param_info)
{
int rc = 0;
pr_info("%s: Set CABC to (%d)\n", __func__, param_info->value);
rc = dsi_panel_send_param_cmd(panel, param_info);
if (rc < 0)
pr_err("%s: failed to send param cmds. ret=%d\n", __func__, rc);
return rc;
};
int dsi_panel_set_param(struct dsi_panel *panel,
struct msm_param_info *param_info)
{
@ -966,6 +987,9 @@ int dsi_panel_set_param(struct dsi_panel *panel,
case PARAM_HBM_ID :
dsi_panel_set_hbm(panel, param_info);
break;
case PARAM_CABC_ID :
dsi_panel_set_cabc(panel, param_info);
break;
case PARAM_ACL_ID :
dsi_panel_set_acl(panel, param_info);
break;
@ -2100,6 +2124,9 @@ const char *cmd_set_prop_map[DSI_CMD_SET_MAX] = {
"qcom,mdss-dsi-acl-on-command",
"qcom,mdss-dsi-acl-off-command",
"qcom,mdss-dsi-hbm-dim-off-command",
"qcom,mdss-dsi-cabc-ui-command",
"qcom,mdss-dsi-cabc-mv-command",
"qcom,mdss-dsi-cabc-dis-command",
};
const char *cmd_set_state_map[DSI_CMD_SET_MAX] = {
@ -2132,6 +2159,9 @@ const char *cmd_set_state_map[DSI_CMD_SET_MAX] = {
"qcom,mdss-dsi-acl-on-command-state",
"qcom,mdss-dsi-acl-off-command-state",
"qcom,mdss-dsi-hbm-dim-off-command-state",
"qcom,mdss-dsi-cabc-ui-command-state",
"qcom,mdss-dsi-cabc-mv-command-state",
"qcom,mdss-dsi-cabc-dis-command-state",
};
int dsi_panel_get_cmd_pkt_count(const char *data, u32 length, u32 *cnt)

View file

@ -236,6 +236,13 @@ enum hbm_state {
HBM_STATE_NUM
};
enum cabc_state {
CABC_UI_STATE,
CABC_MV_STATE,
CABC_DIS_STATE,
CABC_STATE_NUM,
};
struct panel_param_val_map {
int state;
enum dsi_cmd_set_type type;

View file

@ -218,6 +218,7 @@ enum msm_mdp_conn_property {
/* MOT feature panel*/
CONNECTOR_PROP_HBM,
CONNECTOR_PROP_CABC,
CONNECTOR_PROP_ACL,
/* total # of properties */
CONNECTOR_PROP_COUNT
@ -365,6 +366,7 @@ enum msm_param_state {
enum msm_param_id {
PARAM_HBM_ID = 0,
PARAM_CABC_ID,
PARAM_ACL_ID,
PARAM_ID_NUM
};

View file

@ -1578,6 +1578,14 @@ static int sde_connector_atomic_set_property(struct drm_connector *connector,
if (rc)
goto end;
break;
case CONNECTOR_PROP_CABC:
param_info.value = val;
param_info.param_idx = PARAM_CABC_ID;
param_info.param_conn_idx = CONNECTOR_PROP_CABC;
rc = _sde_connector_update_param(c_conn, &param_info);
if (rc)
goto end;
break;
default:
break;
}
@ -2674,6 +2682,8 @@ static int sde_connector_install_panel_params(struct sde_connector *c_conn)
if (!strncmp(param_cmds->param_name, "HBM", 3))
prop_idx = CONNECTOR_PROP_HBM;
else if (!strncmp(param_cmds->param_name, "CABC", 4))
prop_idx = CONNECTOR_PROP_CABC;
else if (!strncmp(param_cmds->param_name, "ACL", 3))
prop_idx = CONNECTOR_PROP_ACL;
else {

View file

@ -217,6 +217,9 @@ static int _sde_debugfs_motUtil_kms_prop_test(struct sde_kms *kms,
case KMSPROPTEST_TYPE_ACL:
conn_prop_idx = CONNECTOR_PROP_ACL;
break;
case KMSPROPTEST_TYPE_CABC:
conn_prop_idx = CONNECTOR_PROP_CABC;
break;
default:
DRM_ERROR(" Invalid KMSPROPTEST_PROP_INDEX = %d\n",
input[KMSPROPTEST_PROP_INDEX]);