From patchwork Wed Aug 27 14:29:40 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajay Kumar X-Patchwork-Id: 4791701 Return-Path: X-Original-To: patchwork-dri-devel@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 4EB349F38D for ; Thu, 28 Aug 2014 02:17:53 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 76CDC2017D for ; Thu, 28 Aug 2014 02:17:52 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 7637C2017E for ; Thu, 28 Aug 2014 02:17:51 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C02846E57B; Wed, 27 Aug 2014 19:17:45 -0700 (PDT) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout3.samsung.com (mailout3.samsung.com [203.254.224.33]) by gabe.freedesktop.org (Postfix) with ESMTP id D982A89A4F for ; Wed, 27 Aug 2014 07:39:50 -0700 (PDT) Received: from epcpsbgr4.samsung.com (u144.gpu120.samsung.co.kr [203.254.230.144]) by mailout3.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NAY00IVEZEDOV70@mailout3.samsung.com> for dri-devel@lists.freedesktop.org; Wed, 27 Aug 2014 23:39:49 +0900 (KST) Received: from epcpsbgm2.samsung.com ( [172.20.52.122]) by epcpsbgr4.samsung.com (EPCPMTA) with SMTP id 50.A8.04442.5BDEDF35; Wed, 27 Aug 2014 23:39:49 +0900 (KST) X-AuditID: cbfee690-f79ce6d00000115a-52-53fdedb51277 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm2.samsung.com (EPCPMTA) with SMTP id 1A.29.05196.5BDEDF35; Wed, 27 Aug 2014 23:39:49 +0900 (KST) Received: from chromebld-server.sisodomain.com ([107.108.73.106]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NAY00EVDZ3VVJ90@mmp1.samsung.com>; Wed, 27 Aug 2014 23:39:49 +0900 (KST) From: Ajay Kumar To: dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org Subject: [PATCH V7 06/12] drm/bridge: ptn3460: support drm_panel Date: Wed, 27 Aug 2014 19:59:40 +0530 Message-id: <1409149783-12416-7-git-send-email-ajaykumar.rs@samsung.com> X-Mailer: git-send-email 1.7.9.5 In-reply-to: <1409149783-12416-1-git-send-email-ajaykumar.rs@samsung.com> References: <1409149783-12416-1-git-send-email-ajaykumar.rs@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrKLMWRmVeSWpSXmKPExsWyRsSkSnfr27/BBot3GVoceH+QxWLDm4XM Fgsf3mW2uPL1PZvFpPsTWCwuL7zEavF91xd2ixnn9zFZrDq8gd3i+cIfzBZzD+Za/Nw1j8WB x2PvtwUsHjtn3WX3WLCp1ON+93Emj74tqxg9Pm+SC2CL4rJJSc3JLEst0rdL4Mp4M+cRe8EB 2YoPPyUaGJdJdDFyckgImEisWnGLDcIWk7hwbz2QzcUhJLCUUaJvw0tWmKItzTCJRYwSLQ9W MkE4E5gkfh1qZQepYhPQltg2/SYLiC0i4CbRdHgmK0gRs8A3RokLC9eB7RAWcJD4O/81cxcj BweLgKrE2wkcICavgIfEysZAEFNCQEFiziQbkGJOAU+Jhzv2g90gBFSx5PFVsBskBI6xS5w7 95YRJMEiICDxbfIhFoheWYlNB5ghbpaUOLjiBssERuEFjAyrGEVTC5ILipPSi0z0ihNzi0vz 0vWS83M3MQJj4/S/ZxN2MN47YH2IUYCDUYmH98OCP8FCrIllxZW5hxhNgTZMZJYSTc4HRmBe SbyhsZmRhamJqbGRuaWZkjjva6mfwUIC6YklqdmpqQWpRfFFpTmpxYcYmTg4pRoY06U/2+9i 5VxnlfDU9MJMGffT0TnHxD9Vyj2XPHLn5JLTHJ8E1s/kjXDjKPsd218+1dWB6dbJ/7M37fdK qhbg0zDVCjfpfnT09CGZOu4sM+MZ3ieDn84S9lqr/eTRtQ0SC3qaZu1oDxE7wfWGd8qPCmeN uq8fV+pG5Aj+KBDXnfRM7MnDOYKsSizFGYmGWsxFxYkAgZoJtogCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrPIsWRmVeSWpSXmKPExsVy+t9jAd2tb/8GG8y/rG5x4P1BFosNbxYy Wyx8eJfZ4srX92wWk+5PYLG4vPASq8X3XV/YLWac38dkserwBnaL5wt/MFvMPZhr8XPXPBYH Ho+93xaweOycdZfdY8GmUo/73ceZPPq2rGL0+LxJLoAtqoHRJiM1MSW1SCE1Lzk/JTMv3VbJ OzjeOd7UzMBQ19DSwlxJIS8xN9VWycUnQNctMwfoRiWFssScUqBQQGJxsZK+HaYJoSFuuhYw jRG6viFBcD1GBmggYQ1jxps5j9gLDshWfPgp0cC4TKKLkZNDQsBEYkvzejYIW0ziwj0Qm4tD SGARo0TLg5VMEM4EJolfh1rZQarYBLQltk2/yQJiiwi4STQdnskKUsQs8I1R4sLCdWCjhAUc JP7Of83cxcjBwSKgKvF2AgeIySvgIbGyMRDElBBQkJgzyQakmFPAU+Lhjv2sILYQUMWSx1fZ JjDyLmBkWMUomlqQXFCclJ5rpFecmFtcmpeul5yfu4kRHHnPpHcwrmqwOMQowMGoxMP7YcGf YCHWxLLiytxDjBIczEoivGUH/gYL8aYkVlalFuXHF5XmpBYfYjQFOmkis5Rocj4wKeSVxBsa m5ibGptamliYmFkqifMebLUOFBJITyxJzU5NLUgtgulj4uCUamDk6fxw8Zz78rc/0zb8Lk/8 43N94lGBwxyRLbxZr511d/RqF8WVcqydO3WTxcIrReZ1kb6mU9aofY/Zwce+8MYz9mdpIh2f fXtOn3hjJvPA29vtp0LNxWVt93L8I/qqBHvEs06YuoofkSgTPFMqsarx9vHvaeLxCybt6rD+ usxZeNcWq2/zlzkrsRRnJBpqMRcVJwIAL7LGCdICAAA= DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected X-Mailman-Approved-At: Wed, 27 Aug 2014 19:17:44 -0700 Cc: seanpaul@google.com, daniel.vetter@ffwll.ch, joshi@samsung.com, ajaynumb@gmail.com, prashanth.g@samsung.com, 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.2 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 Add drm_panel calls to the driver to make the panel and bridge work together in tandem. Signed-off-by: Ajay Kumar --- drivers/gpu/drm/bridge/Kconfig | 1 + drivers/gpu/drm/bridge/ptn3460.c | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/drivers/gpu/drm/bridge/Kconfig b/drivers/gpu/drm/bridge/Kconfig index 7e63a52..d35fb68 100644 --- a/drivers/gpu/drm/bridge/Kconfig +++ b/drivers/gpu/drm/bridge/Kconfig @@ -12,6 +12,7 @@ config DRM_PTN3460 tristate "PTN3460 DP/LVDS bridge" depends on OF depends on I2C + select DRM_PANEL help ptn3460 eDP-LVDS bridge chip driver. diff --git a/drivers/gpu/drm/bridge/ptn3460.c b/drivers/gpu/drm/bridge/ptn3460.c index 651640a..3cb3a7c 100644 --- a/drivers/gpu/drm/bridge/ptn3460.c +++ b/drivers/gpu/drm/bridge/ptn3460.c @@ -20,6 +20,8 @@ #include #include +#include + #include "bridge/ptn3460.h" #include "drm_crtc.h" @@ -38,6 +40,7 @@ struct ptn3460_bridge { struct i2c_client *client; struct drm_bridge bridge; struct edid *edid; + struct drm_panel *panel; int gpio_pd_n; int gpio_rst_n; u32 edid_emulation; @@ -137,6 +140,11 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge) gpio_set_value(ptn_bridge->gpio_rst_n, 1); } + if (drm_panel_prepare(ptn_bridge->panel)) { + DRM_ERROR("failed to prepare panel\n"); + return; + } + /* * There's a bug in the PTN chip where it falsely asserts hotplug before * it is fully functional. We're forced to wait for the maximum start up @@ -153,6 +161,12 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge) static void ptn3460_enable(struct drm_bridge *bridge) { + struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge); + + if (drm_panel_enable(ptn_bridge->panel)) { + DRM_ERROR("failed to enable panel\n"); + return; + } } static void ptn3460_disable(struct drm_bridge *bridge) @@ -164,6 +178,11 @@ static void ptn3460_disable(struct drm_bridge *bridge) ptn_bridge->enabled = false; + if (drm_panel_disable(ptn_bridge->panel)) { + DRM_ERROR("failed to disable panel\n"); + return; + } + if (gpio_is_valid(ptn_bridge->gpio_rst_n)) gpio_set_value(ptn_bridge->gpio_rst_n, 1); @@ -173,6 +192,12 @@ static void ptn3460_disable(struct drm_bridge *bridge) static void ptn3460_post_disable(struct drm_bridge *bridge) { + struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge); + + if (drm_panel_unprepare(ptn_bridge->panel)) { + DRM_ERROR("failed to unprepare panel\n"); + return; + } } static void ptn3460_bridge_destroy(struct drm_bridge *bridge) @@ -274,6 +299,9 @@ int ptn3460_bridge_attach(struct drm_bridge *bridge) drm_mode_connector_attach_encoder(&ptn_bridge->connector, bridge->encoder); + if (ptn_bridge->panel) + drm_panel_attach(ptn_bridge->panel, &ptn_bridge->connector); + return ret; } @@ -291,6 +319,7 @@ static int ptn3460_probe(struct i2c_client *client, { struct device *dev = &client->dev; struct ptn3460_bridge *ptn_bridge; + struct device_node *panel_node; int ret; ptn_bridge = devm_kzalloc(dev, sizeof(*ptn_bridge), GFP_KERNEL); @@ -298,6 +327,14 @@ static int ptn3460_probe(struct i2c_client *client, return -ENOMEM; } + panel_node = of_parse_phandle(dev->of_node, "panel", 0); + if (panel_node) { + ptn_bridge->panel = of_drm_find_panel(panel_node); + of_node_put(panel_node); + if (!ptn_bridge->panel) + return -EPROBE_DEFER; + } + ptn_bridge->client = client; ptn_bridge->gpio_pd_n = of_get_named_gpio(dev->of_node, "powerdown-gpio", 0);