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

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

Merge changes I89731f52,I85d8b5bd into msm-4.14

* changes:
  drm/msm/sde: create mst drm encoders and bridges
  drm/msm/dp: mst implementation in dp_drm module
parents f3c28875 ab2e8af1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ msm_drm-y := \
	dp/dp_display.o \
	dp/dp_drm.o \
	dp/dp_hdcp2p2.o \
	dp/dp_mst_drm.o \
	sde/sde_crtc.o \
	sde/sde_encoder.o \
	sde/sde_encoder_phys_vid.o \
+4 −1
Original line number Diff line number Diff line
@@ -363,6 +363,7 @@ int dp_connector_config_hdr(struct drm_connector *connector, void *display,

int dp_connector_post_init(struct drm_connector *connector, void *display)
{
	int rc;
	struct dp_display *dp_display = display;
	struct sde_connector *sde_conn;

@@ -378,7 +379,9 @@ int dp_connector_post_init(struct drm_connector *connector, void *display)
	sde_conn = to_sde_connector(connector);
	dp_display->bridge->dp_panel = sde_conn->drv_panel;

	return 0;
	rc = dp_mst_init(dp_display);

	return rc;
}

int dp_connector_get_mode_info(struct drm_connector *connector,
+26 −0
Original line number Diff line number Diff line
@@ -136,5 +136,31 @@ void convert_to_dp_mode(const struct drm_display_mode *drm_mode,
void convert_to_drm_mode(const struct dp_display_mode *dp_mode,
				struct drm_display_mode *drm_mode);

/**
 * dp_mst_drm_bridge_init - initialize mst bridge
 * @display: Pointer to private display structure
 * @encoder: Pointer to encoder for mst bridge mapping
 */
int dp_mst_drm_bridge_init(void *display,
	struct drm_encoder *encoder);

/**
 * dp_mst_drm_bridge_deinit - de-initialize mst bridges
 * @display: Pointer to private display structure
 */
void dp_mst_drm_bridge_deinit(void *display);

/**
 * dp_mst_init - initialize mst objects for the given display
 * @display: Pointer to private display structure
 */
int dp_mst_init(struct dp_display *dp_display);

/**
 * dp_mst_deinit - de-initialize mst objects for the given display
 * @display: Pointer to private display structure
 */
void dp_mst_deinit(struct dp_display *dp_display);

#endif /* _DP_DRM_H_ */
+894 −0

File added.

Preview size limit exceeded, changes collapsed.

+23 −1
Original line number Diff line number Diff line
@@ -857,7 +857,7 @@ static int _sde_kms_get_displays(struct sde_kms *sde_kms)
			dp_display_get_displays(sde_kms->dp_displays,
					sde_kms->dp_display_count);

		sde_kms->dp_stream_count = 0;
		sde_kms->dp_stream_count = dp_display_get_num_of_streams();
	}
	return 0;

@@ -1060,6 +1060,8 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
	/* dp */
	for (i = 0; i < sde_kms->dp_display_count &&
			priv->num_encoders < max_encoders; ++i) {
		int idx;

		display = sde_kms->dp_displays[i];
		encoder = NULL;

@@ -1097,6 +1099,26 @@ static int _sde_kms_setup_displays(struct drm_device *dev,
			dp_drm_bridge_deinit(display);
			sde_encoder_destroy(encoder);
		}

		/* update display cap to MST_MODE for DP MST encoders */
		info.capabilities |= MSM_DISPLAY_CAP_MST_MODE;
		for (idx = 0; idx < sde_kms->dp_stream_count; idx++) {
			info.h_tile_instance[0] = idx;
			encoder = sde_encoder_init(dev, &info);
			if (IS_ERR_OR_NULL(encoder)) {
				SDE_ERROR("dp mst encoder init failed %d\n", i);
				continue;
			}

			rc = dp_mst_drm_bridge_init(display, encoder);
			if (rc) {
				SDE_ERROR("dp mst bridge %d init failed, %d\n",
						i, rc);
				sde_encoder_destroy(encoder);
				continue;
			}
			priv->encoders[priv->num_encoders++] = encoder;
		}
	}

	return 0;