Loading msm/dsi/dsi_display.c +6 −5 Original line number Diff line number Diff line Loading @@ -5075,9 +5075,9 @@ static int dsi_display_ext_get_info(struct drm_connector *connector, info->is_connected = connector->status != connector_status_disconnected; if (!strcmp(display->display_type, "primary")) info->is_primary = true; else info->is_primary = false; info->display_type = SDE_CONNECTOR_PRIMARY; else if (!strcmp(display->display_type, "secondary")) info->display_type = SDE_CONNECTOR_SECONDARY; info->capabilities |= (MSM_DISPLAY_CAP_VID_MODE | MSM_DISPLAY_CAP_EDID | MSM_DISPLAY_CAP_HOT_PLUG); Loading Loading @@ -5431,10 +5431,11 @@ int dsi_display_get_info(struct drm_connector *connector, info->h_tile_instance[i] = display->ctrl[i].ctrl->cell_index; info->is_connected = true; info->is_primary = false; if (!strcmp(display->display_type, "primary")) info->is_primary = true; info->display_type = SDE_CONNECTOR_PRIMARY; else if (!strcmp(display->display_type, "secondary")) info->display_type = SDE_CONNECTOR_SECONDARY; info->width_mm = phy_props.panel_width_mm; info->height_mm = phy_props.panel_height_mm; Loading msm/msm_drv.h +2 −2 Original line number Diff line number Diff line Loading @@ -486,7 +486,7 @@ struct msm_mode_info { * @max_height: Max height of display. In case of hot pluggable display * this is max height supported by controller * @clk_rate: DSI bit clock per lane in HZ. * @is_primary: Set to true if display is primary display * @display_type: Enum for type of display * @is_te_using_watchdog_timer: Boolean to indicate watchdog TE is * used instead of panel TE in cmd mode panels * @roi_caps: Region of interest capability info Loading @@ -509,7 +509,7 @@ struct msm_display_info { uint32_t max_height; uint64_t clk_rate; bool is_primary; uint32_t display_type; bool is_te_using_watchdog_timer; struct msm_roi_caps roi_caps; Loading msm/sde/sde_connector.c +10 −5 Original line number Diff line number Diff line Loading @@ -1533,8 +1533,8 @@ int sde_connector_helper_reset_custom_properties( return 0; } static int _sde_connector_primary_preference(struct sde_connector *sde_conn, struct sde_kms *sde_kms) static int _sde_connector_lm_preference(struct sde_connector *sde_conn, struct sde_kms *sde_kms, uint32_t disp_type) { int ret = 0; u32 num_lm = 0; Loading @@ -1544,6 +1544,11 @@ static int _sde_connector_primary_preference(struct sde_connector *sde_conn, return -EINVAL; } if (!disp_type || disp_type >= SDE_CONNECTOR_MAX) { SDE_DEBUG("invalid display_type"); return -EINVAL; } ret = sde_conn->ops.get_default_lms(sde_conn->display, &num_lm); if (ret || !num_lm) { SDE_DEBUG("failed to get default lm count"); Loading @@ -1557,7 +1562,7 @@ static int _sde_connector_primary_preference(struct sde_connector *sde_conn, return -EINVAL; } sde_hw_mixer_set_preference(sde_kms->catalog, num_lm); sde_hw_mixer_set_preference(sde_kms->catalog, num_lm, disp_type); return ret; } Loading Loading @@ -2453,8 +2458,8 @@ struct drm_connector *sde_connector_init(struct drm_device *dev, goto error_destroy_property; } if (display_info.is_primary) _sde_connector_primary_preference(c_conn, sde_kms); _sde_connector_lm_preference(c_conn, sde_kms, display_info.display_type); SDE_DEBUG("connector %d attach encoder %d\n", c_conn->base.base.id, encoder->base.id); Loading msm/sde/sde_connector.h +10 −0 Original line number Diff line number Diff line Loading @@ -314,6 +314,16 @@ struct sde_connector_ops { int (*get_default_lms)(void *display, u32 *num_lm); }; /** * enum sde_connector_display_type - list of display types */ enum sde_connector_display { SDE_CONNECTOR_UNDEFINED, SDE_CONNECTOR_PRIMARY, SDE_CONNECTOR_SECONDARY, SDE_CONNECTOR_MAX }; /** * enum sde_connector_events - list of recognized connector events */ Loading msm/sde/sde_encoder.c +12 −11 Original line number Diff line number Diff line Loading @@ -411,7 +411,9 @@ bool sde_encoder_is_primary_display(struct drm_encoder *drm_enc) { struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc); return sde_enc && sde_enc->disp_info.is_primary; return sde_enc && (sde_enc->disp_info.display_type == SDE_CONNECTOR_PRIMARY); } int sde_encoder_in_cont_splash(struct drm_encoder *drm_enc) Loading Loading @@ -662,7 +664,7 @@ void sde_encoder_get_hw_resources(struct drm_encoder *drm_enc, sde_connector_get_mode_info(conn_state, &sde_enc->mode_info); hw_res->topology = sde_enc->mode_info.topology; hw_res->is_primary = sde_enc->disp_info.is_primary; hw_res->display_type = sde_enc->disp_info.display_type; } void sde_encoder_destroy(struct drm_encoder *drm_enc) Loading Loading @@ -1903,8 +1905,9 @@ static int _sde_encoder_update_rsc_client( qsync_mode = sde_connector_get_qsync_mode( sde_enc->cur_master->connector); if (sde_encoder_in_clone_mode(drm_enc) || !disp_info->is_primary || (disp_info->is_primary && qsync_mode)) if (sde_encoder_in_clone_mode(drm_enc) || (disp_info->display_type != SDE_CONNECTOR_PRIMARY) || (disp_info->display_type && qsync_mode)) rsc_state = enable ? SDE_RSC_CLK_STATE : SDE_RSC_IDLE_STATE; else if (sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE)) rsc_state = enable ? SDE_RSC_CMD_STATE : SDE_RSC_IDLE_STATE; Loading @@ -1930,7 +1933,7 @@ static int _sde_encoder_update_rsc_client( } if (rsc_state != SDE_RSC_IDLE_STATE && !sde_enc->rsc_state_init && disp_info->is_primary) { && (disp_info->display_type == SDE_CONNECTOR_PRIMARY)) { /* update it only once */ sde_enc->rsc_state_init = true; Loading Loading @@ -2046,7 +2049,7 @@ static int _sde_encoder_resource_control_helper(struct drm_encoder *drm_enc, struct sde_kms *sde_kms; struct sde_encoder_virt *sde_enc; int rc; bool is_cmd_mode = false, is_primary; bool is_cmd_mode = false; sde_enc = to_sde_encoder_virt(drm_enc); priv = drm_enc->dev->dev_private; Loading @@ -2055,8 +2058,6 @@ static int _sde_encoder_resource_control_helper(struct drm_encoder *drm_enc, if (sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE)) is_cmd_mode = true; is_primary = sde_enc->disp_info.is_primary; SDE_DEBUG_ENC(sde_enc, "enable:%d\n", enable); SDE_EVT32(DRMID(drm_enc), enable); Loading Loading @@ -3261,7 +3262,7 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc) * they have been fully disabled, so delay the pre-stop operations * until after the physical disable calls have returned. */ if (sde_enc->disp_info.is_primary && if (sde_enc->disp_info.display_type == SDE_CONNECTOR_PRIMARY && (intf_mode == INTF_MODE_CMD || intf_mode == INTF_MODE_VIDEO)) { sde_encoder_resource_control(drm_enc, SDE_ENC_RC_EVENT_PRE_STOP); Loading Loading @@ -4642,7 +4643,6 @@ int sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc, SDE_ATRACE_BEGIN("sde_encoder_prepare_for_kickoff"); for (i = 0; i < sde_enc->num_phys_encs; i++) { phys = sde_enc->phys_encs[i]; params->is_primary = sde_enc->disp_info.is_primary; params->frame_trigger_mode = sde_enc->frame_trigger_mode; params->recovery_events_enabled = sde_enc->recovery_events_enabled; Loading Loading @@ -5499,7 +5499,8 @@ struct drm_encoder *sde_encoder_init_with_ops( } snprintf(name, SDE_NAME_SIZE, "rsc_enc%u", drm_enc->base.id); sde_enc->rsc_client = sde_rsc_client_create(SDE_RSC_INDEX, name, disp_info->is_primary ? SDE_RSC_PRIMARY_DISP_CLIENT : (disp_info->display_type == SDE_CONNECTOR_PRIMARY) ? SDE_RSC_PRIMARY_DISP_CLIENT : SDE_RSC_EXTERNAL_DISP_CLIENT, intf_index + 1); if (IS_ERR_OR_NULL(sde_enc->rsc_client)) { SDE_DEBUG("sde rsc client create failed :%ld\n", Loading Loading
msm/dsi/dsi_display.c +6 −5 Original line number Diff line number Diff line Loading @@ -5075,9 +5075,9 @@ static int dsi_display_ext_get_info(struct drm_connector *connector, info->is_connected = connector->status != connector_status_disconnected; if (!strcmp(display->display_type, "primary")) info->is_primary = true; else info->is_primary = false; info->display_type = SDE_CONNECTOR_PRIMARY; else if (!strcmp(display->display_type, "secondary")) info->display_type = SDE_CONNECTOR_SECONDARY; info->capabilities |= (MSM_DISPLAY_CAP_VID_MODE | MSM_DISPLAY_CAP_EDID | MSM_DISPLAY_CAP_HOT_PLUG); Loading Loading @@ -5431,10 +5431,11 @@ int dsi_display_get_info(struct drm_connector *connector, info->h_tile_instance[i] = display->ctrl[i].ctrl->cell_index; info->is_connected = true; info->is_primary = false; if (!strcmp(display->display_type, "primary")) info->is_primary = true; info->display_type = SDE_CONNECTOR_PRIMARY; else if (!strcmp(display->display_type, "secondary")) info->display_type = SDE_CONNECTOR_SECONDARY; info->width_mm = phy_props.panel_width_mm; info->height_mm = phy_props.panel_height_mm; Loading
msm/msm_drv.h +2 −2 Original line number Diff line number Diff line Loading @@ -486,7 +486,7 @@ struct msm_mode_info { * @max_height: Max height of display. In case of hot pluggable display * this is max height supported by controller * @clk_rate: DSI bit clock per lane in HZ. * @is_primary: Set to true if display is primary display * @display_type: Enum for type of display * @is_te_using_watchdog_timer: Boolean to indicate watchdog TE is * used instead of panel TE in cmd mode panels * @roi_caps: Region of interest capability info Loading @@ -509,7 +509,7 @@ struct msm_display_info { uint32_t max_height; uint64_t clk_rate; bool is_primary; uint32_t display_type; bool is_te_using_watchdog_timer; struct msm_roi_caps roi_caps; Loading
msm/sde/sde_connector.c +10 −5 Original line number Diff line number Diff line Loading @@ -1533,8 +1533,8 @@ int sde_connector_helper_reset_custom_properties( return 0; } static int _sde_connector_primary_preference(struct sde_connector *sde_conn, struct sde_kms *sde_kms) static int _sde_connector_lm_preference(struct sde_connector *sde_conn, struct sde_kms *sde_kms, uint32_t disp_type) { int ret = 0; u32 num_lm = 0; Loading @@ -1544,6 +1544,11 @@ static int _sde_connector_primary_preference(struct sde_connector *sde_conn, return -EINVAL; } if (!disp_type || disp_type >= SDE_CONNECTOR_MAX) { SDE_DEBUG("invalid display_type"); return -EINVAL; } ret = sde_conn->ops.get_default_lms(sde_conn->display, &num_lm); if (ret || !num_lm) { SDE_DEBUG("failed to get default lm count"); Loading @@ -1557,7 +1562,7 @@ static int _sde_connector_primary_preference(struct sde_connector *sde_conn, return -EINVAL; } sde_hw_mixer_set_preference(sde_kms->catalog, num_lm); sde_hw_mixer_set_preference(sde_kms->catalog, num_lm, disp_type); return ret; } Loading Loading @@ -2453,8 +2458,8 @@ struct drm_connector *sde_connector_init(struct drm_device *dev, goto error_destroy_property; } if (display_info.is_primary) _sde_connector_primary_preference(c_conn, sde_kms); _sde_connector_lm_preference(c_conn, sde_kms, display_info.display_type); SDE_DEBUG("connector %d attach encoder %d\n", c_conn->base.base.id, encoder->base.id); Loading
msm/sde/sde_connector.h +10 −0 Original line number Diff line number Diff line Loading @@ -314,6 +314,16 @@ struct sde_connector_ops { int (*get_default_lms)(void *display, u32 *num_lm); }; /** * enum sde_connector_display_type - list of display types */ enum sde_connector_display { SDE_CONNECTOR_UNDEFINED, SDE_CONNECTOR_PRIMARY, SDE_CONNECTOR_SECONDARY, SDE_CONNECTOR_MAX }; /** * enum sde_connector_events - list of recognized connector events */ Loading
msm/sde/sde_encoder.c +12 −11 Original line number Diff line number Diff line Loading @@ -411,7 +411,9 @@ bool sde_encoder_is_primary_display(struct drm_encoder *drm_enc) { struct sde_encoder_virt *sde_enc = to_sde_encoder_virt(drm_enc); return sde_enc && sde_enc->disp_info.is_primary; return sde_enc && (sde_enc->disp_info.display_type == SDE_CONNECTOR_PRIMARY); } int sde_encoder_in_cont_splash(struct drm_encoder *drm_enc) Loading Loading @@ -662,7 +664,7 @@ void sde_encoder_get_hw_resources(struct drm_encoder *drm_enc, sde_connector_get_mode_info(conn_state, &sde_enc->mode_info); hw_res->topology = sde_enc->mode_info.topology; hw_res->is_primary = sde_enc->disp_info.is_primary; hw_res->display_type = sde_enc->disp_info.display_type; } void sde_encoder_destroy(struct drm_encoder *drm_enc) Loading Loading @@ -1903,8 +1905,9 @@ static int _sde_encoder_update_rsc_client( qsync_mode = sde_connector_get_qsync_mode( sde_enc->cur_master->connector); if (sde_encoder_in_clone_mode(drm_enc) || !disp_info->is_primary || (disp_info->is_primary && qsync_mode)) if (sde_encoder_in_clone_mode(drm_enc) || (disp_info->display_type != SDE_CONNECTOR_PRIMARY) || (disp_info->display_type && qsync_mode)) rsc_state = enable ? SDE_RSC_CLK_STATE : SDE_RSC_IDLE_STATE; else if (sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE)) rsc_state = enable ? SDE_RSC_CMD_STATE : SDE_RSC_IDLE_STATE; Loading @@ -1930,7 +1933,7 @@ static int _sde_encoder_update_rsc_client( } if (rsc_state != SDE_RSC_IDLE_STATE && !sde_enc->rsc_state_init && disp_info->is_primary) { && (disp_info->display_type == SDE_CONNECTOR_PRIMARY)) { /* update it only once */ sde_enc->rsc_state_init = true; Loading Loading @@ -2046,7 +2049,7 @@ static int _sde_encoder_resource_control_helper(struct drm_encoder *drm_enc, struct sde_kms *sde_kms; struct sde_encoder_virt *sde_enc; int rc; bool is_cmd_mode = false, is_primary; bool is_cmd_mode = false; sde_enc = to_sde_encoder_virt(drm_enc); priv = drm_enc->dev->dev_private; Loading @@ -2055,8 +2058,6 @@ static int _sde_encoder_resource_control_helper(struct drm_encoder *drm_enc, if (sde_encoder_check_curr_mode(drm_enc, MSM_DISPLAY_CMD_MODE)) is_cmd_mode = true; is_primary = sde_enc->disp_info.is_primary; SDE_DEBUG_ENC(sde_enc, "enable:%d\n", enable); SDE_EVT32(DRMID(drm_enc), enable); Loading Loading @@ -3261,7 +3262,7 @@ static void sde_encoder_virt_disable(struct drm_encoder *drm_enc) * they have been fully disabled, so delay the pre-stop operations * until after the physical disable calls have returned. */ if (sde_enc->disp_info.is_primary && if (sde_enc->disp_info.display_type == SDE_CONNECTOR_PRIMARY && (intf_mode == INTF_MODE_CMD || intf_mode == INTF_MODE_VIDEO)) { sde_encoder_resource_control(drm_enc, SDE_ENC_RC_EVENT_PRE_STOP); Loading Loading @@ -4642,7 +4643,6 @@ int sde_encoder_prepare_for_kickoff(struct drm_encoder *drm_enc, SDE_ATRACE_BEGIN("sde_encoder_prepare_for_kickoff"); for (i = 0; i < sde_enc->num_phys_encs; i++) { phys = sde_enc->phys_encs[i]; params->is_primary = sde_enc->disp_info.is_primary; params->frame_trigger_mode = sde_enc->frame_trigger_mode; params->recovery_events_enabled = sde_enc->recovery_events_enabled; Loading Loading @@ -5499,7 +5499,8 @@ struct drm_encoder *sde_encoder_init_with_ops( } snprintf(name, SDE_NAME_SIZE, "rsc_enc%u", drm_enc->base.id); sde_enc->rsc_client = sde_rsc_client_create(SDE_RSC_INDEX, name, disp_info->is_primary ? SDE_RSC_PRIMARY_DISP_CLIENT : (disp_info->display_type == SDE_CONNECTOR_PRIMARY) ? SDE_RSC_PRIMARY_DISP_CLIENT : SDE_RSC_EXTERNAL_DISP_CLIENT, intf_index + 1); if (IS_ERR_OR_NULL(sde_enc->rsc_client)) { SDE_DEBUG("sde rsc client create failed :%ld\n", Loading