From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751429AbdBAHbe (ORCPT ); Wed, 1 Feb 2017 02:31:34 -0500 Received: from mailout3.samsung.com ([203.254.224.33]:55734 "EHLO mailout3.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751292AbdBAHbc (ORCPT ); Wed, 1 Feb 2017 02:31:32 -0500 MIME-version: 1.0 Content-type: text/plain; charset=utf-8 X-AuditID: b6c32a38-f79e26d000001a71-2c-58918ed053b8 Content-transfer-encoding: 8BIT Message-id: <58918ED0.3020406@samsung.com> Date: Wed, 01 Feb 2017 16:31:28 +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 4/7] drm/exynos/hdmi: add bridge support In-reply-to: <1484895145-511-5-git-send-email-a.hajda@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmplk+LIzCtJLcpLzFFi42LZdljTQPdC38QIgy+zLS1urTvHarFxxnpW iytf37NZnD+/gd3ibNMbdovLu+awWcw4v4/JYu2Ru+wOHB6bVnWyedzvPs7k0bdlFaPH501y ASxRqTYZqYkpqUUKqXnJ+SmZeem2St7B8c7xpmYGhrqGlhbmSgp5ibmptkouPgG6bpk5QGco KZQl5pQChQISi4uV9O1sivJLS1IVMvKLS2yVog0NjfQMDcz1jIyM9EyMY62MTIFKElIz2n43 MhVcl6n4tC6igXGWeBcjB4eEgIlE66v6LkZOIFNM4sK99WxdjFwcQgI7GCWuPn3NAuG0M0ns P/aPBaZhzt4yiPgcRom/3xaygnTzCghK/Jh8D6yGWUBe4silbJAws4CmxIsvk6Dm3GOUOHJ6 MyNEvZbEvb6n7CA2i4CqxNxlb5lBbDYge+KK+2wgtqhAhMTO+d/AakQECiUW7oS4jlngKqPE /df3wIqEBWwkJmxZwAqymFPASWLNXEaQGgmBVewSV5fNhDpaVmLTAWaIL10kuvYeYIOwhSVe Hd/CDmFLS6z6d4sJorebUeJ6Tw8bhNMB9GXnfxaIKmOJ+w/uMUO8xifx7msPK8QCXomONiGI Eg+Jp+8eQ5U7Ssw48poJ4vuzjBJNRxqZJzDKz0IKsFmIAJuFFGALGJlXMYqlFhTnpqcWGxaY 6BUn5haX5qXrJefnbmIEJ0Etix2Me875HGIU4GBU4uGdcXJChBBrYllxZe4hRgkOZiURXoe2 iRFCvCmJlVWpRfnxRaU5qcWHGE2B4T2RWUo0OR+YoPNK4g1NzAxNjEwMDc2NDIyUxHlZDYCa BNITS1KzU1MLUotg+pg4OKUaGOurjUKuf720gF+t+MfFJ32/g9adWyRtENPz8oEEu5P0vJgP Vevjb4TP0hWqKhdSZDqe0etqfU0yOpQp4EaSq71/W425WHxf8+0r5Z0xT15b7bAou67749ie qW+M4jsmvJr+sbJiW5Sf1EJGFWOxe+/P94Rwl+0/9Lv88fs3bIETLk1ryLzYpcRSnJFoqMVc VJwIAAtRzE+YAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrPIsWRmVeSWpSXmKPExsVy+t9jQd0LfRMjDM5fVre4te4cq8XGGetZ La58fc9mcf78BnaLs01v2C0u75rDZjHj/D4mi7VH7rI7cHhsWtXJ5nG/+ziTR9+WVYwenzfJ BbBEudlkpCampBYppOYl56dk5qXbKoWGuOlaKCnkJeam2ipF6PqGBCkplCXmlAJ5RgZowME5 wD1YSd8uwS2j7XcjU8F1mYpP6yIaGGeJdzFycEgImEjM2VvWxcgJZIpJXLi3nq2LkYtDSGAW o8SsV89ZQRK8AoISPybfYwGpZxaQlzhyKRvCVJeYMiUXovwBo8TCtjssEOVaEvf6nrKD2CwC qhJzl71lBrHZgOyJK+6zgfSKCkRIdJ+oBAmLCBRK3L//hAVkDrPAdUaJrY+bwdYKC9hITNiy gBViwVlGifbnd5lBmjkFnCTWzGWcwAh0JMJ1sxCum4Vw3QJG5lWMEqkFyQXFSem5hnmp5XrF ibnFpXnpesn5uZsYwZH1TGoH48Fd7ocYBTgYlXh4Pc5NiBBiTSwrrsw9xCjBwawkwuvQNjFC iDclsbIqtSg/vqg0J7X4EKMp0HsTmaVEk/OBUZ9XEm9oYm5ibmxgYW5paWKkJM7bOPtZuJBA emJJanZqakFqEUwfEwenVAOjo/LCpJ9Pjqy8+mzx39ID4btMWV4KB5RH/vqqOu0SJ2f+ozui c/dUBNQFyTXN7mDS8ulXPDNZgkX/ukRWZL7Go9kHVngfVtkz6Y7HRDkjmfzzi4M2xi4xfT1J 5O0pTQHJsuaY8OzXMdVbVPa8KmesdtVpnZiaZ75CPr3PTOnfil+q62tOTeVRYinOSDTUYi4q TgQAEMpF4sICAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170201073128epcas1p47e4c82cb685c4604aeeefb52e4110600 X-Msg-Generator: CA X-Sender-IP: 203.254.230.26 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: 101P DLP-Filter: Pass X-CFilter-Loop: Reflected X-HopCount: 7 X-CMS-RootMailID: 20170120065230eucas1p2e22f7b832ec7e1c770c3e8a27a3341f5 X-RootMTR: 20170120065230eucas1p2e22f7b832ec7e1c770c3e8a27a3341f5 References: <1484895145-511-1-git-send-email-a.hajda@samsung.com> <1484895145-511-5-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년 01월 20일 15:52에 Andrzej Hajda 이(가) 쓴 글: > In some platforms there is attached another device to the end of HDMI. > The patch adds support for it. Andrzej, can you clarify what bridge device can be attached and actually is now attached to the end of HDMI? And I wonder if we have the device tree file which defines the bridge device in mainline. Seems we have no the device tree file. If nothing, then this patch should be merged with real use case. Thanks. > > 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); > + 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[] = { >