From patchwork Tue Apr 29 19:57:43 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Rob Clark X-Patchwork-Id: 4088931 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 35B5ABFF02 for ; Tue, 29 Apr 2014 19:57:59 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 5B94B20172 for ; Tue, 29 Apr 2014 19:57:58 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 86ABD20218 for ; Tue, 29 Apr 2014 19:57:57 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id CD5B26EAB4; Tue, 29 Apr 2014 12:57:56 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-qg0-f42.google.com (mail-qg0-f42.google.com [209.85.192.42]) by gabe.freedesktop.org (Postfix) with ESMTP id 30A286EAB1 for ; Tue, 29 Apr 2014 12:57:54 -0700 (PDT) Received: by mail-qg0-f42.google.com with SMTP id z60so119933qgd.1 for ; Tue, 29 Apr 2014 12:57:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=IJ/RKIdfKWLE9isjz99vi4E8Nex6lSadTD/O7JaWlCg=; b=UfBArvbeHNwjKUhLyTN/L6ve4FzC2r8hrD0+zFP/tH6+vN9aBENu8YxYxN5UD1wzQH znuCY8v0nQ/MWIFxPXKN3H+NbFlgZcdweYd7FTolDy2j8w7wVzuCiNLwONrV1+oqW2sM NiQBLhvXcWCve8Da6T+xJmiY46XIUqqbB+oJq00OG6h/gATkJwHOfgKmlURoTcasH7Pb BFjsKeTQI1UzGe480WesspKJ99KDwZJl8M8wYNwLbNOlFJ8OcNcRBL00rhAJA/x41Lz4 Sw10vq56o+G2nRO53BWHZHDH8qIStZ+RGGGFqKP8mVENar5Hv2ZSWHHb9erINojYiHbo V9EQ== X-Received: by 10.224.160.206 with SMTP id o14mr45074511qax.44.1398801473768; Tue, 29 Apr 2014 12:57:53 -0700 (PDT) Received: from localhost (pool-108-20-245-143.bstnma.east.verizon.net. [108.20.245.143]) by mx.google.com with ESMTPSA id n3sm41353566qaf.36.2014.04.29.12.57.52 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 29 Apr 2014 12:57:53 -0700 (PDT) From: Rob Clark To: dri-devel@lists.freedesktop.org Subject: [RFC 2/2] drm/bridge/ptn3460: add panel support Date: Tue, 29 Apr 2014 15:57:43 -0400 Message-Id: <1398801463-29732-3-git-send-email-robdclark@gmail.com> X-Mailer: git-send-email 1.9.0 In-Reply-To: <1398801463-29732-1-git-send-email-robdclark@gmail.com> References: <1398801463-29732-1-git-send-email-robdclark@gmail.com> Cc: Ajay Kumar X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_MED, RP_MATCHES_RCVD, T_DKIM_INVALID, UNPARSEABLE_RELAY autolearn=ham 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 Signed-off-by: Rob Clark --- drivers/gpu/drm/bridge/ptn3460.c | 39 +++++++++++++++++++++++++++++++++------ include/drm/bridge/ptn3460.h | 6 ++++-- 2 files changed, 37 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/bridge/ptn3460.c b/drivers/gpu/drm/bridge/ptn3460.c index b171901..e3e6b46 100644 --- a/drivers/gpu/drm/bridge/ptn3460.c +++ b/drivers/gpu/drm/bridge/ptn3460.c @@ -26,6 +26,7 @@ #include "drm_crtc_helper.h" #include "bridge/ptn3460.h" +#include "drm_bridge_util.h" #define PTN3460_EDID_ADDR 0x0 #define PTN3460_EDID_EMULATION_ADDR 0x84 @@ -112,7 +113,6 @@ static int ptn3460_select_edid(struct ptn3460_bridge *ptn_bridge) static void ptn3460_pre_enable(struct drm_bridge *bridge) { struct ptn3460_bridge *ptn_bridge = bridge->driver_private; - int ret; if (ptn_bridge->enabled) return; @@ -132,6 +132,15 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge) * time specified in the chip's datasheet to make sure we're really up. */ msleep(90); +} + +static void ptn3460_enable(struct drm_bridge *bridge) +{ + struct ptn3460_bridge *ptn_bridge = bridge->driver_private; + int ret; + + if (ptn_bridge->enabled) + return; ret = ptn3460_select_edid(ptn_bridge); if (ret) @@ -140,10 +149,6 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge) ptn_bridge->enabled = true; } -static void ptn3460_enable(struct drm_bridge *bridge) -{ -} - static void ptn3460_disable(struct drm_bridge *bridge) { struct ptn3460_bridge *ptn_bridge = bridge->driver_private; @@ -265,7 +270,8 @@ struct drm_connector_funcs ptn3460_connector_funcs = { }; int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder, - struct i2c_client *client, struct device_node *node) + struct i2c_client *client, struct device_node *node, + struct drm_panel *panel) { int ret; struct drm_bridge *bridge; @@ -324,6 +330,27 @@ int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder, goto err; } + if (panel) { + struct drm_bridge *cbridge, *pbridge; + + pbridge = drm_panel_bridge_init(panel); + if (IS_ERR(pbridge)) { + ret = PTR_ERR(pbridge); + goto err; + } + + /* panel sequence is after ptn4360 bridge bridge in + * enable path, before in disable path: + */ + cbridge = drm_composite_bridge_init(bridge, pbridge); + if (IS_ERR(cbridge)) { + ret = PTR_ERR(cbridge); + goto err; + } + + bridge = cbridge; + } + bridge->driver_private = ptn_bridge; encoder->bridge = bridge; diff --git a/include/drm/bridge/ptn3460.h b/include/drm/bridge/ptn3460.h index ff62344..9a557da 100644 --- a/include/drm/bridge/ptn3460.h +++ b/include/drm/bridge/ptn3460.h @@ -16,18 +16,20 @@ struct drm_device; struct drm_encoder; +struct drm_panel; struct i2c_client; struct device_node; #if defined(CONFIG_DRM_PTN3460) || defined(CONFIG_DRM_PTN3460_MODULE) int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder, - struct i2c_client *client, struct device_node *node); + struct i2c_client *client, struct device_node *node, + struct drm_panel *panel); #else static inline int ptn3460_init(struct drm_device *dev, struct drm_encoder *encoder, struct i2c_client *client, - struct device_node *node) + struct device_node *node, struct drm_panel *panel) { return 0; }