drm: Add the DC panel param feature

Add the DC panel param feature which will be controlled
from the user-space

Change-Id: Iacb5d78c3a01874b21a3ceMontanafcc8362b1b03c29
Signed-off-by: daiss1 <[email protected]>
Reviewed-on: https://gerrit.mot.com/2041322
SME-Granted: SME Approvals Granted
SLTApproved: Slta Waiver
Tested-by: Jira Key
Reviewed-by: Dezhen Hou <[email protected]>
Reviewed-by: Huosheng Liao <[email protected]>
Submit-Approved: Jira Key
This commit is contained in:
daiss1 2021-05-10 11:14:30 +08:00 • committed by tongkun1
commit 88794fe9cb
7 changed files with 60 additions and 2 deletions

View file

@ -273,7 +273,8 @@ enum dsi_dyn_clk_feature_type {
* @DSI_CMD_SET_CABC_DIS: CABC DIS mode
* @DSI_CMD_SET_DFPS_CMD_90: DFPS switch to 90
* @DSI_CMD_SET_DFPS_CMD_60: DFPS switch to 60
* @DSI_CMD_SET_DC_ON: DC mode on
* @DSI_CMD_SET_DC_OFF: DC mode off
* @DSI_CMD_SET_MAX
*/
enum dsi_cmd_set_type {
@ -311,6 +312,8 @@ enum dsi_cmd_set_type {
DSI_CMD_SET_CABC_DIS,
DSI_CMD_SET_DFPS_CMD_90,
DSI_CMD_SET_DFPS_CMD_60,
DSI_CMD_SET_DC_ON,
DSI_CMD_SET_DC_OFF,
DSI_CMD_SET_MAX
};

View file

@ -81,6 +81,16 @@ static struct panel_param_val_map cabc_map_s[CABC_STATE_NUM] = {
{CABC_DIS_STATE, DSI_CMD_SET_CABC_DIS, NULL},
};
static struct panel_param_val_map dc_map[DC_STATE_NUM] = {
{DC_OFF_STATE, DSI_CMD_SET_DC_OFF, NULL},
{DC_ON_STATE, DSI_CMD_SET_DC_ON, NULL},
};
static struct panel_param_val_map dc_map_s[DC_STATE_NUM] = {
{DC_OFF_STATE, DSI_CMD_SET_DC_OFF, NULL},
{DC_ON_STATE, DSI_CMD_SET_DC_ON, NULL},
};
static struct panel_param dsi_panel_param[PANEL_IDX_MAX][PARAM_ID_NUM] = {
{
{"HBM", hbm_map, HBM_STATE_NUM, HBM_OFF_STATE,
@ -88,7 +98,9 @@ static struct panel_param dsi_panel_param[PANEL_IDX_MAX][PARAM_ID_NUM] = {
{"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}
ACL_OFF_STATE, false},
{"DC", dc_map, DC_STATE_NUM, DC_OFF_STATE,
DC_OFF_STATE, false}
},
{
{"HBM", hbm_map_s, HBM_STATE_NUM, HBM_OFF_STATE,
@ -97,6 +109,8 @@ static struct panel_param dsi_panel_param[PANEL_IDX_MAX][PARAM_ID_NUM] = {
ACL_OFF_STATE, false},
{"CABC", cabc_map_s, CABC_STATE_NUM, CABC_UI_STATE,
CABC_UI_STATE, false},
{"DC", dc_map_s, DC_STATE_NUM, DC_OFF_STATE,
DC_OFF_STATE, false}
}
};
@ -1053,6 +1067,19 @@ static int dsi_panel_set_cabc(struct dsi_panel *panel,
return rc;
};
static int dsi_panel_set_dc(struct dsi_panel *panel,
struct msm_param_info *param_info)
{
int rc = 0;
pr_info("Set DC to (%d)\n", param_info->value);
rc = dsi_panel_send_param_cmd(panel, param_info);
if (rc < 0)
DSI_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)
{
@ -1074,6 +1101,8 @@ int dsi_panel_set_param(struct dsi_panel *panel,
break;
case PARAM_ACL_ID :
dsi_panel_set_acl(panel, param_info);
case PARAM_DC_ID :
dsi_panel_set_dc(panel, param_info);
break;
default:
DSI_ERR("%s: Invalid set_param type=%d\n",
@ -2214,6 +2243,8 @@ const char *cmd_set_prop_map[DSI_CMD_SET_MAX] = {
"qcom,mdss-dsi-cabc-dis-command",
"qcom,mdss-dsi-dfps-90-command",
"qcom,mdss-dsi-dfps-60-command",
"qcom,mdss-dsi-dc-on-command",
"qcom,mdss-dsi-dc-off-command",
};
const char *cmd_set_state_map[DSI_CMD_SET_MAX] = {
@ -2251,6 +2282,8 @@ const char *cmd_set_state_map[DSI_CMD_SET_MAX] = {
"qcom,mdss-dsi-cabc-dis-command-state",
"qcom,mdss-dsi-dfps-90-command-state",
"qcom,mdss-dsi-dfps-60-command-state",
"qcom,mdss-dsi-dc-on-command-state",
"qcom,mdss-dsi-dc-off-command-state",
};
int dsi_panel_get_cmd_pkt_count(const char *data, u32 length, u32 *cnt)

View file

@ -245,6 +245,12 @@ enum cabc_state {
CABC_STATE_NUM,
};
enum dc_state {
DC_OFF_STATE = 0,
DC_ON_STATE,
DC_STATE_NUM,
};
struct panel_param_val_map {
int state;
enum dsi_cmd_set_type type;

View file

@ -220,6 +220,7 @@ enum msm_mdp_conn_property {
CONNECTOR_PROP_HBM,
CONNECTOR_PROP_CABC,
CONNECTOR_PROP_ACL,
CONNECTOR_PROP_DC,
/* total # of properties */
CONNECTOR_PROP_COUNT
};
@ -368,6 +369,7 @@ enum msm_param_id {
PARAM_HBM_ID = 0,
PARAM_CABC_ID,
PARAM_ACL_ID,
PARAM_DC_ID,
PARAM_ID_NUM
};

View file

@ -1589,6 +1589,14 @@ static int sde_connector_atomic_set_property(struct drm_connector *connector,
if (rc)
goto end;
break;
case CONNECTOR_PROP_DC:
param_info.value = val;
param_info.param_idx = PARAM_DC_ID;
param_info.param_conn_idx = CONNECTOR_PROP_DC;
rc = _sde_connector_update_param(c_conn, &param_info);
if (rc)
goto end;
break;
default:
break;
}
@ -2689,6 +2697,8 @@ static int sde_connector_install_panel_params(struct sde_connector *c_conn)
prop_idx = CONNECTOR_PROP_CABC;
else if (!strncmp(param_cmds->param_name, "ACL", 3))
prop_idx = CONNECTOR_PROP_ACL;
else if (!strncmp(param_cmds->param_name, "DC", 2))
prop_idx = CONNECTOR_PROP_DC;
else {
SDE_ERROR("Invalid param_name =%s\n",
param_cmds->param_name);

View file

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

View file

@ -116,6 +116,7 @@ enum sde_motUtil_kmsPropTest_ConnPropType {
KMSPROPTEST_TYPE_HBM,
KMSPROPTEST_TYPE_ACL,
KMSPROPTEST_TYPE_CABC,
KMSPROPTEST_TYPE_DC,
};
struct motUtil {