diff --git a/msm/dsi/dsi_panel.c b/msm/dsi/dsi_panel.c index 8a8744cfd90b..d5ce8bd2c1cc 100644 --- a/msm/dsi/dsi_panel.c +++ b/msm/dsi/dsi_panel.c @@ -1142,21 +1142,35 @@ static int dsi_panel_set_local_hbm_param(struct dsi_panel *panel, for (i =0; i < count; i++) { payload = (u8 *)cmds->msg.tx_buf; - if(param_info->value == HBM_FOD_ON_STATE && - payload[0] == lhbm_config->alpha_reg) { - if(lhbm_config->dbv_level >lhbm_config->alpha_size) { - DSI_ERR("unsupport dbv level %d on local hbm\n", lhbm_config->dbv_level); - rc = -EINVAL; - goto end; - } + if(param_info->value == HBM_FOD_ON_STATE) { + if(payload[0] == lhbm_config->alpha_reg) { + if(lhbm_config->dbv_level >lhbm_config->alpha_size) { + DSI_ERR("unsupport dbv level %d on local hbm\n", lhbm_config->dbv_level); + rc = -EINVAL; + goto end; + } - alpha = lhbm_config->alpha[lhbm_config->dbv_level]; - payload[1] = (alpha&0xff00)>>8; - payload[2] = alpha&0xff; - DSI_INFO("%s: alpha [%x]=%x%x\n", - __func__, payload[0], payload[1], payload[2]); - rc = 0; - goto end; + alpha = lhbm_config->alpha[lhbm_config->dbv_level]; + payload[1] = (alpha&0xff00)>>8; + payload[2] = alpha&0xff; + DSI_INFO("%s: alpha [%x]=%x%x\n", + __func__, payload[0], payload[1], payload[2]); + rc = 0; + goto end; + } else if(payload[0] == 0X51 && + lhbm_config->dc_hybird_threshold != 0) { + if(lhbm_config->dbv_level < lhbm_config->dc_hybird_threshold) { + payload[1] = (lhbm_config->dc_hybird_threshold & 0xff00) >> 8; + payload[2] = lhbm_config->dc_hybird_threshold & 0xff; + + } else { + payload[1] = (lhbm_config->dbv_level & 0xff00) >> 8; + payload[2] = lhbm_config->dbv_level & 0xff; + } + DSI_INFO("%s: [%x]=%x%x\n", + __func__, payload[0], payload[1], payload[2]); + continue; + } } else if(param_info->value == HBM_OFF_STATE && payload[0] == 0x51) { payload[1] = (lhbm_config->dbv_level&0xff00)>>8; diff --git a/msm/dsi/dsi_panel.h b/msm/dsi/dsi_panel.h index ec7d27bff028..471f62e4345c 100644 --- a/msm/dsi/dsi_panel.h +++ b/msm/dsi/dsi_panel.h @@ -234,6 +234,7 @@ struct dsi_panel_spr_info { struct dsi_panel_lhbm_config { bool enable; + u32 dc_hybird_threshold; bool resend_lbhm_off; u32 dbv_level; u32 alpha_reg;