From patchwork Thu Jan 30 21:19:32 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sean Paul X-Patchwork-Id: 3559491 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 9897FC02DD for ; Thu, 30 Jan 2014 21:23:08 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BD92720181 for ; Thu, 30 Jan 2014 21:23:07 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id CA321201B9 for ; Thu, 30 Jan 2014 21:23:06 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5171D45FE6; Thu, 30 Jan 2014 13:23:01 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-qa0-f50.google.com (mail-qa0-f50.google.com [209.85.216.50]) by gabe.freedesktop.org (Postfix) with ESMTP id BF15847452 for ; Thu, 30 Jan 2014 13:20:42 -0800 (PST) Received: by mail-qa0-f50.google.com with SMTP id cm18so5120100qab.23 for ; Thu, 30 Jan 2014 13:20:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=CWRt6da8DBLtkMZBC28JROX13wzOOygt7U1Cw/2eWfk=; b=AlxQSrSaCCxU7OahuQuBOp1W1UaYoR7D7eEjzuU03vyvZZ4ehOabovi8RmEqH33xtf zpoM6S3iN2wo+8ngahNMAbaWukQAL0lf3iUe007Z6CR/+RnGGjyq7Qdiji6ZFF5A+bDN jK21X7JLvVyWpiyy69amZufHE0XjkcICD7Ofo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=CWRt6da8DBLtkMZBC28JROX13wzOOygt7U1Cw/2eWfk=; b=LIKMpGaH5gbpD1JxOzDgWn/L9GOqRATevZWfpXILf69kfdjyZBx1jFDTWRwJ50FDn3 mEOU/FGUXTldeDLjXOdKvzft55kqcMgqxrQuyRGqpw5NLBNIjU7XjwJi6XYUybty5y3p zRaHtMz34+eua/MLimTpQHOgYk8Xk6OPHXvyvX9SbJ0aJUAaH4gVRemxAf+9l90VtOZZ sdpPqIIvyeZkCNSkvvUdKUNNIRiu6amhg/NIj7OeXaFnGUONqYu40YKf+rhzQOrpT4lR GcUagyX8iVam2c30iRcdDCzLMryPgytc22z09RkgTs6UsM02Sr7Fn7uMFGvgmXcsAkHk 2zGw== X-Gm-Message-State: ALoCoQnwpkYLgwP4Tdj/DyFRgaq6C7zBoKLyESDriBtNP9GUxd6OHRtBOHYJMDn4kP8AsvVSFooR X-Received: by 10.229.139.199 with SMTP id f7mr25882349qcu.2.1391116842107; Thu, 30 Jan 2014 13:20:42 -0800 (PST) Received: from seanpaul-glaptop.roam.corp.google.com (cpe-173-095-180-236.nc.res.rr.com. [173.95.180.236]) by mx.google.com with ESMTPSA id r13sm20673608qan.7.2014.01.30.13.20.40 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 30 Jan 2014 13:20:41 -0800 (PST) From: Sean Paul To: dri-devel@lists.freedesktop.org, inki.dae@samsung.com Subject: [PATCH v4 33/34] drm/exynos: Move lvds bridge discovery into DP driver Date: Thu, 30 Jan 2014 16:19:32 -0500 Message-Id: <1391116773-28471-34-git-send-email-seanpaul@chromium.org> X-Mailer: git-send-email 1.8.5.1 In-Reply-To: <1391116773-28471-1-git-send-email-seanpaul@chromium.org> References: <1391116773-28471-1-git-send-email-seanpaul@chromium.org> Cc: marcheu@chromium.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dri-devel-bounces@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org X-Spam-Status: No, score=-4.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,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 This patch moves the lvds bridge discovery and connector pre-emption code from exynos common code into the dp driver (since the bridge is only applicable for dp). Signed-off-by: Sean Paul --- Changes in v3: - Added to the patchset Changes in v4: None drivers/gpu/drm/exynos/exynos_dp_core.c | 41 ++++++++++++++++++++++++++++++++ drivers/gpu/drm/exynos/exynos_drm_core.c | 41 -------------------------------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c index af2c9d2..a59bca9 100644 --- a/drivers/gpu/drm/exynos/exynos_dp_core.c +++ b/drivers/gpu/drm/exynos/exynos_dp_core.c @@ -25,6 +25,7 @@ #include #include #include +#include #include "exynos_drm_drv.h" #include "exynos_dp_core.h" @@ -32,6 +33,11 @@ #define ctx_from_connector(c) container_of(c, struct exynos_dp_device, \ connector) +struct bridge_init { + struct i2c_client *client; + struct device_node *node; +}; + static int exynos_dp_init_dp(struct exynos_dp_device *dp) { exynos_dp_reset(dp); @@ -973,6 +979,35 @@ static int exynos_dp_initialize(struct exynos_drm_display *display, return 0; } +static bool find_bridge(const char *compat, struct bridge_init *bridge) +{ + bridge->client = NULL; + bridge->node = of_find_compatible_node(NULL, NULL, compat); + if (!bridge->node) + return false; + + bridge->client = of_find_i2c_device_by_node(bridge->node); + if (!bridge->client) + return false; + + return true; +} + +/* returns the number of bridges attached */ +static int exynos_drm_attach_lcd_bridge(struct drm_device *dev, + struct drm_encoder *encoder) +{ + struct bridge_init bridge; + int ret; + + if (find_bridge("nxp,ptn3460", &bridge)) { + ret = ptn3460_init(dev, encoder, bridge.client, bridge.node); + if (!ret) + return 1; + } + return 0; +} + static int exynos_dp_create_connector(struct exynos_drm_display *display, struct drm_encoder *encoder) { @@ -981,6 +1016,12 @@ static int exynos_dp_create_connector(struct exynos_drm_display *display, int ret; dp->encoder = encoder; + + /* Pre-empt DP connector creation if there's a bridge */ + ret = exynos_drm_attach_lcd_bridge(dp->drm_dev, encoder); + if (ret) + return 0; + connector->polled = DRM_CONNECTOR_POLL_HPD; ret = drm_connector_init(dp->drm_dev, connector, diff --git a/drivers/gpu/drm/exynos/exynos_drm_core.c b/drivers/gpu/drm/exynos/exynos_drm_core.c index 1a60f5a..2446352 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_core.c +++ b/drivers/gpu/drm/exynos/exynos_drm_core.c @@ -14,7 +14,6 @@ #include #include -#include #include "exynos_drm_drv.h" #include "exynos_drm_crtc.h" #include "exynos_drm_encoder.h" @@ -25,40 +24,6 @@ static LIST_HEAD(exynos_drm_subdrv_list); static LIST_HEAD(exynos_drm_manager_list); static LIST_HEAD(exynos_drm_display_list); -struct bridge_init { - struct i2c_client *client; - struct device_node *node; -}; - -static bool find_bridge(const char *compat, struct bridge_init *bridge) -{ - bridge->client = NULL; - bridge->node = of_find_compatible_node(NULL, NULL, compat); - if (!bridge->node) - return false; - - bridge->client = of_find_i2c_device_by_node(bridge->node); - if (!bridge->client) - return false; - - return true; -} - -/* returns the number of bridges attached */ -static int exynos_drm_attach_lcd_bridge(struct drm_device *dev, - struct drm_encoder *encoder) -{ - struct bridge_init bridge; - int ret; - - if (find_bridge("nxp,ptn3460", &bridge)) { - ret = ptn3460_init(dev, encoder, bridge.client, bridge.node); - if (!ret) - return 1; - } - return 0; -} - static int exynos_drm_create_enc_conn(struct drm_device *dev, struct exynos_drm_display *display) { @@ -81,12 +46,6 @@ static int exynos_drm_create_enc_conn(struct drm_device *dev, } display->encoder = encoder; - if (display->type == EXYNOS_DISPLAY_TYPE_LCD) { - ret = exynos_drm_attach_lcd_bridge(dev, encoder); - if (ret) - return 0; - } - if (display->ops->create_connector) return display->ops->create_connector(display, encoder);