From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752667AbdBCGkQ (ORCPT ); Fri, 3 Feb 2017 01:40:16 -0500 Received: from mailout4.samsung.com ([203.254.224.34]:40711 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752192AbdBCGkO (ORCPT ); Fri, 3 Feb 2017 01:40:14 -0500 MIME-version: 1.0 Content-type: text/plain; charset=utf-8 X-AuditID: b6c32a35-f79166d000001a4b-9f-589425a5551d Content-transfer-encoding: 8BIT Message-id: <589425A5.8060302@samsung.com> Date: Fri, 03 Feb 2017 15:39:33 +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: <58942572.604@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA01Se2xLcRTOr7f3MVGu2jgmZq4MW6x6q7VLzCMeKSaWICmz1M12s836mN6u QSREMtZu9rCxmYlHyJbGVuqRboLZMJHMxrwytJMgDPMHMyMbbS/hv++c851zvvPlUJjSSURT ORa7YLPwJoYYJb/SFq9KPBtXaVBfvJfE9TTex7kL1R6cezTwmeA6O8+TXMe+jyTX3VxLcNWd 12Vcw62X5BJK73U7CX2gqF2mL7nkRvov3phU+WZhYbbAZwq2WMGSYc3MsWQlM2vWG5cZdfPU bCI7n0tiYi28WUhmlqekJq7MMQVlMLEO3pQfTKXyosjMWbTQZs23C7HZVtGezKSxrEbFqpNU Go1GpZ2bvkCjC1K2Ctm9P4vxvAcxO452fkJ70RC4UAQFtBbqfacxCU+ALr+HcKFRlJL2ISjt u4FJwQEZvKjpQ387inwFSCrUIWjqeEOECgp6HHyv8MtdiKIweircepgbSmN0PLz7ekgu8f0I Cu5dl0v8BHDfcclCWE7Hwe3CxvAcIojL6wNhHEUboOnENzKEI+ntcKpJkofRjxEEPvjDpPH0 Yug5MRQeGkHPhOeHK/EQCWg3CX3VHllIEdBTwNvy587lMHzeiUt4PPS1XyIlPBncIz0yqbcI wdPiYkIKChEMO3/JJdZcCPT6Mem2MdA/UIxLCxRQuF8pUfTQcez7n2VL4UtBPy6dH1RdP+gk y9DUmv8cq/nnWM1/jp1EmBtNEPJEc5YgsnmsSuTNYr4lS5VhNXtR+A0TdD5UeT+lFdEUYkYr 7q6pMChx3iHuNLcioDAmUnFmeqVBqcjkd+4SbFajLd8kiK1IFzS8HIuOyrAGn9piN7LaeaxW o2XZJI1aw0xU4Opyg5LO4u1CriDkCba/fTIqInov2pDb1fb657Uor27Ksxmy/lcb051rt5T9 eBa40HhuRHXEPvvO4PGWqrHbHOsc7WV0XGRyfF1gz/aSsTMdPz6Q9suzDvI3Ile/v9lWUavm V8Wd3rBp9baG2hjSY0vQX61/Ykxc1jywApnetj54MtHlmZay23BxRXdV2u45LycZS4dm4T5G LmbzbAJmE/nf/QMmRpwDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrEIsWRmVeSWpSXmKPExsVy+t9jAd2lqlMiDD5eVLe4te4cq8XGGetZ La58fc9mcf78BnaLs01v2C0u75rDZjHj/D4mi7VH7rI7cHhsWtXJ5nG/+ziTR9+WVYwenzfJ BbBEudlkpCampBYppOYl56dk5qXbKoWGuOlaKCnkJeam2ipF6PqGBCkplCXmlAJ5RgZowME5 wD1YSd8uwS3jwe8e1oKLchUzz79lbGD8KdHFyMkhIWAi0b2jlRHCFpO4cG89WxcjF4eQwFJG ie5fh9lAErwCghI/Jt9j6WLk4GAWkJc4cikbwlSXmDIlF6L8AaPEmYM/WSHKtSRWHetiArFZ BFQljnasAxvDBmRPXHGfDaRXVCBCovtEJUhYRKBQ4v79Jywgc5gFrjNKbH3cDDZHWMBe4tb8 nywQC64yShz/9JkFJMEJtPj21CmsExgFZiE5bxbCebMQzlvAyLyKUSK1ILmgOCk91zAvtVyv ODG3uDQvXS85P3cTIzi+nkntYDy4y/0QowAHoxIP74YzkyOEWBPLiitzDzFKcDArifAuUZ4S IcSbklhZlVqUH19UmpNafIjRFOi/icxSosn5wNjPK4k3NDE3MTc2sDC3tDQxUhLnbZz9LFxI ID2xJDU7NbUgtQimj4mDU6qBkXXz3BY54d6cur+nTPkrnnUoK8/buHxC/p8Tq3mWp7DmN4Sy KF9RW7XmTInYrOCTaz3uS7P1JEoIBa2flRU2c1G+7Q2doo2yDmzcdwu35dv2/7l04vKaJ9/K NJU+iarNXOocKeVVYtmsNidGfyrzFybGfxatO16fM07yW8p/nSPvg9S5u6vilFiKMxINtZiL ihMByMLb4cUCAAA= X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170203063933epcas1p2c7f91123f3e1b01ca4d76658104a3def 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: 20170201082940eucas1p1f19e15328a787d6b77cba97bad92afce X-RootMTR: 20170201082940eucas1p1f19e15328a787d6b77cba97bad92afce References: <58919994.3060100@samsung.com> <1485937754-21440-1-git-send-email-a.hajda@samsung.com> <58942572.604@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 2017년 02월 03일 15:38에 Inki Dae 이(가) 쓴 글: > > > 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. The argument was changed by below patch, drm: bridge: Link encoder and bridge in core code Thanks. > > 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[] = { >>