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

Commit af6d0423 authored by Archit Taneja's avatar Archit Taneja Committed by Rob Clark
Browse files

drm/msm/mdp4: Initialize DSI encoders



Create DSI encoders during modeset_init. The 2 encoders should ideally be
one command mode and one video mode DSI encoder respectively, but we don't
support command mode yet. We just create 2 of the same because the dsi
driver expects it, we end up using only the first one.

Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent 9696acbc
Loading
Loading
Loading
Loading
+36 −1
Original line number Diff line number Diff line
@@ -279,6 +279,8 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
	struct drm_encoder *encoder;
	struct drm_connector *connector;
	struct device_node *panel_node;
	struct drm_encoder *dsi_encs[MSM_DSI_ENCODER_NUM];
	int i, dsi_id;
	int ret;

	switch (intf_type) {
@@ -333,13 +335,42 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,

		priv->encoders[priv->num_encoders++] = encoder;

		break;
	case DRM_MODE_ENCODER_DSI:
		/* only DSI1 supported for now */
		dsi_id = 0;

		if (!priv->dsi[dsi_id])
			break;

		for (i = 0; i < MSM_DSI_ENCODER_NUM; i++) {
			dsi_encs[i] = mdp4_dsi_encoder_init(dev);
			if (IS_ERR(dsi_encs[i])) {
				ret = PTR_ERR(dsi_encs[i]);
				dev_err(dev->dev,
					"failed to construct DSI encoder: %d\n",
					ret);
				return ret;
			}

			/* TODO: Add DMA_S later? */
			dsi_encs[i]->possible_crtcs = 1 << DMA_P;
			priv->encoders[priv->num_encoders++] = dsi_encs[i];
		}

		ret = msm_dsi_modeset_init(priv->dsi[dsi_id], dev, dsi_encs);
		if (ret) {
			dev_err(dev->dev, "failed to initialize DSI: %d\n",
				ret);
			return ret;
		}

		break;
	default:
		dev_err(dev->dev, "Invalid or unsupported interface\n");
		return -EINVAL;
	}


	return 0;
}

@@ -364,6 +395,7 @@ static int modeset_init(struct mdp4_kms *mdp4_kms)
	};
	static const int mdp4_intfs[] = {
		DRM_MODE_ENCODER_LVDS,
		DRM_MODE_ENCODER_DSI,
		DRM_MODE_ENCODER_TMDS,
	};

@@ -404,6 +436,9 @@ static int modeset_init(struct mdp4_kms *mdp4_kms)
	 * we currently set up two relatively fixed paths:
	 *
	 * LCDC/LVDS path: RGB1 -> DMA_P -> LCDC -> LVDS
	 *			or
	 * DSI path: RGB1 -> DMA_P -> DSI1 -> DSI Panel
	 *
	 * DTV/HDMI path: RGB2 -> DMA_E -> DTV -> HDMI
	 */