From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752625AbdBCGit (ORCPT ); Fri, 3 Feb 2017 01:38:49 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:47523 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751512AbdBCGir (ORCPT ); Fri, 3 Feb 2017 01:38:47 -0500 MIME-version: 1.0 Content-type: text/plain; charset=utf-8 X-AuditID: b6c32a59-f79be6d0000012bb-a0-589425747cbd Content-transfer-encoding: 8BIT Message-id: <58942572.604@samsung.com> Date: Fri, 03 Feb 2017 15:38:42 +0900 From: Inki Dae User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.6.0 To: Andrzej Hajda , dri-devel@lists.freedesktop.org, Krzysztof Kozlowski Cc: Bartlomiej Zolnierkiewicz , Marek Szyprowski , Kyungmin Park , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org Subject: Re: [PATCH v3 4/7] drm/exynos/hdmi: add bridge support In-reply-to: <1485937754-21440-1-git-send-email-a.hajda@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpjk+LIzCtJLcpLzFFi42LZdlhTU7dEdUqEwY4lAha31p1jtdg4Yz2r xZWv79kszp/fwG5xtukNu8XlXXPYLGac38dksfbIXXYHDo9NqzrZPO53H2fy6NuyitHj8ya5 AJaoVJuM1MSU1CKF1Lzk/JTMvHRbJe/geOd4UzMDQ11DSwtzJYW8xNxUWyUXnwBdt8wcoDOU FMoSc0qBQgGJxcVK+nY2RfmlJakKGfnFJbZK0YaGRnqGBuZ6RkZGeibGsVZGpkAlCakZGw+e YSlYLVPxdJZfA2OTeBcjJ4eEgInElLW9rBC2mMSFe+vZuhi5OIQEljJKnO74xQaSEBJoZ5LY OzEWpuH2i/XsEEVzGCXmtb5hAknwCghK/Jh8j6WLkYODWUBe4silbJAws4CmxIsvk1gg6u8x SvTdOgJVrybx4d5nsM0sAqoSG+5sYQSx2YDsiSvugy0WFYiQ2Dn/GzuILSJQKLFwJ8R1zAJX GSXuv74HViQsYC9xa/5PsMWcAi4S13ekgNRICKxil5j3EeIgCQFZiU0HmCEecJGYt24p1MfC Eq+Ob2GHsKUl/i69xQjR280ocb2nhw3C6WCU+Nv5nwWiylji/oN7zBCv8Un0/n7CBLGAV6Kj TQiixEPi7OwfUMscJT63vmOF+H4Ho8T6KzuYJzDKz0IKsFmIAJuFFGALGJlXMYqlFhTnpqcW mxaY6hUn5haX5qXrJefnbmIEp0GtyB2MV2YGHWIU4GBU4uGdsX1yhBBrYllxZe4hRgkOZiUR 3iXKUyKEeFMSK6tSi/Lji0pzUosPMZoCw3sis5Rocj4wReeVxBuamBmaGFkCobmhuZI4b5TB xAghgfTEktTs1NSC1CKYPiYOTqkGRl29k7/bWnSP7Zr3USREZce+gPrps7/eYKiS875n/rn6 08Y5E/1bslQ/LF36RuGJp+X3cs5Zk3Luscc0PGURM2hUKOTsvfV4iklY672VDpJ3JKV+KrYc 5G+6v91Kyvb/hIQrD+9d0ZmbZz371J51hgqLuQ6YX6oL/V+ddHCp0aWKHbuuhO1SrVFiKc5I NNRiLipOBAA6rI/CmQMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrPIsWRmVeSWpSXmKPExsVy+t9jQd1i1SkRBm9PsFjcWneO1WLjjPWs Fle+vmezOH9+A7vF2aY37BaXd81hs5hxfh+Txdojd9kdODw2repk87jffZzJo2/LKkaPz5vk Alii3GwyUhNTUosUUvOS81My89JtlUJD3HQtlBTyEnNTbZUidH1DgpQUyhJzSoE8IwM04OAc 4B6spG+X4Jax8eAZloLVMhVPZ/k1MDaJdzFyckgImEjcfrGeHcIWk7hwbz0biC0kMItR4u/L OBCbV0BQ4sfkeyxdjBwczALyEkcuZUOY6hJTpuR2MXIBVT9glJgycxsbRLmaxId7n1lBbBYB VYkNd7YwgthsQPbEFffZQHpFBSIkuk9UgoRFBAol7t9/wgIyh1ngOqPE1sfNYL3CAvYSt+b/ ZIFYsINRouPwb1aQZk4BF4nrO1ImMALdiHDdLITrZiFct4CReRWjRGpBckFxUnquUV5quV5x Ym5xaV66XnJ+7iZGcGQ9k97BeHiX+yFGAQ5GJR7egIrJEUKsiWXFlbmHGCU4mJVEeJcoT4kQ 4k1JrKxKLcqPLyrNSS0+xGgK9N5EZinR5Hxg1OeVxBuamJuYGxtYmFtamhgpifM2zn4WLiSQ nliSmp2aWpBaBNPHxMEp1cC4wGlOdKjf6QVHjtXuymK3TdEs/Bi/acczERbhqmylgs+WUnyh Gz036p98uG09U+0ho92d5Rf2fA34rl7Qvf+36tuQf3MEFbf8+aFqdl/06sum7wprLE7Kxanz pGi2rEyTKF+ebK+p5FTm8yTw+m7XUIMkedus3rhNNiqLvs15Jhv74voD9SAlluKMREMt5qLi RABWRWGuwgIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170203063843epcas5p3a90a17a60f47a983a757caffdd043ddf X-Msg-Generator: CA X-Sender-IP: 203.254.230.27 X-Local-Sender: =?UTF-8?B?64yA7J246riwG1RpemVuIFBsYXRmb3JtIExhYihTL1fshLw=?= =?UTF-8?B?7YSwKRvsgrzshLHsoITsnpAbUzUo7LGF7J6EKS/ssYXsnoQ=?= X-Global-Sender: =?UTF-8?B?SW5raSBEYWUbVGl6ZW4gUGxhdGZvcm0gTGFiLhtTYW1zdW5n?= =?UTF-8?B?IEVsZWN0cm9uaWNzG1M1L1NlbmlvciBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG1NUQUYbQzEwVjgxMTE=?= CMS-TYPE: 105P DLP-Filter: Pass X-CFilter-Loop: Reflected X-HopCount: 7 X-CMS-RootMailID: 20170201082940eucas1p1f19e15328a787d6b77cba97bad92afce X-RootMTR: 20170201082940eucas1p1f19e15328a787d6b77cba97bad92afce References: <58919994.3060100@samsung.com> <1485937754-21440-1-git-send-email-a.hajda@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2017년 02월 01일 17:29에 Andrzej Hajda 이(가) 쓴 글: > On TM2/TM2e platforms HDMI output is connected to MHL bridge > SiI8620. To allow configure UltraHD modes on the bridge > and to eliminate unsupported modes this bridge should be > attached to drm_encoder implemented in exynos_hdmi. > > Signed-off-by: Andrzej Hajda > --- > drivers/gpu/drm/exynos/exynos_hdmi.c | 56 +++++++++++++++++++++++++++++------- > 1 file changed, 46 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c > index a73b192..41fb894 100644 > --- a/drivers/gpu/drm/exynos/exynos_hdmi.c > +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c > @@ -35,6 +35,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -133,6 +134,7 @@ struct hdmi_context { > struct regulator_bulk_data regul_bulk[ARRAY_SIZE(supply)]; > struct regulator *reg_hdmi_en; > struct exynos_drm_clk phy_clk; > + struct drm_bridge *bridge; > }; > > static inline struct hdmi_context *encoder_to_hdmi(struct drm_encoder *e) > @@ -922,7 +924,15 @@ static int hdmi_create_connector(struct drm_encoder *encoder) > drm_connector_register(connector); > drm_mode_connector_attach_encoder(connector, encoder); > > - return 0; > + if (hdata->bridge) { > + encoder->bridge = hdata->bridge; > + hdata->bridge->encoder = encoder; > + ret = drm_bridge_attach(encoder->dev, hdata->bridge); arguments of drm_bridge_attach function has been changed so fixed it - trivial thing. Applied it including other patches. Thanks, Inki Dae > + if (ret) > + DRM_ERROR("Failed to attach bridge\n"); > + } > + > + return ret; > } > > static bool hdmi_mode_fixup(struct drm_encoder *encoder, > @@ -1591,6 +1601,31 @@ static void hdmiphy_clk_enable(struct exynos_drm_clk *clk, bool enable) > hdmiphy_disable(hdata); > } > > +static int hdmi_bridge_init(struct hdmi_context *hdata) > +{ > + struct device *dev = hdata->dev; > + struct device_node *ep, *np; > + > + ep = of_graph_get_endpoint_by_regs(dev->of_node, 1, -1); > + if (!ep) > + return 0; > + > + np = of_graph_get_remote_port_parent(ep); > + of_node_put(ep); > + if (!np) { > + DRM_ERROR("failed to get remote port parent"); > + return -EINVAL; > + } > + > + hdata->bridge = of_drm_find_bridge(np); > + of_node_put(np); > + > + if (!hdata->bridge) > + return -EPROBE_DEFER; > + > + return 0; > +} > + > static int hdmi_resources_init(struct hdmi_context *hdata) > { > struct device *dev = hdata->dev; > @@ -1630,17 +1665,18 @@ static int hdmi_resources_init(struct hdmi_context *hdata) > > hdata->reg_hdmi_en = devm_regulator_get_optional(dev, "hdmi-en"); > > - if (PTR_ERR(hdata->reg_hdmi_en) == -ENODEV) > - return 0; > + if (PTR_ERR(hdata->reg_hdmi_en) != -ENODEV) { > + if (IS_ERR(hdata->reg_hdmi_en)) > + return PTR_ERR(hdata->reg_hdmi_en); > > - if (IS_ERR(hdata->reg_hdmi_en)) > - return PTR_ERR(hdata->reg_hdmi_en); > - > - ret = regulator_enable(hdata->reg_hdmi_en); > - if (ret) > - DRM_ERROR("failed to enable hdmi-en regulator\n"); > + ret = regulator_enable(hdata->reg_hdmi_en); > + if (ret) { > + DRM_ERROR("failed to enable hdmi-en regulator\n"); > + return ret; > + } > + } > > - return ret; > + return hdmi_bridge_init(hdata); > } > > static struct of_device_id hdmi_match_types[] = { >