Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp5009568ybf; Wed, 4 Mar 2020 15:26:25 -0800 (PST) X-Google-Smtp-Source: ADFU+vsuucOri8jCtdsCEdvZT+FmNPWJRQbqKCI1N5yX6OncU5Q4W5LesebGs9hFQG3iuW6v0ica X-Received: by 2002:a05:6830:1645:: with SMTP id h5mr4439940otr.317.1583364385407; Wed, 04 Mar 2020 15:26:25 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583364385; cv=none; d=google.com; s=arc-20160816; b=YF0P7sHUtNd/DU0LkCU1Y1S1u3PfKnSVzRCud7Lw0jNc0UKsJX213dsgKzYIsF45+A qlXeNMT4fMPS9uoVlmx3Q+8KK/ubXqCgdnDITyBBnqetOuotEG9TximQKKl31JH8+l2t lBQLGBQ62UJQ7rqbfuZg5moZHSxBjRpynuAF7I0fFvtZcBqCdR059NbGh9tRXQOIQh09 3gmapl03kXQD0AqtafjljxmX52ediOpgkK/DXSXCfmq7SMNkMIx3BUMEWwDzOpkG1hOJ chIz6GnQk2BvNcAI5fq2EphoymP9DJA1QVhHVDVlH3fhJ64FVrcd9h2DIRyTUjB4cG7J VM8Q== 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:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=dRM0vJ8ClSap58Yjd+HMQbh+8D1pgLr0GaTqPxs2mXk=; b=xPJBCpz9FMcpHOhZSKqABsFmG7k1lWIma8y972w7bQ/kuLa0wAjDP7xrzQp/xINjou Kgs38pgBrzZk8EBU8zB2SjIZk30x+clCsWz0M8zYDzabAssARK5j1q0jiYkoiI/Q8Fl8 kymVyB+8R/9zG96TsojLYcflfpp99MYVX3b/qgZS8o8Lw2hPMitoDYHf/TU3S0kLyT2P e5SqB/OnyUK9gcGs1YqokT3HbSDE9CPHP1K4YgA1keMJ5LMzV8/dfcjNN27nvZZf3WTj 35hUvccjdrhc0krFYBLmspJ0tKoh3eVqEps212VYukUcPrMpOQh2oEbtatBHy2Mn4Cyw HuoQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=siol.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id s13si2030346otr.94.2020.03.04.15.26.14; Wed, 04 Mar 2020 15:26:25 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=siol.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2388637AbgCDXZp (ORCPT + 99 others); Wed, 4 Mar 2020 18:25:45 -0500 Received: from mailoutvs4.siol.net ([185.57.226.195]:47953 "EHLO mail.siol.net" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2388622AbgCDXZo (ORCPT ); Wed, 4 Mar 2020 18:25:44 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.siol.net (Postfix) with ESMTP id 8EAAC523EAA; Thu, 5 Mar 2020 00:25:42 +0100 (CET) X-Virus-Scanned: amavisd-new at psrvmta11.zcs-production.pri Received: from mail.siol.net ([127.0.0.1]) by localhost (psrvmta11.zcs-production.pri [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id 4GlHJmcXyjtl; Thu, 5 Mar 2020 00:25:42 +0100 (CET) Received: from mail.siol.net (localhost [127.0.0.1]) by mail.siol.net (Postfix) with ESMTPS id 34B7152273A; Thu, 5 Mar 2020 00:25:42 +0100 (CET) Received: from localhost.localdomain (cpe-194-152-20-232.static.triera.net [194.152.20.232]) (Authenticated sender: 031275009) by mail.siol.net (Postfix) with ESMTPSA id AECC4523FC2; Thu, 5 Mar 2020 00:25:39 +0100 (CET) From: Jernej Skrabec To: a.hajda@samsung.com, narmstrong@baylibre.com Cc: Laurent.pinchart@ideasonboard.com, jonas@kwiboo.se, jernej.skrabec@siol.net, airlied@linux.ie, daniel@ffwll.ch, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 4/4] drm/bridge: dw-hdmi: rework csc related functions Date: Thu, 5 Mar 2020 00:25:12 +0100 Message-Id: <20200304232512.51616-5-jernej.skrabec@siol.net> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200304232512.51616-1-jernej.skrabec@siol.net> References: <20200304232512.51616-1-jernej.skrabec@siol.net> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org is_color_space_conversion() is a misnomer. It checks not only if color space conversion is needed, but also if format conversion is needed. This is actually desired behaviour because result of this function determines if CSC block should be enabled or not (CSC block can also do format conversion). In order to clear misunderstandings, let's rework is_color_space_conversion() to do exactly what is supposed to do and add another function which will determine if CSC block must be enabled or not. Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 31 +++++++++++++++-------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/= bridge/synopsys/dw-hdmi.c index c8a02e5b5e1b..7724191e0a8b 100644 --- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c +++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c @@ -963,11 +963,14 @@ static void hdmi_video_sample(struct dw_hdmi *hdmi) =20 static int is_color_space_conversion(struct dw_hdmi *hdmi) { - return (hdmi->hdmi_data.enc_in_bus_format !=3D - hdmi->hdmi_data.enc_out_bus_format) || - (hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_in_bus_format) && - hdmi_bus_fmt_is_rgb(hdmi->hdmi_data.enc_out_bus_format) && - hdmi->hdmi_data.rgb_limited_range); + struct hdmi_data_info *hdmi_data =3D &hdmi->hdmi_data; + bool is_input_rgb, is_output_rgb; + + is_input_rgb =3D hdmi_bus_fmt_is_rgb(hdmi_data->enc_in_bus_format); + is_output_rgb =3D hdmi_bus_fmt_is_rgb(hdmi_data->enc_out_bus_format); + + return (is_input_rgb !=3D is_output_rgb) || + (is_input_rgb && is_output_rgb && hdmi_data->rgb_limited_range); } =20 static int is_color_space_decimation(struct dw_hdmi *hdmi) @@ -994,6 +997,13 @@ static int is_color_space_interpolation(struct dw_hd= mi *hdmi) return 0; } =20 +static bool is_conversion_needed(struct dw_hdmi *hdmi) +{ + return is_color_space_conversion(hdmi) || + is_color_space_decimation(hdmi) || + is_color_space_interpolation(hdmi); +} + static void dw_hdmi_update_csc_coeffs(struct dw_hdmi *hdmi) { const u16 (*csc_coeff)[3][4] =3D &csc_coeff_default; @@ -2014,18 +2024,19 @@ static void dw_hdmi_enable_video_path(struct dw_h= dmi *hdmi) hdmi_writeb(hdmi, hdmi->mc_clkdis, HDMI_MC_CLKDIS); =20 /* Enable csc path */ - if (is_color_space_conversion(hdmi)) { + if (is_conversion_needed(hdmi)) { hdmi->mc_clkdis &=3D ~HDMI_MC_CLKDIS_CSCCLK_DISABLE; hdmi_writeb(hdmi, hdmi->mc_clkdis, HDMI_MC_CLKDIS); - } =20 - /* Enable color space conversion if needed */ - if (is_color_space_conversion(hdmi)) hdmi_writeb(hdmi, HDMI_MC_FLOWCTRL_FEED_THROUGH_OFF_CSC_IN_PATH, HDMI_MC_FLOWCTRL); - else + } else { + hdmi->mc_clkdis |=3D HDMI_MC_CLKDIS_CSCCLK_DISABLE; + hdmi_writeb(hdmi, hdmi->mc_clkdis, HDMI_MC_CLKDIS); + hdmi_writeb(hdmi, HDMI_MC_FLOWCTRL_FEED_THROUGH_OFF_CSC_BYPASS, HDMI_MC_FLOWCTRL); + } } =20 /* Workaround to clear the overflow condition */ --=20 2.25.1