Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp1729894ybz; Thu, 16 Apr 2020 14:34:48 -0700 (PDT) X-Google-Smtp-Source: APiQypJOzBgM0PfKGYwQ/LP54r0SV3aGq8caEjGFGZpqvBljKYCcz3ZIE2ujNP7Njt9rYwMYvEaK X-Received: by 2002:a17:906:4714:: with SMTP id y20mr57799ejq.5.1587072888482; Thu, 16 Apr 2020 14:34:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1587072888; cv=none; d=google.com; s=arc-20160816; b=wOTPfA7ffwf0ZKHbch4cmy0IgteGcFBh9e4twO0kDm7oyphv6McOCwsi9MNPRxxkiv 5Qzww3U03jD9T5AIOW354OkjNVqg5+sT+21gpiSafWKaFbK6528E0ltM7hNdEpridQgc JJEOTT7rCuYkxS1Avf+oJb5kvuyS/qH5Ua79Jfs1P1R86nmlHiez1qnDcXulO9Mk3Jfq hbCJtxAYOmJabOnBVy2le9+12iKkI/RpQG6c6bV/7iI4Ky7oZabQL0Z8VXxZwD87khMh 5R4Qrd1nEOhX5frN2yobzX6PB1zC4Bnfsoa+rzlC7MjHpQG6IAaXAMVlAcxTlW9tGIWm 5fAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=scoiVxCKjAe0yz8/nYa10Nc/fR8uRa7JBJVdoV/qgao=; b=gHB0Q2/Nb//wmBm7NmiEsiMB2BB9tXR/SvHysgKyFyZaCi6rwKYfqmhKj+FW85R8jt +krFeE9Y3hNSWUqJtOUjKFsd0VGnuBfqa8KbKeedaESkNmBo7C9j2f1gX8vkGlRtPooJ QGIdAP9ac6kfvSC1i5Ywv23qlTyzq0Z0Pa+NH6AzozsGJIVH/nbd/5J4iIeVK/Pf0KIZ 2CuAVe9BtaNO6rPicfoeFhJPIZO3e1SQKD9aGRasGiTIKLaVwQy1IFbR5dAiUvK/OKBx KwKjHxYOSv5crr3yiqdaIPl7JrAqiAqpK/4NB3OCJrIEzhyg6iILUZr8QPavKUE85gXm CZow== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id cb14si6104822edb.529.2020.04.16.14.34.25; Thu, 16 Apr 2020 14:34:48 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727998AbgDPVdb (ORCPT + 99 others); Thu, 16 Apr 2020 17:33:31 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:44244 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725843AbgDPVda (ORCPT ); Thu, 16 Apr 2020 17:33:30 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: eballetbo) with ESMTPSA id 768E62A1269 Subject: Re: [PATCH v2 7/7] drm/mediatek: mtk_dsi: Create connector for bridges To: Laurent Pinchart Cc: linux-kernel@vger.kernel.org, Collabora Kernel ML , matthias.bgg@gmail.com, drinkcat@chromium.org, hsinyi@chromium.org, Chun-Kuang Hu , Daniel Vetter , David Airlie , Philipp Zabel , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-mediatek@lists.infradead.org References: <20200416155720.2360443-1-enric.balletbo@collabora.com> <20200416155720.2360443-8-enric.balletbo@collabora.com> <20200416173525.GQ4796@pendragon.ideasonboard.com> <20200416173615.GR4796@pendragon.ideasonboard.com> From: Enric Balletbo i Serra Message-ID: Date: Thu, 16 Apr 2020 23:33:24 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: <20200416173615.GR4796@pendragon.ideasonboard.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Laurent, On 16/4/20 19:36, Laurent Pinchart wrote: > Hi Enric, > > On Thu, Apr 16, 2020 at 08:35:26PM +0300, Laurent Pinchart wrote: >> On Thu, Apr 16, 2020 at 05:57:19PM +0200, Enric Balletbo i Serra wrote: >>> Use the drm_bridge_connector helper to create a connector for pipelines >>> that use drm_bridge. This allows splitting connector operations across >>> multiple bridges when necessary, instead of having the last bridge in >>> the chain creating the connector and handling all connector operations >>> internally. >> >> That's the right direction, but this should be done in the mtk display >> controller driver core, not in here. I'm OK with the code being here as >> an interim measure if needed to move forward, but that should then be >> temporary only. It'd be nice if we can do this as an interim measure for now, so at least we have the embedded display working. IIUC to move that to the display controller driver core I should also convert/rework the mtk_dpi and mtk_hdmi drivers. This is used for the external display on my device but to fully support this I'll also need to rework the bridge chain logic to handle the multi-sink/multi-source use case. This is something I plan to work on but I suspect won't be easy and will trigger lots of discussions, and, of course, some time. So, if is fine I won't move this for now. Thanks, Enric > > I forgot to mention that the drm_encoder should also move out of the > bridge driver to the display controller driver. > >>> Signed-off-by: Enric Balletbo i Serra >>> --- >>> >>> Changes in v2: None >>> >>> drivers/gpu/drm/mediatek/mtk_dsi.c | 14 +++++++++++++- >>> 1 file changed, 13 insertions(+), 1 deletion(-) >>> >>> diff --git a/drivers/gpu/drm/mediatek/mtk_dsi.c b/drivers/gpu/drm/mediatek/mtk_dsi.c >>> index 44718fa3d1ca..2f8876c32864 100644 >>> --- a/drivers/gpu/drm/mediatek/mtk_dsi.c >>> +++ b/drivers/gpu/drm/mediatek/mtk_dsi.c >>> @@ -17,6 +17,7 @@ >>> >>> #include >>> #include >>> +#include >>> #include >>> #include >>> #include >>> @@ -184,6 +185,7 @@ struct mtk_dsi { >>> struct drm_bridge bridge; >>> struct drm_bridge *panel_bridge; >>> struct drm_bridge *next_bridge; >>> + struct drm_connector *connector; >>> struct phy *phy; >>> >>> void __iomem *regs; >>> @@ -983,10 +985,19 @@ static int mtk_dsi_encoder_init(struct drm_device *drm, struct mtk_dsi *dsi) >>> */ >>> dsi->encoder.possible_crtcs = 1; >>> >>> - ret = drm_bridge_attach(&dsi->encoder, &dsi->bridge, NULL, 0); >>> + ret = drm_bridge_attach(&dsi->encoder, &dsi->bridge, NULL, >>> + DRM_BRIDGE_ATTACH_NO_CONNECTOR); >>> if (ret) >>> goto err_cleanup_encoder; >>> >>> + dsi->connector = drm_bridge_connector_init(drm, &dsi->encoder); >>> + if (IS_ERR(dsi->connector)) { >>> + DRM_ERROR("Unable to create bridge connector\n"); >>> + ret = PTR_ERR(dsi->connector); >>> + goto err_cleanup_encoder; >>> + } >>> + drm_connector_attach_encoder(dsi->connector, &dsi->encoder); >>> + >>> return 0; >>> >>> err_cleanup_encoder: >>> @@ -1144,6 +1155,7 @@ static int mtk_dsi_probe(struct platform_device *pdev) >>> >>> dsi->bridge.funcs = &mtk_dsi_bridge_funcs; >>> dsi->bridge.of_node = dev->of_node; >>> + dsi->bridge.type = DRM_MODE_CONNECTOR_DSI; >> >> I think this line belongs to the patch that adds drm_bridge support to >> this driver. >> >>> >>> drm_bridge_add(&dsi->bridge); >>> >