From patchwork Sat Apr 18 17:06:58 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11498177 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 21DB014DD for ; Mon, 20 Apr 2020 06:55:51 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id F068D21473 for ; Mon, 20 Apr 2020 06:55:50 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="k8+tA4Lg" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org F068D21473 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 656486E21B; Mon, 20 Apr 2020 06:55:34 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x241.google.com (mail-lj1-x241.google.com [IPv6:2a00:1450:4864:20::241]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1BD186ECB6 for ; Sat, 18 Apr 2020 17:07:20 +0000 (UTC) Received: by mail-lj1-x241.google.com with SMTP id e25so5341325ljg.5 for ; Sat, 18 Apr 2020 10:07:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LF9qYPsgEt1mOQlLDUJnZ056rYW87d7CQEg+TJz1Umo=; b=k8+tA4LgVm/G4HwuE5XkDVDgVP2w8rgA8cOUO3qaGJLBV/QXBgCtT8+izVcKJ9SH9i dWi5cPGfPBEnUGD0+b8pcaw3xxATY/NlnPqvP1i5I4N1CaM6L9Afkbu38qDJAW6vakzO UnEx4O2FNYFQ0RAo8p316b8SlGuYtPKe0V9Z0cwGQ304j80ERHW1vcnNsAOfAakWJzUt iCz57nV9Xj0rJ+kg9evHgr2LN1pfLSXk7KpFmDDuUS2h19N84cD63v9860QXjnrBMS36 O0lHx8LkKbWZSa2ayFBTA7QJdRq1JzKZ5AiNLZFJ+qpFSSHT/4HzSJyQrASe9QFovvrB khpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LF9qYPsgEt1mOQlLDUJnZ056rYW87d7CQEg+TJz1Umo=; b=Rj5AE0tXbcP7c3HDoGXuF4o9Hk5/kmcEeJwEXoAYHpMOUrGo9x3dJxLXBeMF4CnkLy JYAsbtD+XfI29We9igIPAJdxjqJ3jCRpnyQnWl6RVFTlJ+BT9L6QPffk1yg4wGR8+H3a 8kyzvMdm55mZxzsvSPtwvXPOPuJa7DY5jHAffXZrFWNXaiK+Pl/USNx8izBX3cPl6Hub Q+OpAia+/Bp8plBsOEMTWu7ZH8BNKIIrwXfqaoUPbcK3kek8hDEzv7mHel/pAfK//Q57 y1wKCnesI7ZQ3DgZyXUYrrE3TMg+Y3mbwDqfYyqIg2tryxHTAXwPu21lGfdUkUYuk7vd S7yQ== X-Gm-Message-State: AGi0PuYspKJMaOh1u9QllXq/FqoHs+NFWpdZNrT3Fxwy4vAgM7ZfqI5A EUSOXLeE7N1izfUTOyX2U1U= X-Google-Smtp-Source: APiQypLOLWFYy5XnCNRUduSZevMMwv/vy951mpF50dk/aGrJ00HsLstuqzx1B3gNuIYB77wn1VAJBQ== X-Received: by 2002:a2e:164e:: with SMTP id 14mr4869678ljw.253.1587229638510; Sat, 18 Apr 2020 10:07:18 -0700 (PDT) Received: from localhost.localdomain (ppp91-78-208-152.pppoe.mtu-net.ru. [91.78.208.152]) by smtp.gmail.com with ESMTPSA id e15sm8768909ljb.25.2020.04.18.10.07.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2020 10:07:17 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Sam Ravnborg , Laurent Pinchart , Rob Herring , Frank Rowand Subject: [PATCH v5 1/6] of_graph: add of_graph_get_local_port() Date: Sat, 18 Apr 2020 20:06:58 +0300 Message-Id: <20200418170703.1583-2-digetx@gmail.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200418170703.1583-1-digetx@gmail.com> References: <20200418170703.1583-1-digetx@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 20 Apr 2020 06:55:01 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" In some case, like a DRM display code for example, it's useful to silently check whether port node exists at all in a device-tree before proceeding with parsing the graph. This patch adds of_graph_get_local_port() which returns pointer to a local port node, or NULL if graph isn't specified in a device-tree for a given device node. Signed-off-by: Dmitry Osipenko Reviewed-by: Rob Herring Reviewed-by: Sam Ravnborg --- drivers/of/property.c | 32 +++++++++++++++++++++++--------- include/linux/of_graph.h | 7 +++++++ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/drivers/of/property.c b/drivers/of/property.c index 252e4f600155..5dbeccaabb86 100644 --- a/drivers/of/property.c +++ b/drivers/of/property.c @@ -608,15 +608,7 @@ struct device_node *of_graph_get_next_endpoint(const struct device_node *parent, * parent port node. */ if (!prev) { - struct device_node *node; - - node = of_get_child_by_name(parent, "ports"); - if (node) - parent = node; - - port = of_get_child_by_name(parent, "port"); - of_node_put(node); - + port = of_graph_get_local_port(parent); if (!port) { pr_err("graph: no port node found in %pOF\n", parent); return NULL; @@ -765,6 +757,28 @@ struct device_node *of_graph_get_remote_port(const struct device_node *node) } EXPORT_SYMBOL(of_graph_get_remote_port); +/** + * of_graph_get_local_port() - get local port node + * @node: pointer to a local endpoint device_node + * + * Return: First local port node associated with local endpoint node linked + * to @node. Use of_node_put() on it when done. + */ +struct device_node *of_graph_get_local_port(const struct device_node *node) +{ + struct device_node *ports, *port; + + ports = of_get_child_by_name(node, "ports"); + if (ports) + node = ports; + + port = of_get_child_by_name(node, "port"); + of_node_put(ports); + + return port; +} +EXPORT_SYMBOL(of_graph_get_local_port); + int of_graph_get_endpoint_count(const struct device_node *np) { struct device_node *endpoint; diff --git a/include/linux/of_graph.h b/include/linux/of_graph.h index 01038a6aade0..1fdeb72c7765 100644 --- a/include/linux/of_graph.h +++ b/include/linux/of_graph.h @@ -54,6 +54,7 @@ struct device_node *of_graph_get_remote_port_parent( struct device_node *of_graph_get_remote_port(const struct device_node *node); struct device_node *of_graph_get_remote_node(const struct device_node *node, u32 port, u32 endpoint); +struct device_node *of_graph_get_local_port(const struct device_node *node); #else static inline int of_graph_parse_endpoint(const struct device_node *node, @@ -116,6 +117,12 @@ static inline struct device_node *of_graph_get_remote_node( return NULL; } +static inline struct device_node *of_graph_get_local_port( + const struct device_node *node) +{ + return NULL; +} + #endif /* CONFIG_OF */ #endif /* __LINUX_OF_GRAPH_H */ From patchwork Sat Apr 18 17:06:59 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11498159 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id D5B4514B4 for ; Mon, 20 Apr 2020 06:55:16 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id B402521473 for ; Mon, 20 Apr 2020 06:55:16 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="IQ9EFc/9" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B402521473 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 1564B6E1BE; Mon, 20 Apr 2020 06:55:02 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x244.google.com (mail-lj1-x244.google.com [IPv6:2a00:1450:4864:20::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id 527A96ECB6 for ; Sat, 18 Apr 2020 17:07:21 +0000 (UTC) Received: by mail-lj1-x244.google.com with SMTP id q22so5363934ljg.0 for ; Sat, 18 Apr 2020 10:07:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=GmbaXDj6/A2yy3AR+sXi1M1Zh+o7hArk00ZH5b0F9ZU=; b=IQ9EFc/970LojBwLiW62BzGPBnOzmy32A9jVWoWDsei2DhVR8dy4ffZK8x9F8N/PT9 wz+97rXX+dPMgbFLEKEgQdx3eKpfxvKbKVItMhwDIZZM4azyCyXkzGwkA1cOCVO16rZW ijs5x3KGwycbHCNqt377mxeBk5RpP4qSU/hhCb8VoluNtNwpdZk0fRsstUZ/wF6uSkIP cH2DfNt7s4OhUz9VQoicOILzpbPXRXEOJ9miVMZ9abM3msVEBkoUeDljv5312QK5ipCx mV4h5MQAtt6gTz0k6nhyJvwz5ONJBG8xfvHxyizNXWX3ekQx+Z2N98hMEt1qNfcYdgBC FlVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=GmbaXDj6/A2yy3AR+sXi1M1Zh+o7hArk00ZH5b0F9ZU=; b=K880XfWuQMtgMYVwwL0DJvxjW40d2KZLu233Kv9Y/nagrP2Gz4jzyVbOcp9d1aQaXt HIp7i8SghK25alObVSEHvbD4tTJEnJuAAhY1QxVrTM2CXJGoORX0OkI7M0ZmNNAaG07k kNEuJakUNamt2eusVp5Lgt6foTyFvQ5RiPuDFv4n/iNpVlkDE43oJjON4Oackt7Na58c +eAA1cNEbaeSeLSmz1pjwMSHm5gQtTmw+wqNdjJDPYPikAy1KiekOE0S9EBji84DsXzX aEQWrs1wwEp60gh1Oobe46AvqM/1fS2Pf8sva9WpiZI2qoHcVBinryAM+oSELQSIEEmH 4mfw== X-Gm-Message-State: AGi0PuYc+N7X6BNd++XXUtfdSQks1src1RFaAgCZoKH/sqrQhu9VE8Qs /taHXWc2J5xZLBQxExyLIdY= X-Google-Smtp-Source: APiQypJZeGBXci/SYfTR0hCgDyYACwvrJkNlkiEL97tY/h/8Q5HyrC0kRIAH1vune5hFb+wviydGyw== X-Received: by 2002:a2e:9a4c:: with SMTP id k12mr5235920ljj.189.1587229639769; Sat, 18 Apr 2020 10:07:19 -0700 (PDT) Received: from localhost.localdomain (ppp91-78-208-152.pppoe.mtu-net.ru. [91.78.208.152]) by smtp.gmail.com with ESMTPSA id e15sm8768909ljb.25.2020.04.18.10.07.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2020 10:07:19 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Sam Ravnborg , Laurent Pinchart , Rob Herring , Frank Rowand Subject: [PATCH v5 2/6] drm/of: Make drm_of_find_panel_or_bridge() to check graph's presence Date: Sat, 18 Apr 2020 20:06:59 +0300 Message-Id: <20200418170703.1583-3-digetx@gmail.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200418170703.1583-1-digetx@gmail.com> References: <20200418170703.1583-1-digetx@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 20 Apr 2020 06:55:01 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" When graph isn't defined in a device-tree, the of_graph_get_remote_node() prints a noisy error message, telling that port node is not found. This is undesirable behaviour in our case because absence of a panel/bridge graph is a valid case. Let's check presence of the local port in a device-tree before proceeding with parsing the graph. Signed-off-by: Dmitry Osipenko Reviewed-by: Sam Ravnborg --- drivers/gpu/drm/drm_of.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index b50b44e76279..e0652c38f357 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -239,13 +239,24 @@ int drm_of_find_panel_or_bridge(const struct device_node *np, struct drm_bridge **bridge) { int ret = -EPROBE_DEFER; - struct device_node *remote; + struct device_node *local, *remote; if (!panel && !bridge) return -EINVAL; if (panel) *panel = NULL; + /* + * of_graph_get_remote_node() produces a noisy error message if port + * node isn't found and the absence of the port is a legit case here, + * so at first we silently check presence of the local port. + */ + local = of_graph_get_local_port(np); + if (!local) + return -ENODEV; + + of_node_put(local); + remote = of_graph_get_remote_node(np, port, endpoint); if (!remote) return -ENODEV; From patchwork Sat Apr 18 17:07:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11498185 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 9040D14DD for ; Mon, 20 Apr 2020 06:55:57 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6E64B21473 for ; Mon, 20 Apr 2020 06:55:57 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="q6O2vRM2" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6E64B21473 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2E34E6E248; Mon, 20 Apr 2020 06:55:36 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf1-x142.google.com (mail-lf1-x142.google.com [IPv6:2a00:1450:4864:20::142]) by gabe.freedesktop.org (Postfix) with ESMTPS id 674346ECB6 for ; Sat, 18 Apr 2020 17:07:22 +0000 (UTC) Received: by mail-lf1-x142.google.com with SMTP id g10so3954102lfj.13 for ; Sat, 18 Apr 2020 10:07:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pVig2XpcIi1wUU1dzHSjXjcQnTVD/QNrePxBnDzBNIU=; b=q6O2vRM2j90iSyGYSzu+HAnw6lxsn7evud23Uvn5jGlos/gNwnCPxaUWaQ9XGbgx9d soLIh7aFCW90WQ/oKVjEBIz3r/kZ/T1HxcvuvLkskSx6o7dw4btmQ1mhpNCWrkWillhB Uf8C1qV6EJ/JyYt/7l88m3KYZGvaCFrEA/jAew3FCea43VeOV5FVznOaRo/lQoEOhfx7 qcjKWVeI7bKI5fbPPSlYjLDhypXBw3qptTPU4AuAB0nhymN2NiS9WlsE7jZqkN6In4uX UVohA4jswnEmQhv983uejcydMdMl5vcu7aNsQuLPdjqH0OZttOsQqyXr1LSqbxzxPqGp uVLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pVig2XpcIi1wUU1dzHSjXjcQnTVD/QNrePxBnDzBNIU=; b=SVS2+H3YBBlouRv755MuepQ5T0LcBQf2HIGnos9DATVc93pE6zgrYRmJglAQ2r3jcH ueuGqnbLidHcrVwVPgA2QbwLsJzm7L1hr4+rF6XMGXaLu3xYzvamkA73XcqWnDjMTeZN BS8OA/IcsXyvvIYxSZ9yHsvbF96ctUCWYSueVjI7KM8OpDx8exTT96sb2PTPxnslHh0J uERpdYU3rp5dnLyxtl+J572r2+hQses23HSUwbuwveME5GnNaNoMjMqyNLd3uaURV15Y vQXA6P+ChhjdTm86u+Zh/vnJ7tiOGGOVlf+glyRC9e2tKyg3bPaeA7R2SdIIuQ1ab+L1 TJgQ== X-Gm-Message-State: AGi0PubAETVBSYV//qr3oJiKeam++VNzNTmayV8X7ZmoUc6WZhFBElyW MtjY2mrdflLOu6NUY2uhWt0= X-Google-Smtp-Source: APiQypIhxIyWT/S7Fta9RYW+bfGXh8dePj+daAJW5u9iCbAWiAyKA7IzL+Sv5RBbG8KNBVL8jv4zkg== X-Received: by 2002:a05:6512:108a:: with SMTP id j10mr5470969lfg.38.1587229640823; Sat, 18 Apr 2020 10:07:20 -0700 (PDT) Received: from localhost.localdomain (ppp91-78-208-152.pppoe.mtu-net.ru. [91.78.208.152]) by smtp.gmail.com with ESMTPSA id e15sm8768909ljb.25.2020.04.18.10.07.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2020 10:07:20 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Sam Ravnborg , Laurent Pinchart , Rob Herring , Frank Rowand Subject: [PATCH v5 3/6] drm/tegra: output: Don't leak OF node on error Date: Sat, 18 Apr 2020 20:07:00 +0300 Message-Id: <20200418170703.1583-4-digetx@gmail.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200418170703.1583-1-digetx@gmail.com> References: <20200418170703.1583-1-digetx@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 20 Apr 2020 06:55:01 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The OF node should be put before returning error in tegra_output_probe(), otherwise node's refcount will be leaked. Reviewed-by: Laurent Pinchart Signed-off-by: Dmitry Osipenko Reviewed-by: Sam Ravnborg --- drivers/gpu/drm/tegra/output.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c index e36e5e7c2f69..a6a711d54e88 100644 --- a/drivers/gpu/drm/tegra/output.c +++ b/drivers/gpu/drm/tegra/output.c @@ -102,10 +102,10 @@ int tegra_output_probe(struct tegra_output *output) panel = of_parse_phandle(output->of_node, "nvidia,panel", 0); if (panel) { output->panel = of_drm_find_panel(panel); + of_node_put(panel); + if (IS_ERR(output->panel)) return PTR_ERR(output->panel); - - of_node_put(panel); } output->edid = of_get_property(output->of_node, "nvidia,edid", &size); @@ -113,13 +113,12 @@ int tegra_output_probe(struct tegra_output *output) ddc = of_parse_phandle(output->of_node, "nvidia,ddc-i2c-bus", 0); if (ddc) { output->ddc = of_find_i2c_adapter_by_node(ddc); + of_node_put(ddc); + if (!output->ddc) { err = -EPROBE_DEFER; - of_node_put(ddc); return err; } - - of_node_put(ddc); } output->hpd_gpio = devm_gpiod_get_from_of_node(output->dev, From patchwork Sat Apr 18 17:07:01 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11498183 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5555914DD for ; Mon, 20 Apr 2020 06:55:56 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 33F9B21473 for ; Mon, 20 Apr 2020 06:55:56 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="T3DnJSRY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 33F9B21473 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C08A86E23B; Mon, 20 Apr 2020 06:55:35 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf1-x142.google.com (mail-lf1-x142.google.com [IPv6:2a00:1450:4864:20::142]) by gabe.freedesktop.org (Postfix) with ESMTPS id 6D2C16ECB6 for ; Sat, 18 Apr 2020 17:07:23 +0000 (UTC) Received: by mail-lf1-x142.google.com with SMTP id j14so4389218lfg.9 for ; Sat, 18 Apr 2020 10:07:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bzHxFhcgWD/fZsCe3fmC7U0LkboW0qpnWF3suCBMKYk=; b=T3DnJSRYxNDt1AYmdsFRorYQ4sIbtNy/6+H3c+6NJY7aaU79vwN+SYTDidg4TKuA98 uo4I5ZY60m++jXGywzj3RODdSlR+iDtP8z2XXjco1sz7bRQyRnlzp5IsvyBTyX0H4rmR xehROXC4fNe+sL0U221SX/K7W7RbscCMft2bMFgvZd6TjLh72jCMy4F5TniArQO+IBOO D93gu3+bXptqcq0F7L3j6319aoKk78KvxJrkdiGljpKuXescvmutAqEd7WzY5VB2FSBd JKf1bU4Erlmlx/BQ/ZDXIY6YIZxrKHT2LSSg1jmE1OQpBIXiC1JC7VJgXMQwBJNA5B9S pMBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bzHxFhcgWD/fZsCe3fmC7U0LkboW0qpnWF3suCBMKYk=; b=kYlbP96ikT+65QAXeBFCWZibdyahnAP8qwiUcHif4p6coIUzk8fKfakiFTOxw+lkDm PkB8Ez2q0H+96DVhHLCRIU4qGy24PSC8m91VgJuN9MLau9DwceGzsHsEoxK90NTfXYoV uK8ebfJfDsjcN4bLkVfV/SYUykqqzUMsv3mc/rMeRnPGBy2FnfTg888N6NqG+0eRfUxN dBA5Pf2zDWg0Y3WUvpz2AojSjSlXIXa3bvVALcQ7e52ZIEsiO1MhWPP8FAlxCMWA6DKv qY51/7//cQmR7u6Ula+VaWE0qmLJGei0UGM03BKNC48DBeGyZ7n/VsdFY6A6zlEnKcm0 Bj3Q== X-Gm-Message-State: AGi0PuZgZBxq28YGD1tBfqcbWGtt0iloBflr3c37uOOxoTo+edHwunN2 s2/yQ+c0iAHslFrKan98pzM= X-Google-Smtp-Source: APiQypJOiKhEF7D0gxeLQ/r3Rd9nuz90wAPm/Ps9vRcN1st7U3WZUnpoxcnAew3oAkwi1D7S5rp4Dw== X-Received: by 2002:ac2:58ee:: with SMTP id v14mr5017916lfo.25.1587229641823; Sat, 18 Apr 2020 10:07:21 -0700 (PDT) Received: from localhost.localdomain (ppp91-78-208-152.pppoe.mtu-net.ru. [91.78.208.152]) by smtp.gmail.com with ESMTPSA id e15sm8768909ljb.25.2020.04.18.10.07.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2020 10:07:21 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Sam Ravnborg , Laurent Pinchart , Rob Herring , Frank Rowand Subject: [PATCH v5 4/6] drm/tegra: output: Support DRM bridges Date: Sat, 18 Apr 2020 20:07:01 +0300 Message-Id: <20200418170703.1583-5-digetx@gmail.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200418170703.1583-1-digetx@gmail.com> References: <20200418170703.1583-1-digetx@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 20 Apr 2020 06:55:01 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Newer Tegra device-trees will specify a video output graph which involves a bridge. This patch adds initial support for the DRM bridges to the Tegra DRM output. Signed-off-by: Dmitry Osipenko Acked-by: Sam Ravnborg --- drivers/gpu/drm/tegra/drm.h | 2 ++ drivers/gpu/drm/tegra/output.c | 12 ++++++++++++ 2 files changed, 14 insertions(+) diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h index 804869799305..cccd368b6752 100644 --- a/drivers/gpu/drm/tegra/drm.h +++ b/drivers/gpu/drm/tegra/drm.h @@ -12,6 +12,7 @@ #include #include +#include #include #include #include @@ -116,6 +117,7 @@ struct tegra_output { struct device_node *of_node; struct device *dev; + struct drm_bridge *bridge; struct drm_panel *panel; struct i2c_adapter *ddc; const struct edid *edid; diff --git a/drivers/gpu/drm/tegra/output.c b/drivers/gpu/drm/tegra/output.c index a6a711d54e88..ccd1421f1b24 100644 --- a/drivers/gpu/drm/tegra/output.c +++ b/drivers/gpu/drm/tegra/output.c @@ -5,6 +5,7 @@ */ #include +#include #include #include @@ -99,8 +100,19 @@ int tegra_output_probe(struct tegra_output *output) if (!output->of_node) output->of_node = output->dev->of_node; + err = drm_of_find_panel_or_bridge(output->of_node, -1, -1, + &output->panel, &output->bridge); + if (err && err != -ENODEV) + return err; + panel = of_parse_phandle(output->of_node, "nvidia,panel", 0); if (panel) { + /* + * Don't mix nvidia,panel phandle with the graph in a + * device-tree. + */ + WARN_ON(output->panel || output->bridge); + output->panel = of_drm_find_panel(panel); of_node_put(panel); From patchwork Sat Apr 18 17:07:02 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11498187 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id BCC9D14B4 for ; Mon, 20 Apr 2020 06:55:58 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9B00F221F4 for ; Mon, 20 Apr 2020 06:55:58 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OYenw0CF" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9B00F221F4 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 28C226E260; Mon, 20 Apr 2020 06:55:37 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf1-x142.google.com (mail-lf1-x142.google.com [IPv6:2a00:1450:4864:20::142]) by gabe.freedesktop.org (Postfix) with ESMTPS id 738CB6ECBA for ; Sat, 18 Apr 2020 17:07:24 +0000 (UTC) Received: by mail-lf1-x142.google.com with SMTP id 198so4405188lfo.7 for ; Sat, 18 Apr 2020 10:07:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vFP2Xgl/P5L3A3AOxfNfJFdvZnWq+GhQQ62axDeZbgY=; b=OYenw0CFf7zJ1WnF4hUB8e1e8MLRJoH1OEtXGLd7Ae53R+7MH2FWi38JrkdktSsUt1 11sfyc/W4Bgr1qDrzOE3hRjwQtx/il8SCvF9rv16zSI4qUbgtKNALQv91YStbqzTFdMr ad0cU7OIcqiQEZZYg0UoEuVNFPF/PtisVryWUU5VwsbjF5egyNrmX/ZohokOJNxGzoY4 U39WK0niOGFOwgGGEZ4rsQMZmpygkDNR4bgxsSPo+IMZnW9IvCA7eH4DRcKYKFC4TDZi VLkC6o1pgTDlX+jD08MA9riDalmztx3p4lnM+C6CLefTecn+h1D6KmHVk9dZFbRhOUAy ZJSA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vFP2Xgl/P5L3A3AOxfNfJFdvZnWq+GhQQ62axDeZbgY=; b=llLdvNnGOqXNtfSRSDDr9vz6pPFgDIZuQOR2Jmt52yaxvMUB09SyM1Rlud55nwBEln PKT5x2O6cABp0GbeOHMvKuP6ovk1aeLZ+PLXA+LDCnh+PCSlaTjsl0f8uRjFTUNI31em 45RTWvO+wSdIztM3gdF3gOqsoDS04ExOVvZ9jcjjUMXdw2Xkm1KnCaCg/nilYlXvl2Qs IDHeHpYRhAGo6bcrfL0OEhcqUuMpFQKOErqKWxu+VbTo0ge+wLBCjEJnAxfgeOwhPYJl dBjNkiZK854+Zycgef5pwPv9LtKROHnsRHYMU7fwYkNSo4v/VFeftQhwakI3lBd5FbAI xIDA== X-Gm-Message-State: AGi0PubSA3n+ZDq2vp9oh+TE5QaNiksGFkjfT/M8L4IGAUZsClvpee3I GoWlMnuciE+xnsv9k7V4X4Y= X-Google-Smtp-Source: APiQypIlefeTuO41RijFbk6d9TIcAjiDCdxxSql5D26sOBd/08siAd8F6UP9uMfaUABbUEzgSij3sA== X-Received: by 2002:ac2:5f5b:: with SMTP id 27mr5376939lfz.136.1587229642863; Sat, 18 Apr 2020 10:07:22 -0700 (PDT) Received: from localhost.localdomain (ppp91-78-208-152.pppoe.mtu-net.ru. [91.78.208.152]) by smtp.gmail.com with ESMTPSA id e15sm8768909ljb.25.2020.04.18.10.07.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2020 10:07:22 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Sam Ravnborg , Laurent Pinchart , Rob Herring , Frank Rowand Subject: [PATCH v5 5/6] drm/tegra: output: rgb: Support LVDS encoder bridge Date: Sat, 18 Apr 2020 20:07:02 +0300 Message-Id: <20200418170703.1583-6-digetx@gmail.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200418170703.1583-1-digetx@gmail.com> References: <20200418170703.1583-1-digetx@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 20 Apr 2020 06:55:01 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Newer Tegra device-trees will specify a video output graph, which involves LVDS encoder bridge. This patch adds support for the LVDS encoder bridge to the RGB output, allowing us to model the display hardware properly. Reviewed-by: Laurent Pinchart Signed-off-by: Dmitry Osipenko Acked-by: Sam Ravnborg --- drivers/gpu/drm/tegra/rgb.c | 58 +++++++++++++++++++++++++++++++------ 1 file changed, 49 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c index 0562a7eb793f..9a7024ec96bc 100644 --- a/drivers/gpu/drm/tegra/rgb.c +++ b/drivers/gpu/drm/tegra/rgb.c @@ -7,6 +7,7 @@ #include #include +#include #include #include @@ -267,24 +268,63 @@ int tegra_dc_rgb_remove(struct tegra_dc *dc) int tegra_dc_rgb_init(struct drm_device *drm, struct tegra_dc *dc) { struct tegra_output *output = dc->rgb; + struct drm_connector *connector; int err; if (!dc->rgb) return -ENODEV; - drm_connector_init(drm, &output->connector, &tegra_rgb_connector_funcs, - DRM_MODE_CONNECTOR_LVDS); - drm_connector_helper_add(&output->connector, - &tegra_rgb_connector_helper_funcs); - output->connector.dpms = DRM_MODE_DPMS_OFF; - drm_simple_encoder_init(drm, &output->encoder, DRM_MODE_ENCODER_LVDS); drm_encoder_helper_add(&output->encoder, &tegra_rgb_encoder_helper_funcs); - drm_connector_attach_encoder(&output->connector, - &output->encoder); - drm_connector_register(&output->connector); + /* + * Tegra devices that have LVDS panel utilize LVDS encoder bridge + * for converting up to 28 LCD LVTTL lanes into 5/4 LVDS lanes that + * go to display panel's receiver. + * + * Encoder usually have a power-down control which needs to be enabled + * in order to transmit data to the panel. Historically devices that + * use an older device-tree version didn't model the bridge, assuming + * that encoder is turned ON by default, while today's DRM allows us + * to model LVDS encoder properly. + * + * Newer device-trees utilize LVDS encoder bridge, which provides + * us with a connector and handles the display panel. + * + * For older device-trees we fall back to our own connector and use + * nvidia,panel phandle. + */ + if (output->bridge) { + err = drm_bridge_attach(&output->encoder, output->bridge, + NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR); + if (err) { + dev_err(output->dev, "failed to attach bridge: %d\n", + err); + return err; + } + + connector = drm_bridge_connector_init(drm, &output->encoder); + if (IS_ERR(connector)) { + dev_err(output->dev, + "failed to initialize bridge connector: %pe\n", + connector); + return PTR_ERR(connector); + } + + drm_connector_attach_encoder(connector, &output->encoder); + } else { + drm_connector_init(drm, &output->connector, + &tegra_rgb_connector_funcs, + DRM_MODE_CONNECTOR_LVDS); + drm_connector_helper_add(&output->connector, + &tegra_rgb_connector_helper_funcs); + output->connector.dpms = DRM_MODE_DPMS_OFF; + + drm_connector_attach_encoder(&output->connector, + &output->encoder); + drm_connector_register(&output->connector); + } err = tegra_output_init(drm, output); if (err < 0) { From patchwork Sat Apr 18 17:07:03 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dmitry Osipenko X-Patchwork-Id: 11498161 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id A614414B4 for ; Mon, 20 Apr 2020 06:55:24 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 8449021473 for ; Mon, 20 Apr 2020 06:55:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="p8+rPkCQ" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8449021473 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AB77E6E1B7; Mon, 20 Apr 2020 06:55:02 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf1-x144.google.com (mail-lf1-x144.google.com [IPv6:2a00:1450:4864:20::144]) by gabe.freedesktop.org (Postfix) with ESMTPS id 95CB76ECBA for ; Sat, 18 Apr 2020 17:07:25 +0000 (UTC) Received: by mail-lf1-x144.google.com with SMTP id u10so4388400lfo.8 for ; Sat, 18 Apr 2020 10:07:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=n6hq2XlIahyxNhJ/uhIqbU22a2HtKZ7QcDFqMh6e2uc=; b=p8+rPkCQFlqk8Qz5o6rG+cm0B0GQn1ZPk+VZjXU0bU3vhKYL1ISyCecUxphRh6caRX IMaYy03D4Y6kU+BwW5E8yuGUZFFKNC2h3mS6WyoqV9x/UIZNzTbLXnFymi5bL515Ng64 jR9sV05P16vG/GepxUh4FZKY+jukbV7Uayc5bZ/wRZktbAgnIPSrqgha4qkaOu810IH2 CqKSVXvB/x2d+HmKubLBNKaj3fSl6XmxZdLcBl+mqBURUY6lp5zz+3Eh2kULhTWgqwk3 A9I8f4ucQMuwMoePIVguxgsN+CuWHrz4n1cqicgcqxpEmEQhP6+oHE+9W/5vpbkKo5jh XYfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=n6hq2XlIahyxNhJ/uhIqbU22a2HtKZ7QcDFqMh6e2uc=; b=N46iefFTObdPZTw3vTJklMpwOQRQAjAwhiNUbQyKcOPRTe6vcLJijyRjSZAIl+DzvB 5G+2HFP213AqQK1acaih2d580Dw8Z86w6WD6yBpNe9IY6L4h/eeLaGhebTQgKjcX7OBK mKF69hYFYZtvpwmmHMkuiuoUCUJinm8uUk0YU/BOwj2HCuHyqQhlh++B6PWB/SUuLQpg O+D7Xd8yb+pQ9QcU9CGIVubCTqgxvqbm2IpAq0xJgffz9TT0DyMqkpj6LP8dbaGRZH6/ Nr0J8mAn8QJMSCM75Wjaj61fVKsQlMtKhYHIxIdusgTCx957OIN6L3MKicP4pPTuMzF1 brSQ== X-Gm-Message-State: AGi0PubJd5ZMFjsIMFaonMyhmapDnL37Hede4LFdb5n8sftw1ndgWQdC 8S2C5AbceWqouWSI+ZLDFsA= X-Google-Smtp-Source: APiQypJKSR6OQSZl8ELLfty+ryCDSBKdNmCq2quUB+LFQLqbsTFG8Isth8KFNW7Lv1XLNJL+IRBRnw== X-Received: by 2002:a19:c14e:: with SMTP id r75mr5468293lff.62.1587229644017; Sat, 18 Apr 2020 10:07:24 -0700 (PDT) Received: from localhost.localdomain (ppp91-78-208-152.pppoe.mtu-net.ru. [91.78.208.152]) by smtp.gmail.com with ESMTPSA id e15sm8768909ljb.25.2020.04.18.10.07.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 18 Apr 2020 10:07:23 -0700 (PDT) From: Dmitry Osipenko To: Thierry Reding , Sam Ravnborg , Laurent Pinchart , Rob Herring , Frank Rowand Subject: [PATCH v5 6/6] drm/tegra: output: rgb: Wrap directly-connected panel into DRM bridge Date: Sat, 18 Apr 2020 20:07:03 +0300 Message-Id: <20200418170703.1583-7-digetx@gmail.com> X-Mailer: git-send-email 2.26.0 In-Reply-To: <20200418170703.1583-1-digetx@gmail.com> References: <20200418170703.1583-1-digetx@gmail.com> MIME-Version: 1.0 X-Mailman-Approved-At: Mon, 20 Apr 2020 06:55:01 +0000 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-tegra@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Currently Tegra DRM driver manually manages display panel, but this management could be moved out into DRM core if we'll wrap panel into DRM bridge. This patch wraps RGB panel into a DRM bridge and removes manual handling of the panel from the RGB output code. Suggested-by: Laurent Pinchart Signed-off-by: Dmitry Osipenko Acked-by: Sam Ravnborg --- drivers/gpu/drm/tegra/rgb.c | 53 +++++++++++++------------------------ 1 file changed, 18 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c index 9a7024ec96bc..a4c5a6066c54 100644 --- a/drivers/gpu/drm/tegra/rgb.c +++ b/drivers/gpu/drm/tegra/rgb.c @@ -8,7 +8,6 @@ #include #include -#include #include #include "drm.h" @@ -86,15 +85,6 @@ static void tegra_dc_write_regs(struct tegra_dc *dc, tegra_dc_writel(dc, table[i].value, table[i].offset); } -static const struct drm_connector_funcs tegra_rgb_connector_funcs = { - .reset = drm_atomic_helper_connector_reset, - .detect = tegra_output_connector_detect, - .fill_modes = drm_helper_probe_single_connector_modes, - .destroy = tegra_output_connector_destroy, - .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, - .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, -}; - static enum drm_mode_status tegra_rgb_connector_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) @@ -117,14 +107,8 @@ static void tegra_rgb_encoder_disable(struct drm_encoder *encoder) struct tegra_output *output = encoder_to_output(encoder); struct tegra_rgb *rgb = to_rgb(output); - if (output->panel) - drm_panel_disable(output->panel); - tegra_dc_write_regs(rgb->dc, rgb_disable, ARRAY_SIZE(rgb_disable)); tegra_dc_commit(rgb->dc); - - if (output->panel) - drm_panel_unprepare(output->panel); } static void tegra_rgb_encoder_enable(struct drm_encoder *encoder) @@ -133,9 +117,6 @@ static void tegra_rgb_encoder_enable(struct drm_encoder *encoder) struct tegra_rgb *rgb = to_rgb(output); u32 value; - if (output->panel) - drm_panel_prepare(output->panel); - tegra_dc_write_regs(rgb->dc, rgb_enable, ARRAY_SIZE(rgb_enable)); value = DE_SELECT_ACTIVE | DE_CONTROL_NORMAL; @@ -157,9 +138,6 @@ static void tegra_rgb_encoder_enable(struct drm_encoder *encoder) tegra_dc_writel(rgb->dc, value, DC_DISP_SHIFT_CLOCK_OPTIONS); tegra_dc_commit(rgb->dc); - - if (output->panel) - drm_panel_enable(output->panel); } static int @@ -278,6 +256,23 @@ int tegra_dc_rgb_init(struct drm_device *drm, struct tegra_dc *dc) drm_encoder_helper_add(&output->encoder, &tegra_rgb_encoder_helper_funcs); + /* + * Wrap directly-connected panel into DRM bridge in order to let + * DRM core to handle panel for us. + */ + if (output->panel) { + output->bridge = devm_drm_panel_bridge_add(output->dev, + output->panel); + if (IS_ERR(output->bridge)) { + dev_err(output->dev, + "failed to wrap panel into bridge: %pe\n", + output->bridge); + return PTR_ERR(output->bridge); + } + + output->panel = NULL; + } + /* * Tegra devices that have LVDS panel utilize LVDS encoder bridge * for converting up to 28 LCD LVTTL lanes into 5/4 LVDS lanes that @@ -292,8 +287,7 @@ int tegra_dc_rgb_init(struct drm_device *drm, struct tegra_dc *dc) * Newer device-trees utilize LVDS encoder bridge, which provides * us with a connector and handles the display panel. * - * For older device-trees we fall back to our own connector and use - * nvidia,panel phandle. + * For older device-trees we wrapped panel into the panel-bridge. */ if (output->bridge) { err = drm_bridge_attach(&output->encoder, output->bridge, @@ -313,17 +307,6 @@ int tegra_dc_rgb_init(struct drm_device *drm, struct tegra_dc *dc) } drm_connector_attach_encoder(connector, &output->encoder); - } else { - drm_connector_init(drm, &output->connector, - &tegra_rgb_connector_funcs, - DRM_MODE_CONNECTOR_LVDS); - drm_connector_helper_add(&output->connector, - &tegra_rgb_connector_helper_funcs); - output->connector.dpms = DRM_MODE_DPMS_OFF; - - drm_connector_attach_encoder(&output->connector, - &output->encoder); - drm_connector_register(&output->connector); } err = tegra_output_init(drm, output);