Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2e2228a9 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "ARM: dts: msm: Add dsc 3d-mux merge for truly nt35597 on sdm845"

parents 83b326b8 6ffb0940
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -493,7 +493,8 @@
	qcom,mdss-dsi-t-clk-post = <0x0b>;
	qcom,mdss-dsi-t-clk-pre = <0x23>;
	qcom,display-topology = <1 1 1>,
				<2 2 1>;
				<2 2 1>, /* dsc merge */
				<2 1 1>; /* 3d mux */
	qcom,default-topology-index = <0>;
};

@@ -502,7 +503,8 @@
	qcom,mdss-dsi-t-clk-post = <0x0b>;
	qcom,mdss-dsi-t-clk-pre = <0x23>;
	qcom,display-topology = <1 1 1>,
				<2 2 1>;
				<2 2 1>, /* dsc merge */
				<2 1 1>; /* 3d mux */
	qcom,default-topology-index = <0>;
};

+42 −0
Original line number Diff line number Diff line
@@ -735,6 +735,25 @@ static int _sde_crtc_set_roi_v1(struct drm_crtc_state *state,
	return 0;
}

static bool _sde_crtc_setup_is_3dmux_dsc(struct drm_crtc_state *state)
{
	int i;
	struct sde_crtc_state *cstate;
	bool is_3dmux_dsc = false;

	cstate = to_sde_crtc_state(state);

	for (i = 0; i < cstate->num_connectors; i++) {
		struct drm_connector *conn = cstate->connectors[i];

		if (sde_connector_get_topology_name(conn) ==
				SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC)
			is_3dmux_dsc = true;
	}

	return is_3dmux_dsc;
}

static int _sde_crtc_set_crtc_roi(struct drm_crtc *crtc,
		struct drm_crtc_state *state)
{
@@ -768,6 +787,12 @@ static int _sde_crtc_set_crtc_roi(struct drm_crtc *crtc,

		sde_conn_state = to_sde_connector_state(conn_state);

		/*
		 * current driver only supports same connector and crtc size,
		 * but if support for different sizes is added, driver needs
		 * to check the connector roi here to make sure is full screen
		 * for dsc 3d-mux topology that doesn't support partial update.
		 */
		if (memcmp(&sde_conn_state->rois, &crtc_state->user_roi_list,
				sizeof(crtc_state->user_roi_list))) {
			SDE_ERROR("%s: crtc -> conn roi scaling unsupported\n",
@@ -778,6 +803,23 @@ static int _sde_crtc_set_crtc_roi(struct drm_crtc *crtc,

	sde_kms_rect_merge_rectangles(&crtc_state->user_roi_list, crtc_roi);

	/*
	 * for 3dmux dsc, make sure is full ROI, since current driver doesn't
	 * support partial update for this configuration.
	 */
	if (!sde_kms_rect_is_null(crtc_roi) &&
		_sde_crtc_setup_is_3dmux_dsc(state)) {
		struct drm_display_mode *adj_mode = &state->adjusted_mode;

		if (crtc_roi->w != adj_mode->hdisplay ||
			crtc_roi->h != adj_mode->vdisplay) {
			SDE_ERROR("%s: unsupported top roi[%d %d] wxh[%d %d]\n",
				sde_crtc->name, crtc_roi->w, crtc_roi->h,
				adj_mode->hdisplay, adj_mode->vdisplay);
			return -EINVAL;
		}
	}

	SDE_DEBUG("%s: crtc roi (%d,%d,%d,%d)\n", sde_crtc->name,
			crtc_roi->x, crtc_roi->y, crtc_roi->w, crtc_roi->h);

+5 −3
Original line number Diff line number Diff line
@@ -651,7 +651,7 @@ static void _sde_encoder_get_connector_roi(
	sde_kms_rect_merge_rectangles(&c_state->rois, merged_conn_roi);
}

static int _sde_encoder_dsc_1_lm_1_enc_1_intf(struct sde_encoder_virt *sde_enc)
static int _sde_encoder_dsc_n_lm_1_enc_1_intf(struct sde_encoder_virt *sde_enc)
{
	int this_frame_slices;
	int intf_ip_w, enc_ip_w;
@@ -692,6 +692,7 @@ static int _sde_encoder_dsc_1_lm_1_enc_1_intf(struct sde_encoder_virt *sde_enc)

	return 0;
}

static int _sde_encoder_dsc_2_lm_2_enc_2_intf(struct sde_encoder_virt *sde_enc,
		struct sde_encoder_kickoff_params *params)
{
@@ -892,7 +893,7 @@ static int _sde_encoder_dsc_setup(struct sde_encoder_virt *sde_enc,
		return -EINVAL;
	}

	SDE_DEBUG_ENC(sde_enc, "\n");
	SDE_DEBUG_ENC(sde_enc, "topology:%d\n", topology);
	SDE_EVT32(DRMID(&sde_enc->base));

	if (sde_kms_rect_is_equal(&sde_enc->cur_conn_roi,
@@ -901,7 +902,8 @@ static int _sde_encoder_dsc_setup(struct sde_encoder_virt *sde_enc,

	switch (topology) {
	case SDE_RM_TOPOLOGY_SINGLEPIPE_DSC:
		ret = _sde_encoder_dsc_1_lm_1_enc_1_intf(sde_enc);
	case SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC:
		ret = _sde_encoder_dsc_n_lm_1_enc_1_intf(sde_enc);
		break;
	case SDE_RM_TOPOLOGY_DUALPIPE_DSCMERGE:
		ret = _sde_encoder_dsc_2_lm_2_enc_1_intf(sde_enc, params);
+2 −1
Original line number Diff line number Diff line
@@ -434,7 +434,8 @@ static inline enum sde_3d_blend_mode sde_encoder_helper_get_3d_blend_mode(

	topology = sde_connector_get_topology_name(phys_enc->connector);
	if (phys_enc->split_role == ENC_ROLE_SOLO &&
			topology == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE)
			(topology == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE ||
			 topology == SDE_RM_TOPOLOGY_DUALPIPE_3DMERGE_DSC))
		return BLEND_3D_H_ROW_INT;

	return BLEND_3D_NONE;