drm/i915: Detect if MIPI panel based on VBT and initialize only if present
It seems by default the VBT has MIPI configuration block as well. The Generic driver will assume always MIPI if MIPI configuration block is found. This is causing probelm when actually there is eDP. Fix this by looking into general definition block which will have device configurations. From here we can figure out what is the LFP type and initialize MIPI only if MIPI is found. v2: Addressed review comments by Damien - Moved PORT definitions to intel_bios.h and renamed as DVO_PORT_MIPIA - renamed is_mipi to has_mipi and moved definition as suggested - Check has_mipi inside parse_mipi and intel_dsi_init insted of outside v3: Make has_mipi as a bitfield as suggested Signed-off-by: Shobhit Kumar <shobhit.kumar@intel.com> Reviewed-by: Damien Lespiau <damien.lespiau@intel.com> [danvet: fold in conditions to pack everything neatly below 80 chars.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:

committed by
Daniel Vetter

parent
c98f506287
commit
3e6bd01178
@@ -720,6 +720,10 @@ parse_mipi(struct drm_i915_private *dev_priv, struct bdb_header *bdb)
|
||||
int i, panel_id, seq_size;
|
||||
u16 block_size;
|
||||
|
||||
/* parse MIPI blocks only if LFP type is MIPI */
|
||||
if (!dev_priv->vbt.has_mipi)
|
||||
return;
|
||||
|
||||
/* Initialize this to undefined indicating no generic MIPI support */
|
||||
dev_priv->vbt.dsi.panel_id = MIPI_DSI_UNDEFINED_PANEL_ID;
|
||||
|
||||
@@ -1035,6 +1039,15 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
|
||||
/* skip the device block if device type is invalid */
|
||||
continue;
|
||||
}
|
||||
|
||||
if (p_child->common.dvo_port >= DVO_PORT_MIPIA
|
||||
&& p_child->common.dvo_port <= DVO_PORT_MIPID
|
||||
&&p_child->common.device_type & DEVICE_TYPE_MIPI_OUTPUT) {
|
||||
DRM_DEBUG_KMS("Found MIPI as LFP\n");
|
||||
dev_priv->vbt.has_mipi = 1;
|
||||
dev_priv->vbt.dsi.port = p_child->common.dvo_port;
|
||||
}
|
||||
|
||||
child_dev_ptr = dev_priv->vbt.child_dev + count;
|
||||
count++;
|
||||
memcpy((void *)child_dev_ptr, (void *)p_child,
|
||||
|
Reference in New Issue
Block a user