devicetree.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Archit Taneja <architt@codeaurora.org>
To: Xinliang Liu <xinliang.liu@linaro.org>,
	dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org,
	daniel@ffwll.ch, robh@kernel.org, daniel@fooishbar.org,
	airlied@linux.ie, corbet@lwn.net, catalin.marinas@arm.com,
	will.deacon@arm.com
Cc: linux-doc@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	linuxarm@huawei.com, andy.green@linaro.org,
	haojian.zhuang@linaro.org, liguozhu@hisilicon.com,
	xuwei5@hisilicon.com, w.f@huawei.com, puck.chen@hisilicon.com,
	bintian.wang@huawei.com, benjamin.gaignard@linaro.org,
	xuyiping@hisilicon.com, kong.kongxinwei@hisilicon.com,
	zourongrong@huawei.com, lijianhua@huawei.com,
	sumit.semwal@linaro.org
Subject: Re: [PATCH v2 10/10] drm/hisilicon: Add support for external bridge
Date: Tue, 1 Dec 2015 14:34:35 +0530	[thread overview]
Message-ID: <565D62A3.2030301@codeaurora.org> (raw)
In-Reply-To: <1448707145-69348-11-git-send-email-xinliang.liu@linaro.org>



On 11/28/2015 04:09 PM, Xinliang Liu wrote:
> Add support for external HDMI bridge.
>
> Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>
> Signed-off-by: Xinwei Kong <kong.kongxinwei@hisilicon.com>
> Signed-off-by: Andy Green <andy.green@linaro.org>
> ---
>   drivers/gpu/drm/hisilicon/hisi_drm_dsi.c | 51 ++++++++++++++++++++++++++++++++
>   1 file changed, 51 insertions(+)
>
> diff --git a/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c b/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c
> index 066e08d..9e056db 100644
> --- a/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c
> +++ b/drivers/gpu/drm/hisilicon/hisi_drm_dsi.c
> @@ -78,6 +78,7 @@ struct dsi_hw_ctx {
>
>   struct hisi_dsi {
>   	struct drm_encoder encoder;
> +	struct drm_bridge *bridge;
>   	struct mipi_dsi_host host;
>   	struct drm_display_mode cur_mode;
>   	struct dsi_hw_ctx *ctx;
> @@ -671,6 +672,25 @@ static int dsi_host_init(struct device *dev, struct hisi_dsi *dsi)
>   	return 0;
>   }
>
> +static int dsi_bridge_init(struct drm_device *dev, struct hisi_dsi *dsi)
> +{
> +	struct drm_encoder *encoder = &dsi->encoder;
> +	struct drm_bridge *bridge = dsi->bridge;
> +	int ret;
> +
> +	/* associate the bridge to dsi encoder */
> +	encoder->bridge = bridge;
> +	bridge->encoder = encoder;
> +
> +	ret = drm_bridge_attach(dev, bridge);
> +	if (ret) {
> +		DRM_ERROR("failed to attach exteranl bridge\n");

s/exteranl/external

> +		return ret;
> +	}
> +
> +	return 0;
> +}
> +
>   static int dsi_bind(struct device *dev, struct device *master, void *data)
>   {
>   	struct dsi_data *ddata = dev_get_drvdata(dev);
> @@ -686,6 +706,10 @@ static int dsi_bind(struct device *dev, struct device *master, void *data)
>   	if (ret)
>   		return ret;
>
> +	ret = dsi_bridge_init(drm_dev, dsi);
> +	if (ret)
> +		return ret;
> +
>   	return 0;
>   }
>
> @@ -702,8 +726,35 @@ static const struct component_ops dsi_ops = {
>   static int dsi_parse_dt(struct platform_device *pdev, struct hisi_dsi *dsi)
>   {
>   	struct dsi_hw_ctx *ctx = dsi->ctx;
> +	struct device_node *np = pdev->dev.of_node;
> +	struct device_node *endpoint, *bridge_node;
> +	struct drm_bridge *bridge;
>   	struct resource *res;
>
> +	/*
> +	 * Get the endpoint node. In our case, dsi has one output port
> +	 * to which the external HDMI bridge is connected.
> +	 */
> +	endpoint = of_graph_get_next_endpoint(np, NULL);
> +	if (!endpoint) {
> +		DRM_ERROR("no valid endpoint node\n");
> +		return -ENODEV;
> +	}
> +	of_node_put(endpoint);
> +
> +	bridge_node = of_graph_get_remote_port_parent(endpoint);
> +	if (!bridge_node) {
> +		DRM_ERROR("no valid bridge node\n");
> +		return -ENODEV;
> +	}
> +	of_node_put(bridge_node);
> +
> +	bridge = of_drm_find_bridge(bridge_node);
> +	if (!bridge) {
> +		DRM_INFO("wait for external HDMI bridge driver.\n");
> +		return -EPROBE_DEFER;
> +	}
> +	dsi->bridge = bridge;

This could be left for later, but it would be better if the dsi driver
registers even if the bridge driver module isn't inserted yet, or
happens much later in boot.

We could achieve this by trying to attach the bridge (done in 
dsi_bridge_init) in the dsi_host_attach callback instead of having it
in dsi_bind.

Thanks,
Archit

>
>   	ctx->dsi_cfg_clk = devm_clk_get(&pdev->dev, "pclk_dsi");
>   	if (IS_ERR(ctx->dsi_cfg_clk)) {
>

-- 
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora 
Forum, hosted by The Linux Foundation

  reply	other threads:[~2015-12-01  9:04 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-28 10:38 [PATCH v2 00/10] Add New DRM Driver for HiSilicon hi6220 SoC Xinliang Liu
2015-11-28 10:38 ` [PATCH v2 01/10] arm64: dts: hisilicon: Add display subsystem DT nodes for hi6220 Xinliang Liu
2015-11-28 10:38 ` [PATCH v2 02/10] drm/hisilicon: Add DT binding docs for hi6220 display subsystem Xinliang Liu
2015-11-30 19:31   ` Rob Herring
2015-12-01  7:17     ` Xinliang Liu
2015-12-01 13:58       ` Rob Herring
2015-11-28 10:38 ` [PATCH v2 03/10] drm/hisilicon: Add hisilicon DRM master driver Xinliang Liu
2015-12-03 16:21   ` Rob Herring
2015-12-05  1:25     ` Xinliang Liu
2015-11-28 10:38 ` [PATCH v2 04/10] drm/hisilicon: Add crtc funcs for ADE Xinliang Liu
     [not found]   ` <1448707145-69348-5-git-send-email-xinliang.liu-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-11-28 15:56     ` Emil Velikov
2015-12-01  2:52       ` Xinliang Liu
2015-11-28 10:39 ` [PATCH v2 05/10] drm/hisilicon: Add plane " Xinliang Liu
2015-11-28 10:39 ` [PATCH v2 06/10] drm/hisilicon: Add vblank feature Xinliang Liu
2015-11-30  7:54   ` Daniel Vetter
2015-12-01  3:16     ` Xinliang Liu
2015-12-01  7:13       ` Daniel Vetter
2015-12-01 10:34         ` Xinliang Liu
2015-12-01 12:54           ` Daniel Vetter
2015-11-28 10:39 ` [PATCH v2 07/10] drm/hisilicon: Add cma fbdev and hotplug Xinliang Liu
2015-11-28 10:39 ` [PATCH v2 08/10] drm/hisilicon: Add dsi encoder driver Xinliang Liu
2015-12-01  8:58   ` Archit Taneja
     [not found]     ` <565D612A.1010307-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2015-12-01 11:16       ` Xinliang Liu
2015-11-28 10:39 ` [PATCH v2 09/10] drm/hisilicon: Add dsi host driver Xinliang Liu
     [not found] ` <1448707145-69348-1-git-send-email-xinliang.liu-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2015-11-28 10:39   ` [PATCH v2 10/10] drm/hisilicon: Add support for external bridge Xinliang Liu
2015-12-01  9:04     ` Archit Taneja [this message]
2015-12-01 14:50       ` Xinliang Liu
2015-12-02  8:20         ` Archit Taneja
     [not found]           ` <565EA9D4.4090905-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org>
2015-12-02 11:24             ` Xinliang Liu

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=565D62A3.2030301@codeaurora.org \
    --to=architt@codeaurora.org \
    --cc=airlied@linux.ie \
    --cc=andy.green@linaro.org \
    --cc=benjamin.gaignard@linaro.org \
    --cc=bintian.wang@huawei.com \
    --cc=catalin.marinas@arm.com \
    --cc=corbet@lwn.net \
    --cc=daniel@ffwll.ch \
    --cc=daniel@fooishbar.org \
    --cc=devicetree@vger.kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=haojian.zhuang@linaro.org \
    --cc=kong.kongxinwei@hisilicon.com \
    --cc=liguozhu@hisilicon.com \
    --cc=lijianhua@huawei.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linuxarm@huawei.com \
    --cc=puck.chen@hisilicon.com \
    --cc=robh@kernel.org \
    --cc=sumit.semwal@linaro.org \
    --cc=w.f@huawei.com \
    --cc=will.deacon@arm.com \
    --cc=xinliang.liu@linaro.org \
    --cc=xuwei5@hisilicon.com \
    --cc=xuyiping@hisilicon.com \
    --cc=zourongrong@huawei.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).