Received: by 2002:a05:7412:6592:b0:d7:7d3a:4fe2 with SMTP id m18csp1102991rdg; Fri, 11 Aug 2023 09:46:11 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFmUFxvSr9Bc3yx+RdwEtBplzFVKnX842N1xON01we8pavlWonUgaBlHKfiBtZnRWmleP65 X-Received: by 2002:a17:902:e550:b0:1bb:809d:ae72 with SMTP id n16-20020a170902e55000b001bb809dae72mr3062234plf.33.1691772371312; Fri, 11 Aug 2023 09:46:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691772371; cv=none; d=google.com; s=arc-20160816; b=aIeo6/W64XvZmUITVcsq0X3KvP8kV30LMZOJAj3uhSpc573AGNVKDXz7cHRXZkJ8qC 1NIAFPb+dzhYdKuEso5fnDx+WgL44Xk+3Ft5DjYL5UjpBDfaD496pbIm98LIoDNKsyM8 ml1tVfCmTZC2mI3Si4a9RxdzMi/J3e9m4UKLUfTAKoGtMJS2LltZbYl91atgcAu2HZwB eW/UzzXtx2pHCLJCgomyeBCTZCmYg+vxFPZnvYuEDq+TR+ALpjehfKB4OX1/6Cby3rRN nDlZUsohaYp/elAkXEqSayWcY4vUNtIewZ944vLyhZon5tb2+InbdX3aVfahZ0/0itt5 pBxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=iAbWJt7VYJZGb0oGJLZpXmL9Pg/Akce6I5YlnCbDdyQ=; fh=3QbqESXJnchgYeOzdjIBlGxddfyGojmAihSJsrm+GQA=; b=O3HI6yxcPlArimJznZzmK7VaylV2QzKYXt0IkiIY5Zfw1SO6mBlXBqV3bqqVvlP+Jz MrUjriM1pk6XGHeOm56nHKZjMGYlWuWfArEsDjv85+xY2MZsdRONK39zy+0JfTYiYhB8 T8lVbYLTLe7p6mk97CGMjTKDEvEq3fhflAbMkrorvfJBjrspp6LjSE0T/sKwS9aSzPVX pYnUGuNktYyKzpn62cS4bKfmInj1zoRPOotKvF9aJlCe2lo8oyEczTu5znNCAnjZ3DEs 9iDyIpPhCjt0GmNI6ZmMpMz9bxE+8vFiAFFeQ/PHs6QHjG9d8JeYIKgkdXDdJZm6C36w ji6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=aRrYJz8d; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w13-20020a170902e88d00b001b9c3498510si3642226plg.469.2023.08.11.09.45.59; Fri, 11 Aug 2023 09:46:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20221208 header.b=aRrYJz8d; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235322AbjHKQYm (ORCPT + 99 others); Fri, 11 Aug 2023 12:24:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40312 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235116AbjHKQYl (ORCPT ); Fri, 11 Aug 2023 12:24:41 -0400 Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ACAD12D66 for ; Fri, 11 Aug 2023 09:24:39 -0700 (PDT) Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-4fe45da0a89so3817296e87.1 for ; Fri, 11 Aug 2023 09:24:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1691771078; x=1692375878; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=iAbWJt7VYJZGb0oGJLZpXmL9Pg/Akce6I5YlnCbDdyQ=; b=aRrYJz8d5a5QwsSiJmRKAxgPPv6BSTNLZCK5XP2vev2u1XU7FVBaHn7B88YPZgdJBZ YlEQ17K7ymZaAR0wlgGOUhnPZvqnspOocaQhuqcLx9uLGgmxEoXo7HQbw0aTaBX0w3Zb XmMfrbBxszQzcoeRnJK+pPlgdNMEJX07Mh6Th+i0wrylCNWmZwrBOtG51WQ9v/2Q7EaU aH5Ky7PHIF+1gaI44Jyv+Ks/YNhn8IKjCrptpZQyFXxqGYk5CdUJ6DBClB1od7AsEiti MLGw70erkPOOTtfDOZ329UPusEs94y4/KVwVGcrijEw9NSvZVy74hg8aJlyUIFliWWq0 Iamw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691771078; x=1692375878; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=iAbWJt7VYJZGb0oGJLZpXmL9Pg/Akce6I5YlnCbDdyQ=; b=AQxaJKcds5tsipi7qhJzW78XDhl5OxQKCLio/alJkGIFk8ySkfva4aiy3vLtGvLNf0 aKq+NmSa6zloRNSFDtoI8b0QBU70CwfSxnm7TAXxwv6Tpe9DXHncbIf75p00i1zYIrq+ B3aw1kMWMEUqUC2Mf/XUwgTUujazNXG0bEh41ZvZ/hoAh8jeE0XF+nytVvTq0ftNfQf4 a2h1g2Pkx+L19x2LiVi+1soBaPHAnnikuqLNVcTJR4I0saaCv8kFthjuFe+n6sZNpu7f S3+yCGs7jJNtp34r/a1pTI4sOcGnBfm5OXWCWXuO9BeNVeasN9aD0pbCNXJPUJqZjuiR ryTQ== X-Gm-Message-State: AOJu0Yw3ypbJXaw2QA+sy9TIt6bFS5ytGRUrK+WESDw988dpvfUyCE7A azwE5w70gez8o/GdI9R8SKs= X-Received: by 2002:a05:6512:3089:b0:4fe:17a8:bee5 with SMTP id z9-20020a056512308900b004fe17a8bee5mr933959lfd.31.1691771077544; Fri, 11 Aug 2023 09:24:37 -0700 (PDT) Received: from [10.0.0.100] (host-85-29-92-32.kaisa-laajakaista.fi. [85.29.92.32]) by smtp.gmail.com with ESMTPSA id v7-20020ac25587000000b004fe3229e584sm768475lfg.270.2023.08.11.09.24.36 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 11 Aug 2023 09:24:37 -0700 (PDT) Message-ID: <1df8fff3-9ba0-49cb-80e4-03f0cef57f9b@gmail.com> Date: Fri, 11 Aug 2023 19:26:40 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 04/11] drm/bridge: tc358768: Use struct videomode Content-Language: en-US To: Tomi Valkeinen , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , David Airlie , Daniel Vetter , Francesco Dolcini Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Aradhya Bhatia References: <20230804-tc358768-v1-0-1afd44b7826b@ideasonboard.com> <20230804-tc358768-v1-4-1afd44b7826b@ideasonboard.com> From: =?UTF-8?Q?P=C3=A9ter_Ujfalusi?= In-Reply-To: <20230804-tc358768-v1-4-1afd44b7826b@ideasonboard.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 04/08/2023 13:44, Tomi Valkeinen wrote: > The TC358768 documentation uses HFP, HBP, etc. values to deal with the > video mode, while the driver currently uses the DRM display mode > (htotal, hsync_start, etc). > > Change the driver to convert the DRM display mode to struct videomode, > which then allows us to use the same units the documentation uses. This > makes it much easier to work on the code when using the TC358768 > documentation as a reference. Reviewed-by: Peter Ujfalusi > > Signed-off-by: Tomi Valkeinen > --- > drivers/gpu/drm/bridge/tc358768.c | 45 +++++++++++++++++++++------------------ > 1 file changed, 24 insertions(+), 21 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c > index d5831a1236e9..9b633038af33 100644 > --- a/drivers/gpu/drm/bridge/tc358768.c > +++ b/drivers/gpu/drm/bridge/tc358768.c > @@ -650,6 +650,7 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) > u32 dsiclk, dsibclk, video_start; > const u32 internal_delay = 40; > int ret, i; > + struct videomode vm; > > if (mode_flags & MIPI_DSI_CLOCK_NON_CONTINUOUS) { > dev_warn_once(priv->dev, "Non-continuous mode unimplemented, falling back to continuous\n"); > @@ -673,6 +674,8 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) > return; > } > > + drm_display_mode_to_videomode(mode, &vm); > + > dsiclk = priv->dsiclk; > dsibclk = dsiclk / 4; > > @@ -681,28 +684,28 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) > switch (dsi_dev->format) { > case MIPI_DSI_FMT_RGB888: > val |= (0x3 << 4); > - hact = mode->hdisplay * 3; > - video_start = (mode->htotal - mode->hsync_start) * 3; > + hact = vm.hactive * 3; > + video_start = (vm.hsync_len + vm.hback_porch) * 3; > data_type = MIPI_DSI_PACKED_PIXEL_STREAM_24; > break; > case MIPI_DSI_FMT_RGB666: > val |= (0x4 << 4); > - hact = mode->hdisplay * 3; > - video_start = (mode->htotal - mode->hsync_start) * 3; > + hact = vm.hactive * 3; > + video_start = (vm.hsync_len + vm.hback_porch) * 3; > data_type = MIPI_DSI_PACKED_PIXEL_STREAM_18; > break; > > case MIPI_DSI_FMT_RGB666_PACKED: > val |= (0x4 << 4) | BIT(3); > - hact = mode->hdisplay * 18 / 8; > - video_start = (mode->htotal - mode->hsync_start) * 18 / 8; > + hact = vm.hactive * 18 / 8; > + video_start = (vm.hsync_len + vm.hback_porch) * 18 / 8; > data_type = MIPI_DSI_PIXEL_STREAM_3BYTE_18; > break; > > case MIPI_DSI_FMT_RGB565: > val |= (0x5 << 4); > - hact = mode->hdisplay * 2; > - video_start = (mode->htotal - mode->hsync_start) * 2; > + hact = vm.hactive * 2; > + video_start = (vm.hsync_len + vm.hback_porch) * 2; > data_type = MIPI_DSI_PACKED_PIXEL_STREAM_16; > break; > default: > @@ -814,43 +817,43 @@ static void tc358768_bridge_pre_enable(struct drm_bridge *bridge) > tc358768_write(priv, TC358768_DSI_EVENT, 0); > > /* vact */ > - tc358768_write(priv, TC358768_DSI_VACT, mode->vdisplay); > + tc358768_write(priv, TC358768_DSI_VACT, vm.vactive); > > /* vsw */ > - tc358768_write(priv, TC358768_DSI_VSW, > - mode->vsync_end - mode->vsync_start); > + tc358768_write(priv, TC358768_DSI_VSW, vm.vsync_len); > + > /* vbp */ > - tc358768_write(priv, TC358768_DSI_VBPR, > - mode->vtotal - mode->vsync_end); > + tc358768_write(priv, TC358768_DSI_VBPR, vm.vback_porch); > > /* hsw * byteclk * ndl / pclk */ > - val = (u32)div_u64((mode->hsync_end - mode->hsync_start) * > + val = (u32)div_u64(vm.hsync_len * > ((u64)priv->dsiclk / 4) * priv->dsi_lanes, > - mode->clock * 1000); > + vm.pixelclock); > tc358768_write(priv, TC358768_DSI_HSW, val); > > /* hbp * byteclk * ndl / pclk */ > - val = (u32)div_u64((mode->htotal - mode->hsync_end) * > + val = (u32)div_u64(vm.hback_porch * > ((u64)priv->dsiclk / 4) * priv->dsi_lanes, > - mode->clock * 1000); > + vm.pixelclock); > tc358768_write(priv, TC358768_DSI_HBPR, val); > } else { > /* Set event mode */ > tc358768_write(priv, TC358768_DSI_EVENT, 1); > > /* vact */ > - tc358768_write(priv, TC358768_DSI_VACT, mode->vdisplay); > + tc358768_write(priv, TC358768_DSI_VACT, vm.vactive); > > /* vsw (+ vbp) */ > tc358768_write(priv, TC358768_DSI_VSW, > - mode->vtotal - mode->vsync_start); > + vm.vsync_len + vm.vback_porch); > + > /* vbp (not used in event mode) */ > tc358768_write(priv, TC358768_DSI_VBPR, 0); > > /* (hsw + hbp) * byteclk * ndl / pclk */ > - val = (u32)div_u64((mode->htotal - mode->hsync_start) * > + val = (u32)div_u64((vm.hsync_len + vm.hback_porch) * > ((u64)priv->dsiclk / 4) * priv->dsi_lanes, > - mode->clock * 1000); > + vm.pixelclock); > tc358768_write(priv, TC358768_DSI_HSW, val); > > /* hbp (not used in event mode) */ > -- Péter