Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp5776021imm; Tue, 12 Jun 2018 13:09:15 -0700 (PDT) X-Google-Smtp-Source: ADUXVKIak1G8bERbDzCE7+13XPtKaxUr5ZRWNt+pP9WQLjIdStn5eF07f5zCgJNb11fSPU1oKcax X-Received: by 2002:a62:90db:: with SMTP id q88-v6mr1877861pfk.186.1528834154949; Tue, 12 Jun 2018 13:09:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528834154; cv=none; d=google.com; s=arc-20160816; b=v4dYflQxqpUp+uBaotqmGvSa5cXA6/z3Y9jv8MSk7uyOUmveV4gDqWZRatFEgYco1o ScCV8N/uzQu3HHTQ/0FRgsBozlQcnt5290GAXV/PPZ1x2xoxoWkoTHwJR9hryvEU2jMo 99coS3bsH9Ul5XEvC3xNI3ARgTa96spD2PqeVdeuYrNoIiGnbwQfzLgptqUjoxKr6MpO HP9sJZSaOZGmffmZfZqKfh+BcPiGjp5G5WZ3vfo0ZHQ8dFLr0Zj8zgBh6zdfKmcP2C3d UnflG69cOBI9xDhiQi3sYFHN2A6xGw8AW5UPPpxhpx7mCNJD66ALG8fUpJv5x4FbGO5u cFSw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=j18h0Mac0F7bahFkbFQVlGg/H9y8vo3pS6AABwG5t/g=; b=o0Br2Cua0ck8ziOgzudrzJmfV7FwfvBPggDdlIgB9KQBStUh3jlJ04GTVWw9IwKEPH rf5MJI8DRVkUaP+Z7SGIE/nnvw6wRMon+obULVk8xD8nBLs0lVqAset/nrUyS65wrdhU lhm7rZIakvcfPCVhrw9+0j+RECmmvoZBQGkDgQ04A+CF+bYLOaBWjWkmLxKhx1XZQo0Q h3nLUUTViv5mSEZOJnOeU720y1ONUD29QwjDuDkRDMgc9Zf+8rLM/AsNXgucoibCZz7f TUgDEwJA3ie/Chibgtia4retrMCPwhJA82NrrBWKCwjLsuGq7VMhNgYzpZzsm6d7o4FL z8bA== 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id v22-v6si836804ply.328.2018.06.12.13.09.00; Tue, 12 Jun 2018 13:09:14 -0700 (PDT) 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934213AbeFLUCP (ORCPT + 99 others); Tue, 12 Jun 2018 16:02:15 -0400 Received: from mailoutvs40.siol.net ([185.57.226.231]:38356 "EHLO mail.siol.net" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S934050AbeFLUCI (ORCPT ); Tue, 12 Jun 2018 16:02:08 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.siol.net (Zimbra) with ESMTP id 4D4C7522148; Tue, 12 Jun 2018 22:02:06 +0200 (CEST) X-Virus-Scanned: amavisd-new at psrvmta12.zcs-production.pri Received: from mail.siol.net ([127.0.0.1]) by localhost (psrvmta12.zcs-production.pri [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id fgajD2G-DTw8; Tue, 12 Jun 2018 22:02:05 +0200 (CEST) Received: from mail.siol.net (localhost [127.0.0.1]) by mail.siol.net (Zimbra) with ESMTPS id A340A521ED2; Tue, 12 Jun 2018 22:02:05 +0200 (CEST) Received: from localhost.localdomain (unknown [194.152.15.144]) (Authenticated sender: 031275009) by mail.siol.net (Zimbra) with ESMTPSA id 23B8A522174; Tue, 12 Jun 2018 22:02:03 +0200 (CEST) From: Jernej Skrabec To: maxime.ripard@bootlin.com, wens@csie.org, robh+dt@kernel.org Cc: airlied@linux.ie, gustavo@padovan.org, maarten.lankhorst@linux.intel.com, seanpaul@chromium.org, mark.rutland@arm.com, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-sunxi@googlegroups.com Subject: [PATCH v2 07/27] drm/sun4i: Split out code for enumerating endpoints in output port Date: Tue, 12 Jun 2018 22:00:16 +0200 Message-Id: <20180612200036.21483-8-jernej.skrabec@siol.net> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180612200036.21483-1-jernej.skrabec@siol.net> References: <20180612200036.21483-1-jernej.skrabec@siol.net> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Until now, each node has one input port and one output port. However, with TCON TOP this is no longer true. It has 3 input and 3 output ports. In order to prepare to this situation, split out the code which checks all endpoints in input port and adds available components to fifo. This patch doesn't do any functional change. Signed-off-by: Jernej Skrabec --- drivers/gpu/drm/sun4i/sun4i_drv.c | 84 +++++++++++++++++-------------- 1 file changed, 46 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c index e15fa2389e3f..20193d6f33ba 100644 --- a/drivers/gpu/drm/sun4i/sun4i_drv.c +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c @@ -231,12 +231,55 @@ struct endpoint_list { DECLARE_KFIFO(fifo, struct device_node *, 16); }; +static void sun4i_drv_traverse_endpoints(struct endpoint_list *list, + struct device_node *node, + int port_id) +{ + struct device_node *ep, *remote, *port; + + port = of_graph_get_port_by_id(node, port_id); + if (!port) { + DRM_DEBUG_DRIVER("No output to bind on port %d\n", port_id); + return; + } + + for_each_available_child_of_node(port, ep) { + remote = of_graph_get_remote_port_parent(ep); + if (!remote) { + DRM_DEBUG_DRIVER("Error retrieving the output node\n"); + continue; + } + + /* + * If the node is our TCON, the first port is used for + * panel or bridges, and will not be part of the + * component framework. + */ + if (sun4i_drv_node_is_tcon(node)) { + struct of_endpoint endpoint; + + if (of_graph_parse_endpoint(ep, &endpoint)) { + DRM_DEBUG_DRIVER("Couldn't parse endpoint\n"); + of_node_put(remote); + continue; + } + + if (!endpoint.id) { + DRM_DEBUG_DRIVER("Endpoint is our panel... skipping\n"); + of_node_put(remote); + continue; + } + } + + kfifo_put(&list->fifo, remote); + } +} + static int sun4i_drv_add_endpoints(struct device *dev, struct endpoint_list *list, struct component_match **match, struct device_node *node) { - struct device_node *port, *ep, *remote; int count = 0; /* @@ -272,43 +315,8 @@ static int sun4i_drv_add_endpoints(struct device *dev, count++; } - /* Inputs are listed first, then outputs */ - port = of_graph_get_port_by_id(node, 1); - if (!port) { - DRM_DEBUG_DRIVER("No output to bind\n"); - return count; - } - - for_each_available_child_of_node(port, ep) { - remote = of_graph_get_remote_port_parent(ep); - if (!remote) { - DRM_DEBUG_DRIVER("Error retrieving the output node\n"); - continue; - } - - /* - * If the node is our TCON, the first port is used for - * panel or bridges, and will not be part of the - * component framework. - */ - if (sun4i_drv_node_is_tcon(node)) { - struct of_endpoint endpoint; - - if (of_graph_parse_endpoint(ep, &endpoint)) { - DRM_DEBUG_DRIVER("Couldn't parse endpoint\n"); - of_node_put(remote); - continue; - } - - if (!endpoint.id) { - DRM_DEBUG_DRIVER("Endpoint is our panel... skipping\n"); - of_node_put(remote); - continue; - } - } - - kfifo_put(&list->fifo, remote); - } + /* each node has at least one output */ + sun4i_drv_traverse_endpoints(list, node, 1); return count; } -- 2.17.1