Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp644955ybt; Wed, 8 Jul 2020 08:20:10 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxrlkTHZsimekbH34ANQJMVSORZNzDFzsU0Ln/9eIiW2qqn92kt6tkBO1K6Fey3CxdEJMGT X-Received: by 2002:a17:906:38d6:: with SMTP id r22mr50871522ejd.219.1594221610220; Wed, 08 Jul 2020 08:20:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1594221610; cv=none; d=google.com; s=arc-20160816; b=ZkVP1u/IFHN5TIuecTuorB5itdB+/1nV0ng2MbifI1cV+P5SJ2jtLbvO0E64+U6B7d TfC/ZlnDbFqqRw5p5pn4uKffrmcRd5StBO5gckXpEBZm33PrAB9Ts09A1vb69g0RmWOS UHxdGhCLjxommJagW6t0L24FIxRqxeEoukXbfjuv8SIEPU8wVj1m7z1WZzjUnJ1KeRB4 ANMzDr+avEYr1b2OCiRjvL4oNmvHbGSH/U42uyjaUmLB2JdKrjlWkPRT3sNAT/ZyRp0B Q3KTC1k40hK0Y/xDQYLqiKPJ2lv80aRiTBPcsmH0ycczFNZRvwsotM7PC0tsPcfr6m0N 65+A== 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=fCnt61fMxR0hfmOyWkVKf3Rz9yhNn4I9WEWsyTwg3ew=; b=cgoDAlzEwrh9Uu5fMGAcUxk5VOF6cXWyyGqcyBzsMubr47jyT49A/OsqTQY3lMcjrO oCORWCh9C5VTMxHsARI4OAlanPfAY0UZRJtr9SCc6jxEvKV6wQZO7FUoDsHZo5vojDKH 4M+56oGqB/3dTt4TaQ9FU5qhku4MYpo7Kl+yA6DbfLlXHzymRxZXicSdkAWAdSLqWFUC IoOBUkmQChhUHPdrAg8aF+/p07xqnM9ZKTz5gMtJe8PnawVFUt9KB33FAE1veJT/2QGJ S8yHPVv6gUcNojsx1hRf87oc+UWoeisoifCRqIprAWMhGp3x4q7aqROIAYPQd2xweUSP NaIA== 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 b9si239657edz.313.2020.07.08.08.19.47; Wed, 08 Jul 2020 08:20:10 -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 S1730088AbgGHPQC (ORCPT + 99 others); Wed, 8 Jul 2020 11:16:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57506 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729815AbgGHPQC (ORCPT ); Wed, 8 Jul 2020 11:16:02 -0400 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 12486C061A0B for ; Wed, 8 Jul 2020 08:16:02 -0700 (PDT) Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: eballetbo) with ESMTPSA id 301EE2A1B15 Subject: Re: [RESEND PATCH 2/3] drm/mediatek: mtk_dpi: Convert to bridge driver To: Boris Brezillon Cc: linux-kernel@vger.kernel.org, Collabora Kernel ML , narmstrong@baylibre.com, a.hajda@samsung.com, laurent.pinchart@ideasonboard.com, 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: <20200518173909.2259259-1-enric.balletbo@collabora.com> <20200518173909.2259259-3-enric.balletbo@collabora.com> <20200701135153.475db3a5@collabora.com> From: Enric Balletbo i Serra Message-ID: Date: Wed, 8 Jul 2020 17:15:55 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20200701135153.475db3a5@collabora.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 Boris, Thank you for review the patch. On 1/7/20 13:51, Boris Brezillon wrote: > On Mon, 18 May 2020 19:39:08 +0200 > Enric Balletbo i Serra wrote: > >> Convert mtk_dpi to a bridge driver with built-in encoder support for >> compatibility with existing component drivers. >> >> Signed-off-by: Enric Balletbo i Serra >> Reviewed-by: Chun-Kuang Hu >> --- >> >> drivers/gpu/drm/mediatek/mtk_dpi.c | 66 +++++++++++++++--------------- >> 1 file changed, 34 insertions(+), 32 deletions(-) >> >> diff --git a/drivers/gpu/drm/mediatek/mtk_dpi.c b/drivers/gpu/drm/mediatek/mtk_dpi.c >> index 7112125dc3d1..baad198c69eb 100644 >> --- a/drivers/gpu/drm/mediatek/mtk_dpi.c >> +++ b/drivers/gpu/drm/mediatek/mtk_dpi.c >> @@ -61,6 +61,7 @@ enum mtk_dpi_out_color_format { >> struct mtk_dpi { >> struct mtk_ddp_comp ddp_comp; >> struct drm_encoder encoder; >> + struct drm_bridge bridge; >> struct drm_bridge *next_bridge; >> void __iomem *regs; >> struct device *dev; >> @@ -77,9 +78,9 @@ struct mtk_dpi { >> int refcount; >> }; >> >> -static inline struct mtk_dpi *mtk_dpi_from_encoder(struct drm_encoder *e) >> +static inline struct mtk_dpi *bridge_to_dpi(struct drm_bridge *b) >> { >> - return container_of(e, struct mtk_dpi, encoder); >> + return container_of(b, struct mtk_dpi, bridge); >> } >> >> enum mtk_dpi_polarity { >> @@ -518,50 +519,44 @@ static const struct drm_encoder_funcs mtk_dpi_encoder_funcs = { >> .destroy = mtk_dpi_encoder_destroy, >> }; >> >> -static bool mtk_dpi_encoder_mode_fixup(struct drm_encoder *encoder, >> - const struct drm_display_mode *mode, >> - struct drm_display_mode *adjusted_mode) >> +static int mtk_dpi_bridge_attach(struct drm_bridge *bridge, >> + enum drm_bridge_attach_flags flags) >> { >> - return true; >> + struct mtk_dpi *dpi = bridge_to_dpi(bridge); >> + >> + return drm_bridge_attach(bridge->encoder, dpi->next_bridge, >> + &dpi->bridge, flags); >> } >> >> -static void mtk_dpi_encoder_mode_set(struct drm_encoder *encoder, >> - struct drm_display_mode *mode, >> - struct drm_display_mode *adjusted_mode) >> +static void mtk_dpi_bridge_mode_set(struct drm_bridge *bridge, >> + const struct drm_display_mode *mode, >> + const struct drm_display_mode *adjusted_mode) >> { >> - struct mtk_dpi *dpi = mtk_dpi_from_encoder(encoder); >> + struct mtk_dpi *dpi = bridge_to_dpi(bridge); >> >> drm_mode_copy(&dpi->mode, adjusted_mode); >> } >> >> -static void mtk_dpi_encoder_disable(struct drm_encoder *encoder) >> +static void mtk_dpi_bridge_disable(struct drm_bridge *bridge) >> { >> - struct mtk_dpi *dpi = mtk_dpi_from_encoder(encoder); >> + struct mtk_dpi *dpi = bridge_to_dpi(bridge); >> >> mtk_dpi_power_off(dpi); >> } >> >> -static void mtk_dpi_encoder_enable(struct drm_encoder *encoder) >> +static void mtk_dpi_bridge_enable(struct drm_bridge *bridge) >> { >> - struct mtk_dpi *dpi = mtk_dpi_from_encoder(encoder); >> + struct mtk_dpi *dpi = bridge_to_dpi(bridge); >> >> mtk_dpi_power_on(dpi); >> mtk_dpi_set_display_mode(dpi, &dpi->mode); >> } >> >> -static int mtk_dpi_atomic_check(struct drm_encoder *encoder, >> - struct drm_crtc_state *crtc_state, >> - struct drm_connector_state *conn_state) >> -{ >> - return 0; >> -} >> - >> -static const struct drm_encoder_helper_funcs mtk_dpi_encoder_helper_funcs = { >> - .mode_fixup = mtk_dpi_encoder_mode_fixup, >> - .mode_set = mtk_dpi_encoder_mode_set, >> - .disable = mtk_dpi_encoder_disable, >> - .enable = mtk_dpi_encoder_enable, >> - .atomic_check = mtk_dpi_atomic_check, >> +static const struct drm_bridge_funcs mtk_dpi_bridge_funcs = { >> + .attach = mtk_dpi_bridge_attach, >> + .mode_set = mtk_dpi_bridge_mode_set, >> + .disable = mtk_dpi_bridge_disable, >> + .enable = mtk_dpi_bridge_enable, >> }; >> >> static void mtk_dpi_start(struct mtk_ddp_comp *comp) >> @@ -602,16 +597,13 @@ static int mtk_dpi_bind(struct device *dev, struct device *master, void *data) >> dev_err(dev, "Failed to initialize decoder: %d\n", ret); >> goto err_unregister; >> } >> - drm_encoder_helper_add(&dpi->encoder, &mtk_dpi_encoder_helper_funcs); >> >> /* Currently DPI0 is fixed to be driven by OVL1 */ >> dpi->encoder.possible_crtcs = BIT(1); >> >> - ret = drm_bridge_attach(&dpi->encoder, dpi->next_bridge, NULL, 0); >> - if (ret) { >> - dev_err(dev, "Failed to attach bridge: %d\n", ret); > > Any reason your decided to drop this error message? If there's one, > this should probably happen in a separate patch. > Right, I'll maintain the error in next version. >> + ret = drm_bridge_attach(&dpi->encoder, &dpi->bridge, NULL, 0); >> + if (ret) >> goto err_cleanup; >> - } >> >> dpi->bit_num = MTK_DPI_OUT_BIT_NUM_8BITS; >> dpi->channel_swap = MTK_DPI_OUT_CHANNEL_SWAP_RGB; >> @@ -768,8 +760,15 @@ static int mtk_dpi_probe(struct platform_device *pdev) >> >> platform_set_drvdata(pdev, dpi); >> >> + dpi->bridge.funcs = &mtk_dpi_bridge_funcs; >> + dpi->bridge.of_node = dev->of_node; >> + dpi->bridge.type = DRM_MODE_CONNECTOR_DPI; >> + >> + drm_bridge_add(&dpi->bridge); > > I wonder if it's really useful to add the bridge when it's private (you > don't want this bridge to be added to external bridge chains). > >> + >> ret = component_add(dev, &mtk_dpi_component_ops); >> if (ret) { >> + drm_bridge_remove(&dpi->bridge); >> dev_err(dev, "Failed to add component: %d\n", ret); >> return ret; >> } >> @@ -779,7 +778,10 @@ static int mtk_dpi_probe(struct platform_device *pdev) >> >> static int mtk_dpi_remove(struct platform_device *pdev) >> { >> + struct mtk_dpi *dpi = platform_get_drvdata(pdev); >> + >> component_del(&pdev->dev, &mtk_dpi_component_ops); >> + drm_bridge_remove(&dpi->bridge); >> >> return 0; >> } > >