public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Daniel Vetter <daniel@ffwll.ch>
To: Shobhit Kumar <shobhit.kumar@intel.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>,
	intel-gfx <intel-gfx@lists.freedesktop.org>
Subject: Re: [v3] drm/i915: Detect if MIPI panel based on VBT and initialize only if present
Date: Tue, 27 May 2014 19:10:36 +0200	[thread overview]
Message-ID: <20140527171036.GG14841@phenom.ffwll.local> (raw)
In-Reply-To: <1401199439-22703-1-git-send-email-shobhit.kumar@intel.com>

On Tue, May 27, 2014 at 07:33:59PM +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.
> 
> 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>
> ---
>  drivers/gpu/drm/i915/i915_drv.h   |  2 ++
>  drivers/gpu/drm/i915/intel_bios.c | 14 ++++++++++++++
>  drivers/gpu/drm/i915/intel_bios.h |  4 ++++
>  drivers/gpu/drm/i915/intel_dsi.c  |  4 ++++
>  4 files changed, 24 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 9ef6712..ef7ab0a 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -1208,6 +1208,7 @@ struct intel_vbt_data {
>  	unsigned int lvds_use_ssc:1;
>  	unsigned int display_clock_mode:1;
>  	unsigned int fdi_rx_polarity_inverted:1;
> +	unsigned int has_mipi:1;
>  	int lvds_ssc_freq;
>  	unsigned int bios_lvds_val; /* initial [PCH_]LVDS reg val in VBIOS */
>  
> @@ -1231,6 +1232,7 @@ struct intel_vbt_data {
>  
>  	/* MIPI DSI */
>  	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..6f6b6c6 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -744,6 +744,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;
>  
> @@ -1059,6 +1063,16 @@ 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) {

checkpatch thinks you should break this line. I agree. And folding in the
nested if will make everything neatly fit below 80 chars, so I've done
that. Queued for -next, thanks for the patch.
-Daniel

> +			/* 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.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,
> diff --git a/drivers/gpu/drm/i915/intel_bios.h b/drivers/gpu/drm/i915/intel_bios.h
> index 6009deb..b986677 100644
> --- a/drivers/gpu/drm/i915/intel_bios.h
> +++ b/drivers/gpu/drm/i915/intel_bios.h
> @@ -743,6 +743,10 @@ int intel_parse_bios(struct drm_device *dev);
>  #define DVO_PORT_DPC	8
>  #define DVO_PORT_DPD	9
>  #define DVO_PORT_DPA	10
> +#define DVO_PORT_MIPIA	21
> +#define DVO_PORT_MIPIB	22
> +#define DVO_PORT_MIPIC	23
> +#define DVO_PORT_MIPID	24
>  
>  /* Block 52 contains MIPI Panel info
>   * 6 such enteries will there. Index into correct
> diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c
> index e73bec6..944a421 100644
> --- a/drivers/gpu/drm/i915/intel_dsi.c
> +++ b/drivers/gpu/drm/i915/intel_dsi.c
> @@ -660,6 +660,10 @@ bool intel_dsi_init(struct drm_device *dev)
>  
>  	DRM_DEBUG_KMS("\n");
>  
> +	/* There is no detection method for MIPI so rely on VBT */
> +	if (!dev_priv->vbt.has_mipi)
> +		return false;
> +
>  	intel_dsi = kzalloc(sizeof(*intel_dsi), GFP_KERNEL);
>  	if (!intel_dsi)
>  		return false;
> -- 
> 1.8.3.2
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@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

      parent reply	other threads:[~2014-05-27 17:10 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-05-23 16:09 [PATCH] drm/i915: Detect if MIPI panel based on VBT and initialize only if present Shobhit Kumar
2014-05-27 11:32 ` Damien Lespiau
2014-05-27 12:10   ` Kumar, Shobhit
2014-05-27 12:27     ` Damien Lespiau
2014-05-27 11:40 ` Daniel Vetter
2014-05-27 11:43   ` Kumar, Shobhit
2014-05-27 12:56 ` [v2] " Shobhit Kumar
2014-05-27 13:18   ` Damien Lespiau
2014-05-27 14:03   ` [v3] " Shobhit Kumar
2014-05-27 14:17     ` Damien Lespiau
2014-05-27 14:31       ` Ville Syrjälä
2014-05-27 14:35         ` Damien Lespiau
2014-05-27 17:05           ` Daniel Vetter
2014-05-27 14:31       ` Kumar, Shobhit
2014-05-27 17:10     ` Daniel Vetter [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20140527171036.GG14841@phenom.ffwll.local \
    --to=daniel@ffwll.ch \
    --cc=daniel.vetter@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=shobhit.kumar@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox