From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751423AbdBAHex (ORCPT ); Wed, 1 Feb 2017 02:34:53 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:42740 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751080AbdBAHev (ORCPT ); Wed, 1 Feb 2017 02:34:51 -0500 MIME-version: 1.0 Content-type: text/plain; charset=utf-8 X-AuditID: cbfec7f4-f79716d000006f65-38-58918f977282 Subject: Re: [PATCH 4/7] drm/exynos/hdmi: add bridge support To: Inki Dae , 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 From: Andrzej Hajda Message-id: <53bb68fd-5de0-6b3d-df3e-e961ba3fd0fb@samsung.com> Date: Wed, 01 Feb 2017 08:34:46 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 In-reply-to: <58918ED0.3020406@samsung.com> Content-transfer-encoding: 8bit X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprCKsWRmVeSWpSXmKPExsWy7djP87rT+ydGGOy9rWWxccZ6VosrX9+z WUy6P4HF4vz5DewWZ5vesFtc3jWHzWLG+X1MFmuP3GV34PDYtKqTzeN+93Emj74tqxg9Pm+S C2CJ4rJJSc3JLEst0rdL4MrYsn4aU8EauYqLx8+yNDBekehi5OSQEDCRWHbjPxOELSZx4d56 ti5GLg4hgaWMEu/2/GeGcD4zSmzbfp8VpuP4jEdMEIlljBLNi04ygyR4BQQlfky+xwJiMwto Srz4MokFougZo8SlZzsYQRLCAjYSE7YsAJskIpArcfLrEbB9zAJXGSXuv77HBpJgA+r+u/km G8RUO4mWL+3sIDaLgKrE6b1rwDaICkRIHDp2G2wzp4C2RNfzbiaIzfISB688B9ssIbCOXeLi tSlAzRxAjqzEpgPMEC+4SNzt3ANlC0u8Or6FHcKWkejsOMgE0dvNKPGp/wQ7hDOFUeLfhxlQ HdYSh49fZIXYxicxadt0ZogFvBIdbUIQJR4ST989ZoGwHSVmHHkNDa93jBKtrYeYJjDKz0IK sllIQTYLyRMLGJlXMYqklhbnpqcWm+gVJ+YWl+al6yXn525iBKaV0/+Of9nBuPiY1SFGAQ5G JR7eGScnRAixJpYVV+YeYpTgYFYS4XVomxghxJuSWFmVWpQfX1Sak1p8iFGag0VJnHfPgivh QgLpiSWp2ampBalFMFkmDk6pBsbUt8c1zpX/+z7jC6+q7UqWq1NOvei4UPvliZjH7+n/PNYY 66eo6fGtv/J4/3qVok0LHZx/KLzW8Ti1f/E3m52XH+3TDmoPelPHvahG3rM15EanS3zi7Dv5 YZzXGNtWblxYkxmf3Mf6eKPJt6aqyMA9fN8SpVr3BSzdvmn7w92v9x1956ss+k9OiaU4I9FQ i7moOBEAJZZrKycDAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFlrPIsWRmVeSWpSXmKPExsVy+t/xK7q3+ydGGBx4ZW2xccZ6VosrX9+z WUy6P4HF4vz5DewWZ5vesFtc3jWHzWLG+X1MFmuP3GV34PDYtKqTzeN+93Emj74tqxg9Pm+S C2CJcrPJSE1MSS1SSM1Lzk/JzEu3VQoNcdO1UFLIS8xNtVWK0PUNCVJSKEvMKQXyjAzQgINz gHuwkr5dglvGlvXTmArWyFVcPH6WpYHxikQXIyeHhICJxPEZj5ggbDGJC/fWs4HYQgJLGCV6 TgqA2LwCghI/Jt9j6WLk4GAWUJeYMiW3i5ELqOQZo8TsQ+fA6oUFbCQmbFnACmKLCORKrH86 kx2i6B2jxO9lH5lBHGaB64wSWx83g1WxCWhK/N18kw1ig51Ey5d2dhCbRUBV4vTeNWDbRAUi JBoOp4OEOQW0Jbqed4MdyiwgL3HwynOWCYwCs5DcNwvhvllIqhYwMq9iFEktLc5Nzy021CtO zC0uzUvXS87P3cQIjKxtx35u3sF4aWPwIUYBDkYlHt4PpydECLEmlhVX5h5ilOBgVhLhdWib GCHEm5JYWZValB9fVJqTWnyI0RTo1InMUqLJ+cCozyuJNzQxNLc0NDK2sDA3MlIS5y35cCVc SCA9sSQ1OzW1ILUIpo+Jg1OqgbFLO/LsrTubz9pXvb7p8Oo546V7DFmebuKShhbBN6aIvg9q XfDC+3Cfx/V/B2/1KvJECPlH263SXjIt9a7pjpkdksqS/oWSJgU3Q1/q3i5StninrZD5f5fN EjbtLWvq5n+KDNw149KG8Of7Q18+f6RtsjLhlFqK0rnFi9fONhJi43m9O7hu5holluKMREMt 5qLiRABAcYH2wgIAAA== X-MTR: 20000000000000000@CPGS X-CMS-MailID: 20170201073447eucas1p1baed594b2f7b5186f0f75d2cba92d1a2 X-Msg-Generator: CA X-Sender-IP: 182.198.249.179 X-Local-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRvsgrw=?= =?UTF-8?B?7ISx7KCE7J6QG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Global-Sender: =?UTF-8?B?QW5kcnplaiBIYWpkYRtTUlBPTC1LZXJuZWwgKFRQKRtTYW1z?= =?UTF-8?B?dW5nIEVsZWN0cm9uaWNzG1NlbmlvciBTb2Z0d2FyZSBFbmdpbmVlcg==?= X-Sender-Code: =?UTF-8?B?QzEwG0VIURtDMTBDRDAyQ0QwMjczOTI=?= CMS-TYPE: 201P 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> <58918ED0.3020406@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01.02.2017 08:31, Inki Dae wrote: > > 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. SiI8620 MHL bridge in tm2/tm2e. Regards Andrzej > > 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[] = { >> >