From patchwork Fri May 23 16:09:28 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Kumar, Shobhit" X-Patchwork-Id: 4234231 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 759119F1CD for ; Fri, 23 May 2014 16:10:39 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id AB218203A0 for ; Fri, 23 May 2014 16:10:38 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 8950C20254 for ; Fri, 23 May 2014 16:10:37 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C6DC46EE7A; Fri, 23 May 2014 09:10:36 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id BCCFE6EE7A for ; Fri, 23 May 2014 09:10:35 -0700 (PDT) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by orsmga102.jf.intel.com with ESMTP; 23 May 2014 09:04:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.98,894,1392192000"; d="scan'208";a="545603102" Received: from unknown (HELO skumar40-mobl.amr.corp.intel.com) ([10.255.13.68]) by orsmga002.jf.intel.com with ESMTP; 23 May 2014 09:09:29 -0700 From: Shobhit Kumar To: intel-gfx Date: Fri, 23 May 2014 21:39:28 +0530 Message-Id: <1400861368-11691-1-git-send-email-shobhit.kumar@intel.com> X-Mailer: git-send-email 1.8.3.2 Cc: Jani Nikula , Daniel Vetter Subject: [Intel-gfx] [PATCH] drm/i915: Detect if MIPI panel based on VBT and initialize only if present X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Spam-Status: No, score=-4.8 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP 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 --- 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;