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: Archit Taneja <architt@codeaurora.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
9696acbcbf
commit
af6d0423df
|
@ -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,
|
||||||
|
|
||||||
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)
|
||||||
};
|
};
|
||||||
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)
|
||||||
* 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
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue