[Intel-gfx] [PATCH] drm/i915: Detect if MIPI panel based on VBT and initialize only if present
Daniel Vetter
daniel at ffwll.ch
Tue May 27 13:40:57 CEST 2014
On Fri, May 23, 2014 at 09:39:28PM +0530, Shobhit Kumar wrote:
> 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.
>
> Signed-off-by: Shobhit Kumar <shobhit.kumar at intel.com>
Will the mipi patch I've just merged without this one here break machines?
If so we need to get this one here into shape asap, for otherwise I need
to kick out the mipi patch again. Which we really don't want.
-Daniel
> ---
> drivers/gpu/drm/i915/i915_drv.h | 2 ++
> drivers/gpu/drm/i915/intel_bios.c | 20 +++++++++++++++++++-
> drivers/gpu/drm/i915/intel_display.c | 4 +++-
> 3 files changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 8e78703..5a5225b 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1229,7 +1229,9 @@ struct intel_vbt_data {
> } backlight;
>
> /* MIPI DSI */
> + int is_mipi;
> struct {
> + u16 port;
> u16 panel_id;
> struct mipi_config *config;
> struct mipi_pps_data *pps;
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index 6b65096..b825c80 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -1059,6 +1059,20 @@ parse_device_mapping(struct drm_i915_private *dev_priv,
> /* skip the device block if device type is invalid */
> continue;
> }
> +
> +#define MIPI_PORT_A 0x15
> +#define MIPI_PORT_B 0x16
> +#define MIPI_PORT_C 0x17
> +#define MIPI_PORT_D 0x18
> + if (p_child->common.dvo_port >= MIPI_PORT_A && p_child->common.dvo_port <= MIPI_PORT_D) {
> + /* check the device type and confirm its MIPI */
> + if (p_child->common.device_type & DEVICE_TYPE_MIPI_OUTPUT) {
> + DRM_DEBUG_KMS("Found MIPI as LFP\n");
> + dev_priv->vbt.is_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,
> @@ -1230,7 +1244,11 @@ intel_parse_bios(struct drm_device *dev)
> parse_device_mapping(dev_priv, bdb);
> parse_driver_features(dev_priv, bdb);
> parse_edp(dev_priv, bdb);
> - parse_mipi(dev_priv, bdb);
> +
> + /* parse MIPI blocks only if LFP type is MIPI */
> + if (dev_priv->vbt.is_mipi)
> + parse_mipi(dev_priv, bdb);
> +
> parse_ddi_ports(dev_priv, bdb);
>
> if (bios)
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index 3da73ef..a55fa41 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -11151,7 +11151,9 @@ static void intel_setup_outputs(struct drm_device *dev)
> }
> }
>
> - intel_dsi_init(dev);
> + /* There is no detection method for MIPI so rely on VBT */
> + if (dev_priv->vbt.is_mipi)
> + intel_dsi_init(dev);
> } else if (SUPPORTS_DIGITAL_OUTPUTS(dev)) {
> bool found = false;
>
> --
> 1.8.3.2
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
--
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
More information about the Intel-gfx
mailing list