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

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
...@@ -279,6 +279,8 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms, ...@@ -279,6 +279,8 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
struct drm_encoder *encoder; struct drm_encoder *encoder;
struct drm_connector *connector; struct drm_connector *connector;
struct device_node *panel_node; struct device_node *panel_node;
struct drm_encoder *dsi_encs[MSM_DSI_ENCODER_NUM];
int i, dsi_id;
int ret; int ret;
switch (intf_type) { switch (intf_type) {
...@@ -333,13 +335,42 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms, ...@@ -333,13 +335,42 @@ static int mdp4_modeset_init_intf(struct mdp4_kms *mdp4_kms,
priv->encoders[priv->num_encoders++] = encoder; 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; break;
default: default:
dev_err(dev->dev, "Invalid or unsupported interface\n"); dev_err(dev->dev, "Invalid or unsupported interface\n");
return -EINVAL; return -EINVAL;
} }
return 0; return 0;
} }
...@@ -364,6 +395,7 @@ static int modeset_init(struct mdp4_kms *mdp4_kms) ...@@ -364,6 +395,7 @@ static int modeset_init(struct mdp4_kms *mdp4_kms)
}; };
static const int mdp4_intfs[] = { static const int mdp4_intfs[] = {
DRM_MODE_ENCODER_LVDS, DRM_MODE_ENCODER_LVDS,
DRM_MODE_ENCODER_DSI,
DRM_MODE_ENCODER_TMDS, DRM_MODE_ENCODER_TMDS,
}; };
...@@ -404,6 +436,9 @@ static int modeset_init(struct mdp4_kms *mdp4_kms) ...@@ -404,6 +436,9 @@ static int modeset_init(struct mdp4_kms *mdp4_kms)
* we currently set up two relatively fixed paths: * we currently set up two relatively fixed paths:
* *
* LCDC/LVDS path: RGB1 -> DMA_P -> LCDC -> LVDS * 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 * DTV/HDMI path: RGB2 -> DMA_E -> DTV -> HDMI
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment