From patchwork Thu Mar 30 09:59:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Francesco Dolcini X-Patchwork-Id: 77004 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:b0ea:0:b0:3b6:4342:cba0 with SMTP id b10csp1015248vqo; Thu, 30 Mar 2023 03:11:38 -0700 (PDT) X-Google-Smtp-Source: AKy350bA0c9LQ2R2Q6WO2/Po+fay5l6NhcKMeslswdL7+jfgqcqONf6URZ4lhrM8IlWTP2z+ptPr X-Received: by 2002:a17:907:a808:b0:93f:fbe:c389 with SMTP id vo8-20020a170907a80800b0093f0fbec389mr20263948ejc.13.1680171098487; Thu, 30 Mar 2023 03:11:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1680171098; cv=none; d=google.com; s=arc-20160816; b=tcUKR8BERbzY+6RdgrLKaO39wdvLCR3foPbgujN7YwZ1MrrSWAhcQXzVOCNE/ltZNR 7kQVmIxkdkrvdEBYu4QYLdVNPbfqw4Wyj1SI/5Ku/lU/Esg05HhpgqzqBg8Qsq0LuFJm +bg+dS8mHmF/QGOslCd7ozsBMXYuKkCE7wgwXlVzFtDc5zmpdJee13QoH6mG/ZTxsqTy X1I5GtGZSVHmlo3K1or+TDn+DvBNPl2ZLCk9stuA4cH8OYn59FZ4kRxTIVHGIkQkH+Ov r7W7AuD6eR2Ndmsql4Z5ImnSYDaraFUKQI3uou0PVyV2qmY2LQPfW6oZU6wmoqb3YVBg m38A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=eQm/t+fxiO72pF8Bs8Vg5OScZgg/LHaPkFf/cy3v4Ig=; b=0QyL7GighRUcxKhYBAH3YQsgpSIvWgtHrMC6IFsBrO38sowbwnxP5oYyEV/yl7e7af Fzgvup4waKKqbYa4RTgxeFL1oKTfnKY/IP6DXib0PxZqs+vXyuuPeuRZASX+Y32akZRr taXUx4qltYyl9FaVhjSG/cl2IzBsXFqLAY+hA/EifeaUrE2WMo+7YEZEj9i/UP4EtfkV kFZ1bb3w9ZrB+n35MbN4oieg7FN7YgghjnaKfb5/UA5WEHaM2DpZNA/GR/te3iS4VfIC N9QdBc2wEmL5wnz9Fkt8+nsXZJOS9EX4U39YqfdFoPlljLb6o4uBTpqCLs3FsgKk2/Rn V9Cg== ARC-Authentication-Results: i=1; mx.google.com; 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 Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j22-20020a170906535600b00927012f155fsi39966985ejo.285.2023.03.30.03.11.14; Thu, 30 Mar 2023 03:11:38 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230512AbjC3KAG (ORCPT + 99 others); Thu, 30 Mar 2023 06:00:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34680 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230342AbjC3J7w (ORCPT ); Thu, 30 Mar 2023 05:59:52 -0400 Received: from mail11.truemail.it (mail11.truemail.it [IPv6:2001:4b7e:0:8::81]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CB27F1BC for ; Thu, 30 Mar 2023 02:59:51 -0700 (PDT) Received: from francesco-nb.pivistrello.it (93-49-2-63.ip317.fastwebnet.it [93.49.2.63]) by mail11.truemail.it (Postfix) with ESMTPA id 1F2CC20FAA; Thu, 30 Mar 2023 11:59:50 +0200 (CEST) From: Francesco Dolcini To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , dri-devel@lists.freedesktop.org Cc: Francesco Dolcini , David Airlie , Daniel Vetter , linux-kernel@vger.kernel.org Subject: [PATCH v1 6/6] drm/bridge: tc358768: Add atomic_get_input_bus_fmts() implementation Date: Thu, 30 Mar 2023 11:59:41 +0200 Message-Id: <20230330095941.428122-7-francesco@dolcini.it> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230330095941.428122-1-francesco@dolcini.it> References: <20230330095941.428122-1-francesco@dolcini.it> MIME-Version: 1.0 X-Spam-Status: No, score=-0.0 required=5.0 tests=SPF_HELO_PASS,SPF_PASS autolearn=unavailable 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 X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1761787089848492231?= X-GMAIL-MSGID: =?utf-8?q?1761787089848492231?= From: Francesco Dolcini Add atomic_get_input_bus_fmts() implementation, tc358768 has a parallel RGB input interface with the actual bus format depending on the amount of parallel input data lines. Without this change when the tc358768 is used with less than 24bit the color mapping is completely wrong. Signed-off-by: Francesco Dolcini --- drivers/gpu/drm/bridge/tc358768.c | 44 +++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c index 4462264274af..c41620409a39 100644 --- a/drivers/gpu/drm/bridge/tc358768.c +++ b/drivers/gpu/drm/bridge/tc358768.c @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -918,6 +919,44 @@ static void tc358768_bridge_enable(struct drm_bridge *bridge) } } +#define MAX_INPUT_SEL_FORMATS 1 + +static u32 * +tc358768_atomic_get_input_bus_fmts(struct drm_bridge *bridge, + struct drm_bridge_state *bridge_state, + struct drm_crtc_state *crtc_state, + struct drm_connector_state *conn_state, + u32 output_fmt, + unsigned int *num_input_fmts) +{ + struct tc358768_priv *priv = bridge_to_tc358768(bridge); + u32 *input_fmts; + + *num_input_fmts = 0; + + input_fmts = kcalloc(MAX_INPUT_SEL_FORMATS, sizeof(*input_fmts), + GFP_KERNEL); + if (!input_fmts) + return NULL; + + switch (priv->pd_lines) { + case 16: + input_fmts[0] = MEDIA_BUS_FMT_RGB565_1X16; + break; + case 18: + input_fmts[0] = MEDIA_BUS_FMT_RGB666_1X18; + break; + default: + case 24: + input_fmts[0] = MEDIA_BUS_FMT_RGB888_1X24; + break; + }; + + *num_input_fmts = MAX_INPUT_SEL_FORMATS; + + return input_fmts; +} + static const struct drm_bridge_funcs tc358768_bridge_funcs = { .attach = tc358768_bridge_attach, .mode_valid = tc358768_bridge_mode_valid, @@ -925,6 +964,11 @@ static const struct drm_bridge_funcs tc358768_bridge_funcs = { .enable = tc358768_bridge_enable, .disable = tc358768_bridge_disable, .post_disable = tc358768_bridge_post_disable, + + .atomic_duplicate_state = drm_atomic_helper_bridge_duplicate_state, + .atomic_destroy_state = drm_atomic_helper_bridge_destroy_state, + .atomic_reset = drm_atomic_helper_bridge_reset, + .atomic_get_input_bus_fmts = tc358768_atomic_get_input_bus_fmts, }; static const struct drm_bridge_timings default_tc358768_timings = {