From patchwork Sun Jul 26 20:33:10 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686113 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 926066C1 for ; Sun, 26 Jul 2020 20:33:41 +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 709C1206D8 for ; Sun, 26 Jul 2020 20:33:41 +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="p4g3fPFU" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 709C1206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 100FF89C25; Sun, 26 Jul 2020 20:33:38 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x243.google.com (mail-lj1-x243.google.com [IPv6:2a00:1450:4864:20::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id A616689C0D for ; Sun, 26 Jul 2020 20:33:34 +0000 (UTC) Received: by mail-lj1-x243.google.com with SMTP id f5so15001532ljj.10 for ; Sun, 26 Jul 2020 13:33:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Kb6rhhd4yAVo8imxNoYzCr/Y6WmeBxmKHR7gEo1ltg4=; b=p4g3fPFUxDNJlS6LRmzynhWo9XOjN4u+TOw3it7ff26SVSxw82xMNM/ixDEAb+fmVG flfvpW3b06ChOx9HFBx5JBYktPjoVo3KYS/FDe9zk6t5RIY8WYVtOoH8GVB2Lgk393w8 B/KPsMA2L2WBQ3rfv94GbLC0ypYZH11f2P5S9gC4O4BxV9ae6Y7l/pVV3f3wNPknxGof tmxZ0uI+FaeLCh6Gi4h2XDQU1a+t6v8SqPEN6W8sYpDmSVIpbDD747EITLKBTD2NAVcV DkZYmZlZWpPfSQs7z/Fm17gAJRtED4zYYsb/nvUHRtqRLxCfn84U8DBX7nbLhhGoiwBC PjKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=Kb6rhhd4yAVo8imxNoYzCr/Y6WmeBxmKHR7gEo1ltg4=; b=afSMVNC0q88JSP0+x3qrd1CVB01jKxgyFfU1vxp2hm9hKBOxZ1seOMu9wYOCixHcMy qbxKCbAV4n5YrcO1GJzIdJe5ogNyP3l2I8rE2klntzz66PffFmta6rlWo5ATi8GIkOZy CQQdXZWyHcBMbSb043O1SXQBLYUhLpJpSZSVxztIYZpeHLkbVdLO4XYK7GEcGSeebPRZ Z39gZGj61iWGc77ebuediffqBN6UG2cp/Rpw+iuJZksTQ8SAj2YKY7njp4QMFB9RfV9i 0pHThvvD+xMtxHiLlZqPzT5WVj21EJ9EnXyL/BfNmiAwVeXLKva8C9zw1JFTxAqjsuT3 NsZg== X-Gm-Message-State: AOAM530TdqHiaQSnLnV9/C3Mt2d1Rk3chJnShyYcvGy7n2gQwrgNAZe0 Uqmi+Noov/EMxwNwoKMJ6gZTU+0KiOs= X-Google-Smtp-Source: ABdhPJwXEGfh/6Pr62d86QJkp6tmh+kpLJFyA8GRH8yp+o0zYZ9oAKhmNX0+ymaRg+wDYfyamQJPjA== X-Received: by 2002:a2e:b5b7:: with SMTP id f23mr7912855ljn.380.1595795612889; Sun, 26 Jul 2020 13:33:32 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:32 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 01/15] drm/panel: panel-simple: validate panel description Date: Sun, 26 Jul 2020 22:33:10 +0200 Message-Id: <20200726203324.3722593-2-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Warn if we detect a panel with incomplete/wrong description. This is inspired by a similar patch by Laurent that introduced checks for LVDS panels - this extends the checks to the remaining type of connectors. This is known to warn for some of the existing panels but added despite this as we need help from people using the panels to add the missing info. The checks are not complete but will catch the most common mistakes. The checks at the same time serves as documentation for the minimum required description for a panel. The checks uses dev_warn() as we know this will hit. WARN() was too noisy at the moment for anything else than LVDS. v2: - Use dev_warn (Laurent) - Check for empty bus_flags Signed-off-by: Sam Ravnborg Cc: Laurent Pinchart Cc: Thierry Reding Cc: Sam Ravnborg Reviewed-by: Laurent Pinchart --- drivers/gpu/drm/panel/panel-simple.c | 41 ++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index 54323515ca2c..a8d68102931e 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -500,6 +500,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) struct panel_simple *panel; struct display_timing dt; struct device_node *ddc; + u32 bus_flags; int err; panel = devm_kzalloc(dev, sizeof(*panel), GFP_KERNEL); @@ -549,8 +550,12 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) panel_simple_parse_panel_timing_node(dev, panel, &dt); } - if (desc->connector_type == DRM_MODE_CONNECTOR_LVDS) { - /* Catch common mistakes for LVDS panels. */ + /* Catch common mistakes for panels. */ + switch (desc->connector_type) { + case 0: + dev_warn(dev, "Specify missing connector_type\n"); + break; + case DRM_MODE_CONNECTOR_LVDS: WARN_ON(desc->bus_flags & ~(DRM_BUS_FLAG_DE_LOW | DRM_BUS_FLAG_DE_HIGH | @@ -564,6 +569,38 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) WARN_ON((desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_SPWG || desc->bus_format == MEDIA_BUS_FMT_RGB888_1X7X4_JEIDA) && desc->bpc != 8); + break; + case DRM_MODE_CONNECTOR_eDP: + if (desc->bus_format == 0) + dev_warn(dev, "Specify missing bus_format\n"); + if (desc->bpc != 6 && desc->bpc != 8) + dev_warn(dev, "Expected bpc in {6,8} but got: %d\n", desc->bpc); + break; + case DRM_MODE_CONNECTOR_DSI: + if (desc->bpc != 6 && desc->bpc != 8) + dev_warn(dev, "Expected bpc in {6,8} but got: %d\n", desc->bpc); + break; + case DRM_MODE_CONNECTOR_DPI: + bus_flags = DRM_BUS_FLAG_DE_LOW | + DRM_BUS_FLAG_DE_HIGH | + DRM_BUS_FLAG_PIXDATA_SAMPLE_POSEDGE | + DRM_BUS_FLAG_PIXDATA_SAMPLE_NEGEDGE | + DRM_BUS_FLAG_DATA_MSB_TO_LSB | + DRM_BUS_FLAG_DATA_LSB_TO_MSB | + DRM_BUS_FLAG_SYNC_SAMPLE_POSEDGE | + DRM_BUS_FLAG_SYNC_SAMPLE_NEGEDGE; + if (desc->bus_flags & ~bus_flags) + dev_warn(dev, "Unexpected bus_flags(%d)\n", desc->bus_flags & ~bus_flags); + if (!(desc->bus_flags & bus_flags)) + dev_warn(dev, "Specify missing bus_flags\n"); + if (desc->bus_format == 0) + dev_warn(dev, "Specify missing bus_format\n"); + if (desc->bpc != 6 && desc->bpc != 8) + dev_warn(dev, "Expected bpc in {6,8} but got: %d\n", desc->bpc); + break; + default: + dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type); + break; } drm_panel_init(&panel->base, dev, &panel_simple_funcs, From patchwork Sun Jul 26 20:33:11 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686117 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 64A7B6C1 for ; Sun, 26 Jul 2020 20:33:46 +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 42F9A206D8 for ; Sun, 26 Jul 2020 20:33:46 +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="BJ+BePGI" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 42F9A206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 3DCE489C69; Sun, 26 Jul 2020 20:33:41 +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 3CB9F89C25 for ; Sun, 26 Jul 2020 20:33:36 +0000 (UTC) Received: by mail-lj1-x244.google.com with SMTP id q4so15049626lji.2 for ; Sun, 26 Jul 2020 13:33:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YpVbuQILlWQf2ZZYt+NNaZwjYYiIiRCUdPFG0n/z94E=; b=BJ+BePGIFzEdAxLhU6xdclp/SFcAMTVuUwcctfupQAcB0E7/JoGBNOO43xa/ZcIfkE 31UmBDCSz0FWQK4fnr1RQzcTFftkFTxpxm36jlbq/PkCkZ1f5g881LBhcP7ZnCzds7fU 91iwUf8PWUSBWE8AMEfRa++MMBwJsrWkWpEkQ/3wtbUbf5sczyUthTZiv+hPnnV9pwBy C1dOvVJX5x2yBQD/u/UQoC5VExANQAMta/JPUJud3oD0zbuHHwi+bEHhVZQGU5BrWQu2 BJk7rei+X9RyZ2pTS5XePH/oH5NPUPMSiw7ylttl8d7hPszqnb/H0qdSXU6Um2QQ4aO2 q0tg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=YpVbuQILlWQf2ZZYt+NNaZwjYYiIiRCUdPFG0n/z94E=; b=B2bDpuaFNZDJq7bWlnKWjI9M4KeFSt94eADI894AQiva+wHsZvRbkC5IMYl0mCG+z6 iFyRWgXO03sDXpqMwTn1mo6nHdXBz2wqt1fXq7xw5GaLObH8+mim1dA0juEd6SfOaBAW Q6pDvAovXI/TwHuGFAQsvw/5T3//3liqX89Wd4L8h0k6LOSXGC8fGqqNPpbtDPhxOEH8 /HRzExIB/6QW6jOneL2I8itTMoVrK4ULrL7T7x6K7TllQBvfgfsUS4hIIwHMY+oEvZJo 8pNG0+DqYDY8Dc7dph/klLYydBcGwXK0BBR943qyfMX21ZV8CPS0t1AXWwCgFW+BKP2N PbYg== X-Gm-Message-State: AOAM5317SMKaqzfgSP03jYIQ0oY6OfcUXp/T2miDT1VW28jX9JQheOkN HfuiGUkHNzqLFGVD+mzmYCMeGf5EJsQ= X-Google-Smtp-Source: ABdhPJwWVx6/3ZkML12a8CWHpGWn35JXf62oSqPmr2hZ8PpWB2bAB3RcPmGj7T7Y8ZZD8I+4uJgpjQ== X-Received: by 2002:a05:651c:1b5:: with SMTP id c21mr8642290ljn.82.1595795614392; Sun, 26 Jul 2020 13:33:34 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:33 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 02/15] drm/panel: panel-simple: add default connector_type Date: Sun, 26 Jul 2020 22:33:11 +0200 Message-Id: <20200726203324.3722593-3-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" All panels shall report a connector type. panel-simple has a lot of panels with no connector_type, and for these fall back to DPI as the default. v2: - Rebased on top of validation of panel description Signed-off-by: Sam Ravnborg Cc: Laurent Pinchart Cc: Thierry Reding Cc: Sam Ravnborg Reviewed-by: Laurent Pinchart --- drivers/gpu/drm/panel/panel-simple.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c index a8d68102931e..56ab073e4e6e 100644 --- a/drivers/gpu/drm/panel/panel-simple.c +++ b/drivers/gpu/drm/panel/panel-simple.c @@ -500,6 +500,7 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) struct panel_simple *panel; struct display_timing dt; struct device_node *ddc; + int connector_type; u32 bus_flags; int err; @@ -550,10 +551,12 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) panel_simple_parse_panel_timing_node(dev, panel, &dt); } + connector_type = desc->connector_type; /* Catch common mistakes for panels. */ - switch (desc->connector_type) { + switch (connector_type) { case 0: dev_warn(dev, "Specify missing connector_type\n"); + connector_type = DRM_MODE_CONNECTOR_DPI; break; case DRM_MODE_CONNECTOR_LVDS: WARN_ON(desc->bus_flags & @@ -600,11 +603,11 @@ static int panel_simple_probe(struct device *dev, const struct panel_desc *desc) break; default: dev_warn(dev, "Specify a valid connector_type: %d\n", desc->connector_type); + connector_type = DRM_MODE_CONNECTOR_DPI; break; } - drm_panel_init(&panel->base, dev, &panel_simple_funcs, - desc->connector_type); + drm_panel_init(&panel->base, dev, &panel_simple_funcs, connector_type); err = drm_panel_of_backlight(&panel->base); if (err) From patchwork Sun Jul 26 20:33:12 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686125 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 3C83A6C1 for ; Sun, 26 Jul 2020 20:33:52 +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 1AB1C206D8 for ; Sun, 26 Jul 2020 20:33:52 +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="HVRVrE1m" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1AB1C206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 AC4D56E05C; Sun, 26 Jul 2020 20:33:46 +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 A0FD689C25 for ; Sun, 26 Jul 2020 20:33:37 +0000 (UTC) Received: by mail-lj1-x241.google.com with SMTP id f5so15001583ljj.10 for ; Sun, 26 Jul 2020 13:33:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=s9+yqYON3+B159uDVRHmWDcBoh5JBmCFpO42dqnb8M8=; b=HVRVrE1mlzC5UYwx4evJD5nJcyDMvu812kCzJBtU618ymD4f8gL9c4+7mMVMChJDoZ fgVKSV22y/e7rFdnPrZIvMV0V/i6qj6eIbPiv9hqWgVrYf/pADjI9BHAaVdPDeUF+gxr nq7lqMiv97gtXrjtYRathyyp7FBYW+BuCydviXU82DHmSrupOqpTyLJxszeJKDv6dsO+ pbDiUsKlS9Qll0isUNskUmRHptk1rnwQd97lGQUvpdXnrhIVVbgXLcQsa3+DHe/p84VY T9hEv1PJUX2rDFWDzT0WBvqqpmKFcdYPXotC7vWyrugDTfJdzDLZsC8EXEQzLz8yHahM PudA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=s9+yqYON3+B159uDVRHmWDcBoh5JBmCFpO42dqnb8M8=; b=hYsldoTmGmCvU53nOS5N3kYVMDnC7/oNEShz8oPCeQYbwoy6UOMIUkib/icOt0JW9t VA39Z7t11jj8wRlFHuOpBdp7xbvsGqoEKGSi7OPCFVA+hjnRpKDVyLS2t9BaDr1D05tF 0V6agVLDXP6KIEVplYe50uNLK5h62gigvT5fmtpP32K83zqchncpVUsn/MguvtowPsug Wq/QAkuj263U7ryX+euDAR66lMDczFoPknnqSkV6NUQP9Y1otBEzaytDUX3W5PLsAzT/ l7XEc5Lux0wuJjoY0X2bMhtOGkQYe1Za97Pto/9rQtfUCZRDjj0OvgLzjUp9/pYKfaYk S1cg== X-Gm-Message-State: AOAM533U8LPJ2ZtzfncroV9BcWPNGAHyUWR1949QKONdYGRFG2cx8Tqq iOURgQzNnML/rR2uxwkYZdo0HMIflPo= X-Google-Smtp-Source: ABdhPJzEn5r7V8JvS5BxU8nUEPAnXYkMGb8oKPcYulh4iiumfIlrUbvz+kgWIvj5i4wZxYDMOoTxcw== X-Received: by 2002:a2e:5c5:: with SMTP id 188mr413169ljf.466.1595795615842; Sun, 26 Jul 2020 13:33:35 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:35 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 03/15] drm/bridge: tc358764: drop drm_connector_(un)register Date: Sun, 26 Jul 2020 22:33:12 +0200 Message-Id: <20200726203324.3722593-4-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Drop drm_connector handling that is not needed: - drm_dev_register() in the display controller driver takes care of registering connectors. So the call to drm_connector_register() call is not needed in the bridge driver. - Use of drm_connector_unregister() is only required for drivers that explicit have called drm_dev_register. - The reference counting using drm_connector_put() is likewise not needed. Signed-off-by: Sam Ravnborg Reviewed-by: Laurent Pinchart Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec --- drivers/gpu/drm/bridge/tc358764.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c index 5ac1430fab04..a277739fab58 100644 --- a/drivers/gpu/drm/bridge/tc358764.c +++ b/drivers/gpu/drm/bridge/tc358764.c @@ -375,7 +375,6 @@ static int tc358764_attach(struct drm_bridge *bridge, drm_connector_attach_encoder(&ctx->connector, bridge->encoder); drm_panel_attach(ctx->panel, &ctx->connector); ctx->connector.funcs->reset(&ctx->connector); - drm_connector_register(&ctx->connector); return 0; } @@ -384,10 +383,8 @@ static void tc358764_detach(struct drm_bridge *bridge) { struct tc358764 *ctx = bridge_to_tc358764(bridge); - drm_connector_unregister(&ctx->connector); drm_panel_detach(ctx->panel); ctx->panel = NULL; - drm_connector_put(&ctx->connector); } static const struct drm_bridge_funcs tc358764_bridge_funcs = { From patchwork Sun Jul 26 20:33:13 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686115 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 2B3346C1 for ; Sun, 26 Jul 2020 20:33:44 +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 09AB2206D8 for ; Sun, 26 Jul 2020 20:33:44 +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="T+HhkBif" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 09AB2206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 7F48989C49; Sun, 26 Jul 2020 20:33:40 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lf1-x143.google.com (mail-lf1-x143.google.com [IPv6:2a00:1450:4864:20::143]) by gabe.freedesktop.org (Postfix) with ESMTPS id 52E1089C49 for ; Sun, 26 Jul 2020 20:33:39 +0000 (UTC) Received: by mail-lf1-x143.google.com with SMTP id m15so7211806lfp.7 for ; Sun, 26 Jul 2020 13:33:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=I9M/tVpbBKqBYSx6xTrhz9BeOgZwEWe6XuweGZBlE8E=; b=T+HhkBifZl2u3dFmOSIeSYpLrZcOtt3s7L8IxSKRG8oj33hfgHQ80Anuej9CEAI/yn j4KqdC+DfkK2ZvoSSsqgBUHOIRZPldc8HMZp7rxoU2BBTZA+LMpOnfgPFhPoslM3EYA1 f/rIFU64wE6EnUwmf4qqSXUJIGX7Vo2TN4VtPC8NIcN/q9lfdynwFJ0N/N+/yyGKLtcJ MQfrImeYsw8Ey5bcXMqWez5GU4BG1EPCJnDLGe6JIHcPqa1/JGgJZMBjO2X+15L/yrg0 i/zPdbRVxx6r/3YkdqGpAnrJkQFFRit68510iev5MloHiRq/ULJaxph3LhIUvCK/dOeU 9Bow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=I9M/tVpbBKqBYSx6xTrhz9BeOgZwEWe6XuweGZBlE8E=; b=T8pRk8bxjTP8V5iXCyjkfdTL/61G75LRHjoX0fdiDSZpTLcxdGQ+ow4NFxzUBDzo3C lLNtihVpjVEz9YqUykESaKx4rcK/cRW1rq2HEdSNvM4VkrtOah2slmJyPnLQ1mLPWef+ pqSGzCYy3qqqjvu9tKlYYcvc2aof1UVpOfsVFrL+sTgwCX9Y6AqIAjImdCeULMfx2Ifl jrYZ8zgRamBi5nhgSR46XIn5/A0jyGL1lyrCniGIgrrDXJKnek7V7XKpfbmJsF4jgV1Y sKNQKsUPHSro8935tMc4tXK59SiY9PZ3Vp68cxCO41dWp2y53k/4WGMluk6eG4ymmjlP 7SRw== X-Gm-Message-State: AOAM532GP4hhHFrOgq+IDuy6keWd9sJsuVIGy4r/xbZImHH1EGs9jfF3 S5DNlEgjhKx5gf74tuoS+9viY+yGVyM= X-Google-Smtp-Source: ABdhPJyV4IEUsN1N7/bVDVEdnpkQX9iBjK/1qWJ4DPA6q/a2y4OHPmPCxA5imgPlDnnEmxRdB1lzLg== X-Received: by 2002:a05:6512:6d6:: with SMTP id u22mr10013109lff.13.1595795617460; Sun, 26 Jul 2020 13:33:37 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:36 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 04/15] drm/bridge: tc358764: add drm_panel_bridge support Date: Sun, 26 Jul 2020 22:33:13 +0200 Message-Id: <20200726203324.3722593-5-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Prepare the tc358764 bridge driver for use in a chained setup by replacing direct use of drm_panel with drm_panel_bridge support. The bridge panel will use the connector type reported by the panel, where the connector for this driver hardcodes DRM_MODE_CONNECTOR_LVDS. The tc358764 did not any additional info the the connector so the connector creation is passed to the bridge panel driver. v3: - Merge with patch to make connector creation optional to avoid creating two connectors (Laurent) - Pass connector creation to bridge panel, as this bridge driver did not add any extra info to the connector. - Set bridge.type to DRM_MODE_CONNECTOR_LVDS. v2: - Use PTR_ERR_OR_ZERO() (kbuild test robot) Signed-off-by: Sam Ravnborg Cc: Laurent Pinchart Cc: kbuild test robot Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Jonas Karlman Cc: Jernej Skrabec Reviewed-by: Laurent Pinchart --- drivers/gpu/drm/bridge/tc358764.c | 107 +++++------------------------- 1 file changed, 16 insertions(+), 91 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c index a277739fab58..fdde4cfdc724 100644 --- a/drivers/gpu/drm/bridge/tc358764.c +++ b/drivers/gpu/drm/bridge/tc358764.c @@ -153,10 +153,9 @@ static const char * const tc358764_supplies[] = { struct tc358764 { struct device *dev; struct drm_bridge bridge; - struct drm_connector connector; struct regulator_bulk_data supplies[ARRAY_SIZE(tc358764_supplies)]; struct gpio_desc *gpio_reset; - struct drm_panel *panel; + struct drm_bridge *panel_bridge; int error; }; @@ -210,12 +209,6 @@ static inline struct tc358764 *bridge_to_tc358764(struct drm_bridge *bridge) return container_of(bridge, struct tc358764, bridge); } -static inline -struct tc358764 *connector_to_tc358764(struct drm_connector *connector) -{ - return container_of(connector, struct tc358764, connector); -} - static int tc358764_init(struct tc358764 *ctx) { u32 v = 0; @@ -278,43 +271,11 @@ static void tc358764_reset(struct tc358764 *ctx) usleep_range(1000, 2000); } -static int tc358764_get_modes(struct drm_connector *connector) -{ - struct tc358764 *ctx = connector_to_tc358764(connector); - - return drm_panel_get_modes(ctx->panel, connector); -} - -static const -struct drm_connector_helper_funcs tc358764_connector_helper_funcs = { - .get_modes = tc358764_get_modes, -}; - -static const struct drm_connector_funcs tc358764_connector_funcs = { - .fill_modes = drm_helper_probe_single_connector_modes, - .destroy = drm_connector_cleanup, - .reset = drm_atomic_helper_connector_reset, - .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, - .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, -}; - -static void tc358764_disable(struct drm_bridge *bridge) -{ - struct tc358764 *ctx = bridge_to_tc358764(bridge); - int ret = drm_panel_disable(bridge_to_tc358764(bridge)->panel); - - if (ret < 0) - dev_err(ctx->dev, "error disabling panel (%d)\n", ret); -} - static void tc358764_post_disable(struct drm_bridge *bridge) { struct tc358764 *ctx = bridge_to_tc358764(bridge); int ret; - ret = drm_panel_unprepare(ctx->panel); - if (ret < 0) - dev_err(ctx->dev, "error unpreparing panel (%d)\n", ret); tc358764_reset(ctx); usleep_range(10000, 15000); ret = regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies); @@ -335,70 +296,28 @@ static void tc358764_pre_enable(struct drm_bridge *bridge) ret = tc358764_init(ctx); if (ret < 0) dev_err(ctx->dev, "error initializing bridge (%d)\n", ret); - ret = drm_panel_prepare(ctx->panel); - if (ret < 0) - dev_err(ctx->dev, "error preparing panel (%d)\n", ret); -} - -static void tc358764_enable(struct drm_bridge *bridge) -{ - struct tc358764 *ctx = bridge_to_tc358764(bridge); - int ret = drm_panel_enable(ctx->panel); - - if (ret < 0) - dev_err(ctx->dev, "error enabling panel (%d)\n", ret); } static int tc358764_attach(struct drm_bridge *bridge, enum drm_bridge_attach_flags flags) -{ - struct tc358764 *ctx = bridge_to_tc358764(bridge); - struct drm_device *drm = bridge->dev; - int ret; - - if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) { - DRM_ERROR("Fix bridge driver to make connector optional!"); - return -EINVAL; - } - - ctx->connector.polled = DRM_CONNECTOR_POLL_HPD; - ret = drm_connector_init(drm, &ctx->connector, - &tc358764_connector_funcs, - DRM_MODE_CONNECTOR_LVDS); - if (ret) { - DRM_ERROR("Failed to initialize connector\n"); - return ret; - } - - drm_connector_helper_add(&ctx->connector, - &tc358764_connector_helper_funcs); - drm_connector_attach_encoder(&ctx->connector, bridge->encoder); - drm_panel_attach(ctx->panel, &ctx->connector); - ctx->connector.funcs->reset(&ctx->connector); - - return 0; -} - -static void tc358764_detach(struct drm_bridge *bridge) { struct tc358764 *ctx = bridge_to_tc358764(bridge); - drm_panel_detach(ctx->panel); - ctx->panel = NULL; + return drm_bridge_attach(bridge->encoder, ctx->panel_bridge, + bridge, flags); } static const struct drm_bridge_funcs tc358764_bridge_funcs = { - .disable = tc358764_disable, .post_disable = tc358764_post_disable, - .enable = tc358764_enable, .pre_enable = tc358764_pre_enable, .attach = tc358764_attach, - .detach = tc358764_detach, }; static int tc358764_parse_dt(struct tc358764 *ctx) { + struct drm_bridge *panel_bridge; struct device *dev = ctx->dev; + struct drm_panel *panel; int ret; ctx->gpio_reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW); @@ -407,12 +326,17 @@ static int tc358764_parse_dt(struct tc358764 *ctx) return PTR_ERR(ctx->gpio_reset); } - ret = drm_of_find_panel_or_bridge(ctx->dev->of_node, 1, 0, &ctx->panel, - NULL); - if (ret && ret != -EPROBE_DEFER) - dev_err(dev, "cannot find panel (%d)\n", ret); + ret = drm_of_find_panel_or_bridge(dev->of_node, 1, 0, &panel, NULL); + if (ret) + return ret; - return ret; + panel_bridge = devm_drm_panel_bridge_add(dev, panel); + + if (IS_ERR(panel_bridge)) + return PTR_ERR(panel_bridge); + + ctx->panel_bridge = panel_bridge; + return 0; } static int tc358764_configure_regulators(struct tc358764 *ctx) @@ -458,6 +382,7 @@ static int tc358764_probe(struct mipi_dsi_device *dsi) return ret; ctx->bridge.funcs = &tc358764_bridge_funcs; + ctx->bridge.type = DRM_MODE_CONNECTOR_LVDS; ctx->bridge.of_node = dev->of_node; drm_bridge_add(&ctx->bridge); From patchwork Sun Jul 26 20:33:14 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686123 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 B12936C1 for ; Sun, 26 Jul 2020 20:33:50 +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 8F828206D8 for ; Sun, 26 Jul 2020 20:33: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="jhJkTPjA" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 8F828206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 40A6289DBD; Sun, 26 Jul 2020 20:33:46 +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 CDA4989C55 for ; Sun, 26 Jul 2020 20:33:40 +0000 (UTC) Received: by mail-lj1-x244.google.com with SMTP id q6so15018688ljp.4 for ; Sun, 26 Jul 2020 13:33:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=34/eXQ4tDZgqR/bq7lFsL6vM1XudODgIuh4eMcj7yBw=; b=jhJkTPjAnh9OIDsRUzfQsmZq5+/NxnXNYVkPef/QdYBJczCq/pSA3xZLgN2kyFCWBP 59im+I26DxKZYB1ni4ErEmRo4RWKgA4w/vRAYNnPoTVpzI5yM9IWC3OtZeYjMLNCFJZY D/0+qFPg/TEgPCg8//xLoL3FNNKsIbEdARPNWZyg7U6EbSIMQiDu2yPEr3xTCQSObkZI 0AKXGSzLzQmIzMxT7Hlw6Ny1UsGEKuFbwKdZ50OlWXSs9mDh1MCJSvij8OpZ5jDh9s5J H5PZCr0A1E0WbuqOyYgq83K4qRFm2j5YAQkRcNFD9XRbThFd7yG7GmS40soK77ouRHi2 53lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=34/eXQ4tDZgqR/bq7lFsL6vM1XudODgIuh4eMcj7yBw=; b=e8OPTdZpRNDfw1M7+pJUD/PksRphR+nvKnSU2og27DGQDj0jm1EkE4lGd86B/Wa46r K8M8W2Hmpket+SWojDmEV/KtRYKfiX4YMmcK/dMTh/d42VqLXj/pStL1FK6CN3bVJN40 aDADySyGsJ1OY813donkeeIgfaAbYr3UW2dyg7AhrcJSajnUtHeAIW6h6b6s746u6SOL 2omHQ2BbNCSl20EDJb1cG69CWbBx/ReKhiXTpAqmFGK9re/1s3bxpidpm5BW2SyBL1w/ UMIEmuxEw7KCQci+H8CHEGf/AVr8SvZ97mzzZDODV9ZX01JBicYfLd7/hyVbhbtheghT Tkdw== X-Gm-Message-State: AOAM5324dkQYpY+anhg2+IVWGMThfyQUqOxJ9LqEcjKa6bVFj1VI58FE QYhhW8gvqiG6EMWIwppLDm6W8KurpHo= X-Google-Smtp-Source: ABdhPJyHTeQpa7uBiddIqHl2cqnyFf+xBDYHXrZoIKxJBctTIaOT3ko9KNbhfkGJ2jMRK+lOX/F94A== X-Received: by 2002:a2e:2a81:: with SMTP id q123mr8738050ljq.229.1595795618996; Sun, 26 Jul 2020 13:33:38 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:38 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 05/15] drm/bridge: tc358767: add detect bridge operation Date: Sun, 26 Jul 2020 22:33:14 +0200 Message-Id: <20200726203324.3722593-6-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Prepare the bridge driver for chained operation by adding support for the detect operation. v2: - Do not announce detect operation if there is no hpd pin (Laurent) Signed-off-by: Sam Ravnborg Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec Reviewed-by: Laurent Pinchart --- drivers/gpu/drm/bridge/tc358767.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c index c2777b226c75..e8ba713bedac 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@ -1369,21 +1369,13 @@ static const struct drm_connector_helper_funcs tc_connector_helper_funcs = { .get_modes = tc_connector_get_modes, }; -static enum drm_connector_status tc_connector_detect(struct drm_connector *connector, - bool force) +static enum drm_connector_status tc_bridge_detect(struct drm_bridge *bridge) { - struct tc_data *tc = connector_to_tc(connector); + struct tc_data *tc = bridge_to_tc(bridge); bool conn; u32 val; int ret; - if (tc->hpd_pin < 0) { - if (tc->panel) - return connector_status_connected; - else - return connector_status_unknown; - } - ret = regmap_read(tc->regmap, GPIOI, &val); if (ret) return connector_status_unknown; @@ -1396,6 +1388,20 @@ static enum drm_connector_status tc_connector_detect(struct drm_connector *conne return connector_status_disconnected; } +static enum drm_connector_status +tc_connector_detect(struct drm_connector *connector, bool force) +{ + struct tc_data *tc = connector_to_tc(connector); + + if (tc->hpd_pin >= 0) + return tc_bridge_detect(&tc->bridge); + else + if (tc->panel) + return connector_status_connected; + + return connector_status_unknown; +} + static const struct drm_connector_funcs tc_connector_funcs = { .detect = tc_connector_detect, .fill_modes = drm_helper_probe_single_connector_modes, @@ -1458,6 +1464,7 @@ static const struct drm_bridge_funcs tc_bridge_funcs = { .disable = tc_bridge_disable, .post_disable = tc_bridge_post_disable, .mode_fixup = tc_bridge_mode_fixup, + .detect = tc_bridge_detect, }; static bool tc_readable_reg(struct device *dev, unsigned int reg) @@ -1680,6 +1687,9 @@ static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id) return ret; tc->bridge.funcs = &tc_bridge_funcs; + if (tc->hpd_pin >= 0) + tc->bridge.ops |= DRM_BRIDGE_OP_DETECT; + tc->bridge.of_node = dev->of_node; drm_bridge_add(&tc->bridge); From patchwork Sun Jul 26 20:33:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686127 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 C0203138A for ; Sun, 26 Jul 2020 20:33:53 +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 9E490206D8 for ; Sun, 26 Jul 2020 20:33:53 +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="aYjiEZjr" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9E490206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 EA5156E059; Sun, 26 Jul 2020 20:33:46 +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 7AE8089C55 for ; Sun, 26 Jul 2020 20:33:42 +0000 (UTC) Received: by mail-lf1-x144.google.com with SMTP id h8so7869038lfp.9 for ; Sun, 26 Jul 2020 13:33:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BNJtVK3LG+m8G8vjSXP3gAhWLBb6hXFVj9dGZ31MEbM=; b=aYjiEZjrF9OXJby0x7qt/2s450cpYPVRJz7xw1c5I/aQngZAayfW2pnzb1NN+XMfEJ fs3FTHACZ+ZwxMwLX04gYm6o2f+7JJzZ14bIO3IW5w0tu+5Xtj643VHyKzZ8IV4wzdXf ppwcUfkWXryvan9DPPc5O8aEV8GCE5GGZSeEhT6s8jCJkra23loCH3yYQ9qTH+8sQlys 5lqCQwdoqsFZL0zMKZ0I6Fz3AqNO3BpF2ShAUZGycLubDJFsW8meEX4ifs1ilvhIVqOc QLaydmLoBXMUUORoPoRQTPHuVpKGBsajnaGuu40vm+gfZTQdAz6xSQ5Aq/f48yRfqEBZ 9qiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=BNJtVK3LG+m8G8vjSXP3gAhWLBb6hXFVj9dGZ31MEbM=; b=ovmZ0ewDD6aXowW0zTivvjVdtdnX0b/PqvAb/BzBe5cZdiKEZgWh+W1Vls9bVphkcZ TQO8cSnrR/xnBs3WU3oHBU3/5OVewRQ914QjsmMubzRlD5PX9fVXZcjjM01JnM1PG/my 8qF+jtemSg7c53FYfOho8c/XOSCB3H9X+XFdQDyfnZONAF8w689yszly5oKJsPQp3t+X 4DPA/NkQwpf7b0NoN44cQNrchgCn8BXsW2k/LdfAQSWJF1sqZUkjYtLdhAxdSPQxrVuO Qxhb0n+6b68Zj4fY+E9mXhLhKdLQa2LRVZ4ZCp4Ch0NtRkE2dcEVzV1AVT0LAu1vjxJT CGwQ== X-Gm-Message-State: AOAM532skeTaouJLZehiTtzibU49MFKc+2qqic6TId0hNkyGwAIe0ihf /xa/aoYWb+1RAKiU5hY4HP4Xjxc63Y0= X-Google-Smtp-Source: ABdhPJw/S0p0MU5p7IVx/K2HIv6peC8rGQoC+jBSfcdETIxMjQWXI/LJBt78z98bfMChpJHduMOF2g== X-Received: by 2002:a19:4345:: with SMTP id m5mr10131817lfj.60.1595795620696; Sun, 26 Jul 2020 13:33:40 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:39 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 06/15] drm/bridge: tc358767: add get_edid bridge operation Date: Sun, 26 Jul 2020 22:33:15 +0200 Message-Id: <20200726203324.3722593-7-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Prepare for chained bridge with the addition of get_edid support. v2: - Fixed handling of edid storage (Laurent) Signed-off-by: Sam Ravnborg Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec Reviewed-by: Laurent Pinchart --- drivers/gpu/drm/bridge/tc358767.c | 34 ++++++++++++++++--------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c index e8ba713bedac..d86d7f06bebb 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@ -250,8 +250,6 @@ struct tc_data { /* link settings */ struct tc_edp_link link; - /* display edid */ - struct edid *edid; /* current mode */ struct drm_display_mode mode; @@ -1335,11 +1333,19 @@ static void tc_bridge_mode_set(struct drm_bridge *bridge, tc->mode = *mode; } +static struct edid *tc_get_edid(struct drm_bridge *bridge, + struct drm_connector *connector) +{ + struct tc_data *tc = bridge_to_tc(bridge); + + return drm_get_edid(connector, &tc->aux.ddc); +} + static int tc_connector_get_modes(struct drm_connector *connector) { struct tc_data *tc = connector_to_tc(connector); + int num_modes; struct edid *edid; - int count; int ret; ret = tc_get_display_props(tc); @@ -1348,21 +1354,15 @@ static int tc_connector_get_modes(struct drm_connector *connector) return 0; } - count = drm_panel_get_modes(tc->panel, connector); - if (count > 0) - return count; - - edid = drm_get_edid(connector, &tc->aux.ddc); - - kfree(tc->edid); - tc->edid = edid; - if (!edid) - return 0; + num_modes = drm_panel_get_modes(tc->panel, connector); + if (num_modes > 0) + return num_modes; - drm_connector_update_edid_property(connector, edid); - count = drm_add_edid_modes(connector, edid); + edid = tc_get_edid(&tc->bridge, connector); + num_modes = drm_add_edid_modes(connector, edid); + kfree(edid); - return count; + return num_modes; } static const struct drm_connector_helper_funcs tc_connector_helper_funcs = { @@ -1465,6 +1465,7 @@ static const struct drm_bridge_funcs tc_bridge_funcs = { .post_disable = tc_bridge_post_disable, .mode_fixup = tc_bridge_mode_fixup, .detect = tc_bridge_detect, + .get_edid = tc_get_edid, }; static bool tc_readable_reg(struct device *dev, unsigned int reg) @@ -1689,6 +1690,7 @@ static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id) tc->bridge.funcs = &tc_bridge_funcs; if (tc->hpd_pin >= 0) tc->bridge.ops |= DRM_BRIDGE_OP_DETECT; + tc->bridge.ops |= DRM_BRIDGE_OP_EDID; tc->bridge.of_node = dev->of_node; drm_bridge_add(&tc->bridge); From patchwork Sun Jul 26 20:33:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686121 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 D211B14B7 for ; Sun, 26 Jul 2020 20:33:48 +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 AD55B20719 for ; Sun, 26 Jul 2020 20:33:48 +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="lPmlKhIt" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AD55B20719 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 0A10689CD8; Sun, 26 Jul 2020 20:33:46 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id D8B9389C55 for ; Sun, 26 Jul 2020 20:33:43 +0000 (UTC) Received: by mail-lj1-x242.google.com with SMTP id q6so15018752ljp.4 for ; Sun, 26 Jul 2020 13:33:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YkOAz4Z+0Uj0cvOXoFRLZ9VM/AVxaMFQshXdgUEAnO4=; b=lPmlKhItb+lXzBm6D/xGQwyiZM4GbqjOjv4O9VMhwjvnFWV4l/bCCfy/lUKLGG/exH eWe94/7OxZROwyG8UUNDAD4B5BSJul16NokB3AJ+ARLZRIXYVG4n7RXNElcuvrL3fmcO WY89uyVgh9gTsnuc5mQi/X6nMTQuazIQUeQmqZN4yyryOySvRpXXs0KDkqA9tXMjsppP QcvD8hBIL5wdasbw0CQyJWAsVxbe25/FXhbtKIiPqLpEszOXAQnGRwmA27h2VGjFNPWX FFOK4KkbITZUg2aI+uN371me/HwXOL58Go0sculWW8o6kTv11nFxX2RnAZINu+6AykUg UH4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=YkOAz4Z+0Uj0cvOXoFRLZ9VM/AVxaMFQshXdgUEAnO4=; b=JuGx5Xba+UmQrvmnjYiwkEK7nRsHPXP8BByDGzBKg7pXaYWAWhsqUaHZ/kyJM0IlmQ nlN6F0rJWwyU6mgTJWGdhhTVbZQ4hJSnHOc5VdnhfDb8OAYXqTHNh4UgfBizHJL9aJwC OeKESQfzms4XZ+0QN7cO2CilwvB3jqGMENoA2WoRRn3kCqXo9+rpe3Ktv5OlE021klL7 rdSXfOfzQnvosltSTo7dEudHvnVHjmrX36W2G9Qw5D+ZqLOfojFjuJrO0Xe44/w1TcC3 qpD4ggSW8bIYQ1UwZnMFzAdR2eHMzV5JAPh41YeU280YqqLz924f1d6xe3tfRxNYYJKi o9dw== X-Gm-Message-State: AOAM530FF+Dhb7hKJnOz5nGz/xt9pd8EJGro2TGTKN94TrVKMC2TUihZ 2Z2x/CLMv5ggm0Uh4R+daDDHXWKMbac= X-Google-Smtp-Source: ABdhPJzgEFjn69yT4G31dimzvW3exkCnVqkagQWKgpx+oilDBR5MkONG0l/N2EdEtgm0cTYdjySvWg== X-Received: by 2002:a2e:a0cd:: with SMTP id f13mr8051673ljm.343.1595795622060; Sun, 26 Jul 2020 13:33:42 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:41 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 07/15] drm/bridge: tc358767: add drm_panel_bridge support Date: Sun, 26 Jul 2020 22:33:16 +0200 Message-Id: <20200726203324.3722593-8-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" With the bridge operations implemented the last step to prepare this driver for a chained setup is the use of the bridge panel driver. The bridge panel driver is only used when a prot@2 is present in the DT. So when the display driver request a connector support both situations: - connector created by bridge panel driver - connector created by this driver And on top, support that the display driver creates the connector, which is the preferred setup. Note: the bridge panel will use the connector type from the panel. v2: - Merge connector and drm_panel_bridge patches and fix so we do not create two connectors (Laurent) Signed-off-by: Sam Ravnborg Cc: Laurent Pinchart Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Jonas Karlman Cc: Jernej Skrabec --- drivers/gpu/drm/bridge/tc358767.c | 70 +++++++++++++++---------------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c index d86d7f06bebb..75a2cd792ccc 100644 --- a/drivers/gpu/drm/bridge/tc358767.c +++ b/drivers/gpu/drm/bridge/tc358767.c @@ -244,8 +244,8 @@ struct tc_data { struct drm_dp_aux aux; struct drm_bridge bridge; + struct drm_bridge *panel_bridge; struct drm_connector connector; - struct drm_panel *panel; /* link settings */ struct tc_edp_link link; @@ -1234,13 +1234,6 @@ static int tc_stream_disable(struct tc_data *tc) return 0; } -static void tc_bridge_pre_enable(struct drm_bridge *bridge) -{ - struct tc_data *tc = bridge_to_tc(bridge); - - drm_panel_prepare(tc->panel); -} - static void tc_bridge_enable(struct drm_bridge *bridge) { struct tc_data *tc = bridge_to_tc(bridge); @@ -1264,8 +1257,6 @@ static void tc_bridge_enable(struct drm_bridge *bridge) tc_main_link_disable(tc); return; } - - drm_panel_enable(tc->panel); } static void tc_bridge_disable(struct drm_bridge *bridge) @@ -1273,8 +1264,6 @@ static void tc_bridge_disable(struct drm_bridge *bridge) struct tc_data *tc = bridge_to_tc(bridge); int ret; - drm_panel_disable(tc->panel); - ret = tc_stream_disable(tc); if (ret < 0) dev_err(tc->dev, "main link stream stop error: %d\n", ret); @@ -1284,13 +1273,6 @@ static void tc_bridge_disable(struct drm_bridge *bridge) dev_err(tc->dev, "main link disable error: %d\n", ret); } -static void tc_bridge_post_disable(struct drm_bridge *bridge) -{ - struct tc_data *tc = bridge_to_tc(bridge); - - drm_panel_unprepare(tc->panel); -} - static bool tc_bridge_mode_fixup(struct drm_bridge *bridge, const struct drm_display_mode *mode, struct drm_display_mode *adj) @@ -1354,9 +1336,11 @@ static int tc_connector_get_modes(struct drm_connector *connector) return 0; } - num_modes = drm_panel_get_modes(tc->panel, connector); - if (num_modes > 0) - return num_modes; + if (tc->panel_bridge) { + num_modes = drm_bridge_get_modes(tc->panel_bridge, connector); + if (num_modes > 0) + return num_modes; + } edid = tc_get_edid(&tc->bridge, connector); num_modes = drm_add_edid_modes(connector, edid); @@ -1396,7 +1380,7 @@ tc_connector_detect(struct drm_connector *connector, bool force) if (tc->hpd_pin >= 0) return tc_bridge_detect(&tc->bridge); else - if (tc->panel) + if (tc->panel_bridge) return connector_status_connected; return connector_status_unknown; @@ -1419,16 +1403,23 @@ static int tc_bridge_attach(struct drm_bridge *bridge, struct drm_device *drm = bridge->dev; int ret; - if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) { - DRM_ERROR("Fix bridge driver to make connector optional!"); - return -EINVAL; + if (tc->panel_bridge) { + enum drm_bridge_attach_flags panel_flags; + + /* If a connector is required then this driver shall create it */ + panel_flags = flags & ~DRM_BRIDGE_ATTACH_NO_CONNECTOR; + ret = drm_bridge_attach(tc->bridge.encoder, tc->panel_bridge, + &tc->bridge, panel_flags); + if (ret) + return ret; } + if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) + return 0; + /* Create DP/eDP connector */ drm_connector_helper_add(&tc->connector, &tc_connector_helper_funcs); - ret = drm_connector_init(drm, &tc->connector, &tc_connector_funcs, - tc->panel ? DRM_MODE_CONNECTOR_eDP : - DRM_MODE_CONNECTOR_DisplayPort); + ret = drm_connector_init(drm, &tc->connector, &tc_connector_funcs, tc->bridge.type); if (ret) return ret; @@ -1441,9 +1432,6 @@ static int tc_bridge_attach(struct drm_bridge *bridge, DRM_CONNECTOR_POLL_DISCONNECT; } - if (tc->panel) - drm_panel_attach(tc->panel, &tc->connector); - drm_display_info_set_bus_formats(&tc->connector.display_info, &bus_format, 1); tc->connector.display_info.bus_flags = @@ -1459,10 +1447,8 @@ static const struct drm_bridge_funcs tc_bridge_funcs = { .attach = tc_bridge_attach, .mode_valid = tc_mode_valid, .mode_set = tc_bridge_mode_set, - .pre_enable = tc_bridge_pre_enable, .enable = tc_bridge_enable, .disable = tc_bridge_disable, - .post_disable = tc_bridge_post_disable, .mode_fixup = tc_bridge_mode_fixup, .detect = tc_bridge_detect, .get_edid = tc_get_edid, @@ -1555,6 +1541,7 @@ static irqreturn_t tc_irq_handler(int irq, void *arg) static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id) { struct device *dev = &client->dev; + struct drm_panel *panel; struct tc_data *tc; int ret; @@ -1565,10 +1552,23 @@ static int tc_probe(struct i2c_client *client, const struct i2c_device_id *id) tc->dev = dev; /* port@2 is the output port */ - ret = drm_of_find_panel_or_bridge(dev->of_node, 2, 0, &tc->panel, NULL); + ret = drm_of_find_panel_or_bridge(dev->of_node, 2, 0, &panel, NULL); if (ret && ret != -ENODEV) return ret; + if (panel) { + struct drm_bridge *panel_bridge; + + panel_bridge = devm_drm_panel_bridge_add(dev, panel); + if (IS_ERR(panel_bridge)) + return PTR_ERR(panel_bridge); + + tc->panel_bridge = panel_bridge; + tc->bridge.type = DRM_MODE_CONNECTOR_eDP; + } else { + tc->bridge.type = DRM_MODE_CONNECTOR_DisplayPort; + } + /* Shut down GPIO is optional */ tc->sd_gpio = devm_gpiod_get_optional(dev, "shutdown", GPIOD_OUT_HIGH); if (IS_ERR(tc->sd_gpio)) From patchwork Sun Jul 26 20:33:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686135 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 85294138A for ; Sun, 26 Jul 2020 20:34:02 +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 637A4206D8 for ; Sun, 26 Jul 2020 20:34:02 +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="ppfheFy+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 637A4206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 506F16E064; Sun, 26 Jul 2020 20:33:58 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x243.google.com (mail-lj1-x243.google.com [IPv6:2a00:1450:4864:20::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3B90389C55 for ; Sun, 26 Jul 2020 20:33:45 +0000 (UTC) Received: by mail-lj1-x243.google.com with SMTP id t6so2074880ljk.9 for ; Sun, 26 Jul 2020 13:33:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=C15A1UDnOXVGCMGjz4UccgYvW70KX4KigKoDq2NJ99w=; b=ppfheFy+6rIQJwaf0Be9d50qxPZ0MLUBRlsCcCiSq26PxmK/7WRHBtdLI13DPikppS gGBllBWtmVnAgyOo12gFjxetQc7fl0Q774MhcJj/CaQSa05LEHLeddkr7wf2ZZsIMKjI gk7cXA+wyuqnosbCFDPLFIFksRo5BelHkBeL7fVdwCL3IGmWOUITmhxtS2CamdYiQ3xP uCPFLI7cPEO7EDojBZ0rc8wjdQNbUA87qvMOIN1LpB32j7LfAdRgUIpvM28jrEdfp9FQ SyU+BdGMIK7LdXTeEmehOyIhD4RM94vJRlBOS54Nau5WSVyJjwBbXObju09Kw+GeSbOX rXSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=C15A1UDnOXVGCMGjz4UccgYvW70KX4KigKoDq2NJ99w=; b=g4MO+7YNtT7Q8pdQtzL42mJbp/pbP7Tja9DjdEgLCblJ1rKZBkrCXwHsNwZCaUK1UZ z/oe2BZCEvf1zoPgUWIfN4qqFni3J0Cp5wiHDUN9maR9kcPUcL19afXDPXCdYTvQrqMg SH9cD9f0Hl97Kfz8OJ3lwNuDe9BEuuPLKUXub1q4SXTTBNn9OuWOl/nlVSJ7rUfOZigY lhh57FVt/XD8q+wacJdxUCshQwmqgfSU1g5zQjL2sK6hh1+EzeEEDpJpmGNX30aO437s z5tIMovKcs2zkuTCzv/zYpw4FK91iJXp6v4xwtHE/8EG+xhrkyZV4QxuQgj5IG7f6E7A tGqA== X-Gm-Message-State: AOAM533CyM1pjb+f8JkfkiIzIRNjbPi7H8bP63C4qKq7luhHL4bS0wpQ 16UQKsn28APuSVq1QprdW9Z6NAKsWMM= X-Google-Smtp-Source: ABdhPJyk4Wvu9vVNk2pv0POx3tXBGTWHllrn20qLaAEPvTQEwq9U3duQd5i1IgoVDeLQ3u+EQxoxBw== X-Received: by 2002:a05:651c:1053:: with SMTP id x19mr8078128ljm.396.1595795623447; Sun, 26 Jul 2020 13:33:43 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:42 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 08/15] drm/bridge: parade-ps8622: add drm_panel_bridge support Date: Sun, 26 Jul 2020 22:33:17 +0200 Message-Id: <20200726203324.3722593-9-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Prepare the bridge driver for use in a chained setup by replacing direct use of drm_panel with drm_panel_bridge support. The connecter is now either created by the panel bridge or the display driver. So all code for connector creation in this driver is no longer relevant and thus dropped. The connector code had some special polling handling: connector.polled = DRM_CONNECTOR_POLL_HPD; drm_helper_hpd_irq_event(ps8622->bridge.dev); This code was most likely added to speed up detection of the connector. If really needed then this functionality belongs somewhere else. Note: the bridge panel will use the connector type from the panel. v2: - Fix to avoid creating connector twice (Laurent) - Drop all connector code - defer to bridge panel - Use panel_bridge for local variable to align with other drivers - Set bridge.type to DRM_MODE_CONNECTOR_LVDS; Signed-off-by: Sam Ravnborg Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec Reviewed-by: Laurent Pinchart --- drivers/gpu/drm/bridge/parade-ps8622.c | 100 ++++--------------------- 1 file changed, 13 insertions(+), 87 deletions(-) diff --git a/drivers/gpu/drm/bridge/parade-ps8622.c b/drivers/gpu/drm/bridge/parade-ps8622.c index d789ea2a7fb9..614b19f0f1b7 100644 --- a/drivers/gpu/drm/bridge/parade-ps8622.c +++ b/drivers/gpu/drm/bridge/parade-ps8622.c @@ -42,10 +42,9 @@ #endif struct ps8622_bridge { - struct drm_connector connector; struct i2c_client *client; struct drm_bridge bridge; - struct drm_panel *panel; + struct drm_bridge *panel_bridge; struct regulator *v12; struct backlight_device *bl; @@ -64,12 +63,6 @@ static inline struct ps8622_bridge * return container_of(bridge, struct ps8622_bridge, bridge); } -static inline struct ps8622_bridge * - connector_to_ps8622(struct drm_connector *connector) -{ - return container_of(connector, struct ps8622_bridge, connector); -} - static int ps8622_set(struct i2c_client *client, u8 page, u8 reg, u8 val) { int ret; @@ -365,11 +358,6 @@ static void ps8622_pre_enable(struct drm_bridge *bridge) DRM_ERROR("fails to enable ps8622->v12"); } - if (drm_panel_prepare(ps8622->panel)) { - DRM_ERROR("failed to prepare panel\n"); - return; - } - gpiod_set_value(ps8622->gpio_slp, 1); /* @@ -399,24 +387,9 @@ static void ps8622_pre_enable(struct drm_bridge *bridge) ps8622->enabled = true; } -static void ps8622_enable(struct drm_bridge *bridge) -{ - struct ps8622_bridge *ps8622 = bridge_to_ps8622(bridge); - - if (drm_panel_enable(ps8622->panel)) { - DRM_ERROR("failed to enable panel\n"); - return; - } -} - static void ps8622_disable(struct drm_bridge *bridge) { - struct ps8622_bridge *ps8622 = bridge_to_ps8622(bridge); - - if (drm_panel_disable(ps8622->panel)) { - DRM_ERROR("failed to disable panel\n"); - return; - } + /* Delay after panel is disabled */ msleep(PS8622_PWMO_END_T12_MS); } @@ -436,11 +409,6 @@ static void ps8622_post_disable(struct drm_bridge *bridge) */ gpiod_set_value(ps8622->gpio_slp, 0); - if (drm_panel_unprepare(ps8622->panel)) { - DRM_ERROR("failed to unprepare panel\n"); - return; - } - if (ps8622->v12) regulator_disable(ps8622->v12); @@ -455,67 +423,17 @@ static void ps8622_post_disable(struct drm_bridge *bridge) msleep(PS8622_POWER_OFF_T17_MS); } -static int ps8622_get_modes(struct drm_connector *connector) -{ - struct ps8622_bridge *ps8622; - - ps8622 = connector_to_ps8622(connector); - - return drm_panel_get_modes(ps8622->panel, connector); -} - -static const struct drm_connector_helper_funcs ps8622_connector_helper_funcs = { - .get_modes = ps8622_get_modes, -}; - -static const struct drm_connector_funcs ps8622_connector_funcs = { - .fill_modes = drm_helper_probe_single_connector_modes, - .destroy = drm_connector_cleanup, - .reset = drm_atomic_helper_connector_reset, - .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state, - .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, -}; - static int ps8622_attach(struct drm_bridge *bridge, enum drm_bridge_attach_flags flags) { struct ps8622_bridge *ps8622 = bridge_to_ps8622(bridge); - int ret; - - if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) { - DRM_ERROR("Fix bridge driver to make connector optional!"); - return -EINVAL; - } - if (!bridge->encoder) { - DRM_ERROR("Parent encoder object not found"); - return -ENODEV; - } - - ps8622->connector.polled = DRM_CONNECTOR_POLL_HPD; - ret = drm_connector_init(bridge->dev, &ps8622->connector, - &ps8622_connector_funcs, DRM_MODE_CONNECTOR_LVDS); - if (ret) { - DRM_ERROR("Failed to initialize connector with drm\n"); - return ret; - } - drm_connector_helper_add(&ps8622->connector, - &ps8622_connector_helper_funcs); - drm_connector_register(&ps8622->connector); - drm_connector_attach_encoder(&ps8622->connector, - bridge->encoder); - - if (ps8622->panel) - drm_panel_attach(ps8622->panel, &ps8622->connector); - - drm_helper_hpd_irq_event(ps8622->connector.dev); - - return ret; + return drm_bridge_attach(ps8622->bridge.encoder, ps8622->panel_bridge, + &ps8622->bridge, flags); } static const struct drm_bridge_funcs ps8622_bridge_funcs = { .pre_enable = ps8622_pre_enable, - .enable = ps8622_enable, .disable = ps8622_disable, .post_disable = ps8622_post_disable, .attach = ps8622_attach, @@ -533,16 +451,23 @@ static int ps8622_probe(struct i2c_client *client, { struct device *dev = &client->dev; struct ps8622_bridge *ps8622; + struct drm_bridge *panel_bridge; + struct drm_panel *panel; int ret; ps8622 = devm_kzalloc(dev, sizeof(*ps8622), GFP_KERNEL); if (!ps8622) return -ENOMEM; - ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0, &ps8622->panel, NULL); + ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0, &panel, NULL); if (ret) return ret; + panel_bridge = devm_drm_panel_bridge_add(dev, panel); + if (IS_ERR(panel_bridge)) + return PTR_ERR(panel_bridge); + + ps8622->panel_bridge = panel_bridge; ps8622->client = client; ps8622->v12 = devm_regulator_get(dev, "vdd12"); @@ -595,6 +520,7 @@ static int ps8622_probe(struct i2c_client *client, } ps8622->bridge.funcs = &ps8622_bridge_funcs; + ps8622->bridge.type = DRM_MODE_CONNECTOR_LVDS; ps8622->bridge.of_node = dev->of_node; drm_bridge_add(&ps8622->bridge); From patchwork Sun Jul 26 20:33:18 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686129 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 38882138A for ; Sun, 26 Jul 2020 20:33:55 +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 16F92206D8 for ; Sun, 26 Jul 2020 20:33:55 +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="R3LgLSBL" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 16F92206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 5EC746E06E; Sun, 26 Jul 2020 20:33:48 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x243.google.com (mail-lj1-x243.google.com [IPv6:2a00:1450:4864:20::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id A776C6E059 for ; Sun, 26 Jul 2020 20:33:46 +0000 (UTC) Received: by mail-lj1-x243.google.com with SMTP id f5so15001784ljj.10 for ; Sun, 26 Jul 2020 13:33:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nOZbsQZpgjOycHk0tiCVZFPbraV+pXlHSxRel9UQjHw=; b=R3LgLSBLNnSVekabz3NBn6UpXchETW8u2hZ0FMZZToNx5fhFa0WnqWmjVInCrP+Vgl fUyJn7d6e5L+3yVTQOoixO9IAHuGRib446OZs6UrFUy8187IbrcH/cMXpFl71uX7xKE+ 4TWdllZKIpmYUQ12Bwp6DXhIgDEhpKJ0+ru35eSbwJn0/uzsVa6C4VuNMy7DeYpU7Hep zdzV9OefQ1n3wtsSIXZxgakEloNednjitzIh+nH4XMSzxr5ooU4D7xUZVihtSSR+yVxl 8cYDcGA2FK6k9WNbpT5ChtYRQ185V6uwbd1v338idDq7/nh3fGQrae5RTOIYvcYT7dzB 1S1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=nOZbsQZpgjOycHk0tiCVZFPbraV+pXlHSxRel9UQjHw=; b=igK92gbHg8B5K11oo0vog1dG7Q2Ep6oN4HqCMa99TRdQdU4rkLyB2+9XddKyyNvqz/ 33QXuBVKw1Uv6Y25uBF6ZgFmBGSZL3H+qqoiC/b5f9E5zKu0SbuuO1MnJ/+AwATEaXkJ yZ85t+exEQTS3rK3MPQ8sfz41xPL4iH1lj18Cp2kN6tFDm9FDta4ACyCAfKiLUCwmSC2 cIDW5tj98Z2BgDQTml8BoePwWaxLn401QywVOnZECCIkHzHKAhLnFkoslJBSXzoNuVf+ S50rKux9hJOpfrcnflCPBbFdbKuJwMIbC4+YQmLNfq+lb6MUOjpOaLjpZl5N2hMzlReC D81w== X-Gm-Message-State: AOAM530mhr5VB531+mSuIV/9GMmm1iUeVIBT3w20IMMUsvLwXrVvWWO7 NFFev9xh2X4w1BHfP/POvB0+WSwn1s4= X-Google-Smtp-Source: ABdhPJxNfh+FsCl4LP32/OHq5e6vWYeul6tsXlIbCZ5ob3aCv6EkElOQd9AQQ+Jt+f8MW3DDcjejWw== X-Received: by 2002:a05:651c:1213:: with SMTP id i19mr359850lja.191.1595795624945; Sun, 26 Jul 2020 13:33:44 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:44 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 09/15] drm/bridge: megachips: add helper to create connector Date: Sun, 26 Jul 2020 22:33:18 +0200 Message-Id: <20200726203324.3722593-10-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Factor out connector creation to a small helper function. Signed-off-by: Sam Ravnborg Reviewed-by: Laurent Pinchart Cc: Peter Senna Tschudin Cc: Martin Donnelly Cc: Martyn Welch Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec --- .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 47 +++++++++++-------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c index 6200f12a37e6..258e0525cdcc 100644 --- a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c +++ b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c @@ -191,6 +191,32 @@ static const struct drm_connector_funcs ge_b850v3_lvds_connector_funcs = { .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, }; +static int ge_b850v3_lvds_create_connector(struct drm_bridge *bridge) +{ + struct drm_connector *connector = &ge_b850v3_lvds_ptr->connector; + int ret; + + if (!bridge->encoder) { + DRM_ERROR("Parent encoder object not found"); + return -ENODEV; + } + + connector->polled = DRM_CONNECTOR_POLL_HPD; + + drm_connector_helper_add(connector, + &ge_b850v3_lvds_connector_helper_funcs); + + ret = drm_connector_init(bridge->dev, connector, + &ge_b850v3_lvds_connector_funcs, + DRM_MODE_CONNECTOR_DisplayPort); + if (ret) { + DRM_ERROR("Failed to initialize connector with drm\n"); + return ret; + } + + return drm_connector_attach_encoder(connector, bridge->encoder); +} + static irqreturn_t ge_b850v3_lvds_irq_handler(int irq, void *dev_id) { struct i2c_client *stdp4028_i2c @@ -209,7 +235,6 @@ static irqreturn_t ge_b850v3_lvds_irq_handler(int irq, void *dev_id) static int ge_b850v3_lvds_attach(struct drm_bridge *bridge, enum drm_bridge_attach_flags flags) { - struct drm_connector *connector = &ge_b850v3_lvds_ptr->connector; struct i2c_client *stdp4028_i2c = ge_b850v3_lvds_ptr->stdp4028_i2c; int ret; @@ -219,25 +244,7 @@ static int ge_b850v3_lvds_attach(struct drm_bridge *bridge, return -EINVAL; } - if (!bridge->encoder) { - DRM_ERROR("Parent encoder object not found"); - return -ENODEV; - } - - connector->polled = DRM_CONNECTOR_POLL_HPD; - - drm_connector_helper_add(connector, - &ge_b850v3_lvds_connector_helper_funcs); - - ret = drm_connector_init(bridge->dev, connector, - &ge_b850v3_lvds_connector_funcs, - DRM_MODE_CONNECTOR_DisplayPort); - if (ret) { - DRM_ERROR("Failed to initialize connector with drm\n"); - return ret; - } - - ret = drm_connector_attach_encoder(connector, bridge->encoder); + ret = ge_b850v3_lvds_create_connector(bridge); if (ret) return ret; From patchwork Sun Jul 26 20:33:19 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686133 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 37E7C6C1 for ; Sun, 26 Jul 2020 20:34:01 +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 1626820738 for ; Sun, 26 Jul 2020 20:34:01 +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="YXhSEqF+" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1626820738 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 6A5B76E071; Sun, 26 Jul 2020 20:33:58 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 470A96E064 for ; Sun, 26 Jul 2020 20:33:48 +0000 (UTC) Received: by mail-lj1-x242.google.com with SMTP id x9so15023703ljc.5 for ; Sun, 26 Jul 2020 13:33:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1EBB3Ir0B1NE0wvwosVJgq3XPk7EGt/V/fFDmbYyVf4=; b=YXhSEqF++71SO/LJklmLBv9zd/MX4mD8laTZmfik6vIKEZ7ctkbbjJZcyCrlIO6oib XDYVK4PG7b58QeOKXdHkXlv5nCeUvths45VJ8IMLHH7LiZy5jNp3xCs4GM/V+Ok+u+Ie /eNQPt/oNfWakvL+ruxt88kXTTEE6Pwn1lLNB6U7JepvVHJaWadP+1ophU39MxJrITrP sSMfGHueMTEVu/CPbFGv55SHTj0+AefmawaZh/3+o0mA9YB2RshWUMx2smxazVXS8l80 ImpT5IN1eUuEgj2wpejW6uU4uOk/s2g6x8a5RQHgbzAE/ReZ/q7uB/LjhxSRv7PWW+H6 ka9w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=1EBB3Ir0B1NE0wvwosVJgq3XPk7EGt/V/fFDmbYyVf4=; b=eafkj1BNbu921t8VPwKX6fkE3oQxaWASjtRadp+BgFtkybMScI8Mv5YfPNcEJpf+Xd J28cWhsIhSuHi3blr/dXqgxqIZ2BXgBuAjLrLQeYarAlfM6b+MPfHC35YMYcZ7x+4fNm k+LxpIKKXGKn04UDEDP9qwswmdDrO7sxOSpNM0vViJZrOCDDdK46evIoRofWTYOiBGnN Fx+fv1Vhl4/ZX1aEff2nNWoKgeVzVHBS6u2UKn9h1UZKe/NgKcRf1PnGEOHggeL0Wzpr dMeQ8u1B6qr5wfATTzoSDABdO4IGzErqe1xuPCdVWd0HWR/Zp+O5BH69nblPWQ4xAcyU eRBA== X-Gm-Message-State: AOAM531Ji1Sh2kg4igCN02FzYh9Xc3p1BME96NeuwfNlvBzb4W/Wc/Sf EndMjrUf4stYG0od2zRcGW6qY1hIYsE= X-Google-Smtp-Source: ABdhPJzk4FGerqnrHIijBAH/PsM5cEHyI3MTmfsw0/sL73nUBjBeYjIMyWklGASXWg5EGI7RvLJskg== X-Received: by 2002:a2e:81d7:: with SMTP id s23mr8340494ljg.398.1595795626572; Sun, 26 Jul 2020 13:33:46 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:45 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 10/15] drm/bridge: megachips: get drm_device from bridge Date: Sun, 26 Jul 2020 22:33:19 +0200 Message-Id: <20200726203324.3722593-11-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Fix so drm_device is read from the bridge. This is a preparation for the connector being optional. Signed-off-by: Sam Ravnborg Reviewed-by: Laurent Pinchart Cc: Peter Senna Tschudin Cc: Martin Donnelly Cc: Martyn Welch Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec --- drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c index 258e0525cdcc..cf1dfbc88acf 100644 --- a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c +++ b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c @@ -226,8 +226,8 @@ static irqreturn_t ge_b850v3_lvds_irq_handler(int irq, void *dev_id) STDP4028_DPTX_IRQ_STS_REG, STDP4028_DPTX_IRQ_CLEAR); - if (ge_b850v3_lvds_ptr->connector.dev) - drm_kms_helper_hotplug_event(ge_b850v3_lvds_ptr->connector.dev); + if (ge_b850v3_lvds_ptr->bridge.dev) + drm_kms_helper_hotplug_event(ge_b850v3_lvds_ptr->bridge.dev); return IRQ_HANDLED; } From patchwork Sun Jul 26 20:33:20 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686143 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 266EA138A for ; Sun, 26 Jul 2020 20:34:12 +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 04A15206D8 for ; Sun, 26 Jul 2020 20:34:12 +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="QdsmJADY" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 04A15206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 256686E0CC; Sun, 26 Jul 2020 20:34:10 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id EB02D6E05F for ; Sun, 26 Jul 2020 20:33:49 +0000 (UTC) Received: by mail-lj1-x242.google.com with SMTP id t6so2074990ljk.9 for ; Sun, 26 Jul 2020 13:33:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=9o8t7ItYzAGUAEqtU+IrEhK6NT764az37c2FDqzuP8A=; b=QdsmJADYIm6qEB6VQOZjS6vGVoAA0VKMkR64isV8DE0fpf2bh8u6hA2Vc2sJrlbLJQ DIOmBFrRCLDY/ttsiW9vnAK5XtZwV9GaQxq92CxHOFt03VeDRaNpJ8MJUqAC0F3n83zh s6TBrRk5QN7Us66MV2/ke8asAe5u5wPDapCVI3MF/e3uKTXjS4lv8wtxR3uy7tBggA4s 8eAi0PDz+kOFvAtPulQKwaXklYe9VMDhXIh0b3ES3rp+Kw2TCMEUhTB/KdhRCbF4p2RQ rsU+fTv3hPWJU7FnmhHI/f0wCH+79OJSBrFwKBz5y20wbKcb2gdPNazhXzd/Zmcnuo2t VkXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=9o8t7ItYzAGUAEqtU+IrEhK6NT764az37c2FDqzuP8A=; b=aTt42QCc4yv2Ac93okfbpRCJwdb6LORlSUC3YPlXZpZKvoGTTDRkivZOVawIVjMQcq OR6pMl3dq5V/jQgndbsRQKJ3ZFML4vcewohTG6Xa+SUS7x+1PNjkiqpM0IzWyiWT11F9 fp0NRgqMFUFedQfK8o1hJFEPAKmUrzlGu2MsEu6v0qhkwY892GsToqfK1YKyYgY1pZwS RJiMlYIuxZk8NgOayiyxYGqyVu6VL3z3a84PUIBtrDOuFrntr+8GkJevmfjSC7alTIor A+zKcfyP13ri0KiZ1acAaM81Fo0XmO9NPT5s8a0BEJKnRO9CDGDGkbvb6WERyM1aZ4wR ITdg== X-Gm-Message-State: AOAM532/P9TtiWU90DwlQgX9N0/zTyp6VF9lSqriJoz+A+qv/wKxWBW2 wlLyuX+aRrlo5y6sQ/SmOeLMhddzSCI= X-Google-Smtp-Source: ABdhPJyx3VXYYjaE2z/NLai+VQEfPci/+44N5q8cauOJbWhx4QABm5/FOP6jVSCTOY4P7+0Wa+UywA== X-Received: by 2002:a05:651c:8c:: with SMTP id 12mr7968963ljq.420.1595795628118; Sun, 26 Jul 2020 13:33:48 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:47 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 11/15] drm/bridge: megachips: enable detect bridge operation Date: Sun, 26 Jul 2020 22:33:20 +0200 Message-Id: <20200726203324.3722593-12-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To prepare for use in a chained bridge setup enable the detect operation. Signed-off-by: Sam Ravnborg Reviewed-by: Laurent Pinchart Cc: Peter Senna Tschudin Cc: Martin Donnelly Cc: Martyn Welch Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec --- .../gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c index cf1dfbc88acf..450dca33ea48 100644 --- a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c +++ b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c @@ -163,8 +163,7 @@ drm_connector_helper_funcs ge_b850v3_lvds_connector_helper_funcs = { .mode_valid = ge_b850v3_lvds_mode_valid, }; -static enum drm_connector_status ge_b850v3_lvds_detect( - struct drm_connector *connector, bool force) +static enum drm_connector_status ge_b850v3_lvds_bridge_detect(struct drm_bridge *bridge) { struct i2c_client *stdp4028_i2c = ge_b850v3_lvds_ptr->stdp4028_i2c; @@ -182,6 +181,12 @@ static enum drm_connector_status ge_b850v3_lvds_detect( return connector_status_unknown; } +static enum drm_connector_status ge_b850v3_lvds_detect(struct drm_connector *connector, + bool force) +{ + return ge_b850v3_lvds_bridge_detect(&ge_b850v3_lvds_ptr->bridge); +} + static const struct drm_connector_funcs ge_b850v3_lvds_connector_funcs = { .fill_modes = drm_helper_probe_single_connector_modes, .detect = ge_b850v3_lvds_detect, @@ -263,6 +268,7 @@ static int ge_b850v3_lvds_attach(struct drm_bridge *bridge, static const struct drm_bridge_funcs ge_b850v3_lvds_funcs = { .attach = ge_b850v3_lvds_attach, + .detect = ge_b850v3_lvds_bridge_detect, }; static int ge_b850v3_lvds_init(struct device *dev) @@ -317,6 +323,7 @@ static int stdp4028_ge_b850v3_fw_probe(struct i2c_client *stdp4028_i2c, /* drm bridge initialization */ ge_b850v3_lvds_ptr->bridge.funcs = &ge_b850v3_lvds_funcs; + ge_b850v3_lvds_ptr->bridge.ops = DRM_BRIDGE_OP_DETECT; ge_b850v3_lvds_ptr->bridge.of_node = dev->of_node; drm_bridge_add(&ge_b850v3_lvds_ptr->bridge); From patchwork Sun Jul 26 20:33:21 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686137 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 0754E6C1 for ; Sun, 26 Jul 2020 20:34:04 +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 D9515206D8 for ; Sun, 26 Jul 2020 20:34:03 +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="fp/7FJQK" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D9515206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 9727A6E0CB; Sun, 26 Jul 2020 20:33:58 +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 3BB746E05F for ; Sun, 26 Jul 2020 20:33:51 +0000 (UTC) Received: by mail-lj1-x244.google.com with SMTP id r19so14981596ljn.12 for ; Sun, 26 Jul 2020 13:33:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vdrEsc4W+XPqou73FvY0YPB4idkSBZDmcrkLIZSIomA=; b=fp/7FJQK+GjncJCImvkq68O7i42AeKS8CL1LsQ5MooruHGOeeotLCJ5JmVBhxEaG+A Sv9b70tUH87TbmsWZ5rC9IbTR8qE98Pg1UCW8f3gynkbgCv0u80uuwsi16/XrFamq7MD tAiSYA+H25+BWyg9TS2iJWr82DgtOUP7x7XXnLFKRek7gV1ylsBAVklJKIo6He/xvGLN Z4tSg+fzcKcwHOVzP3/9AYdHBx7aiKUx/AMSWvaaKujZ9Nnbrs8FT99vava7Dyl0Owxr Yid2SkOF18g7upE6yt6Nykz2f+BY5XzbftqUOJ0iejtYe9f8i3QYG0Kj2hObDdYHnBua TjOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=vdrEsc4W+XPqou73FvY0YPB4idkSBZDmcrkLIZSIomA=; b=P9gztl/g7b2yXlX49vMCYnKuhsP1EkcsnW4HCRiC9w8rb+i5ClbumNswXgUojGL4io gn0Op6d6LffVhegPXgwXoYlZK9TNlPBEtZv92rg3cYxy84lvDg3s42ptfH56mQGWpvmr JaOCZ5Y94eF/OZ9ByhqffudxDgnpObgcRlDd0oTg9mMOEaOjlFDBDjU/6726Dqs+P/Dx 5F/936KzbvzkzodpvPbndtHyYZWHMIGaAyGx1xfHjx0FnxwyWvBRRYx0jLWmdiZlwhKQ asnCDWgNCaOvSSXcEQB6KPBXUBtQznJ2Yoye5aIL74NmtAushgI9CGR+gP45RrASUDy7 RZbg== X-Gm-Message-State: AOAM530vd/d4/P4N6mHLnn0Sp7RzgVSiB75AH5izbDVIrrv9VHHQV2XL Gs8eusBM7m6/ZqdA4pbHETuRxFPYYH0= X-Google-Smtp-Source: ABdhPJwMj1mvzznvhxxBJj+ymEE1YTbI2Gyssb13HJfnlx8XCDG6ngXItiKpbu+gA6JXdrJdbGTW6g== X-Received: by 2002:a2e:7a07:: with SMTP id v7mr8721901ljc.159.1595795629461; Sun, 26 Jul 2020 13:33:49 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:48 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 12/15] drm/bridge: megachips: add get_edid bridge operation Date: Sun, 26 Jul 2020 22:33:21 +0200 Message-Id: <20200726203324.3722593-13-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To prepare for a chained bridge setup add support for the get_edid bridge operation. There is no need for a copy of the edid - so drop the pointer to the copy. v2: - Fix so we do not leak memory (Laurent) Signed-off-by: Sam Ravnborg Cc: Peter Senna Tschudin Cc: Martin Donnelly Cc: Martyn Welch Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec Reviewed-by: Laurent Pinchart --- .../bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c index 450dca33ea48..f7b55dc374ac 100644 --- a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c +++ b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c @@ -61,7 +61,6 @@ struct ge_b850v3_lvds { struct drm_bridge bridge; struct i2c_client *stdp4028_i2c; struct i2c_client *stdp2690_i2c; - struct edid *edid; }; static struct ge_b850v3_lvds *ge_b850v3_lvds_ptr; @@ -131,22 +130,26 @@ static u8 *stdp2690_get_edid(struct i2c_client *client) return NULL; } -static int ge_b850v3_lvds_get_modes(struct drm_connector *connector) +static struct edid *ge_b850v3_lvds_get_edid(struct drm_bridge *bridge, + struct drm_connector *connector) { struct i2c_client *client; - int num_modes = 0; client = ge_b850v3_lvds_ptr->stdp2690_i2c; - kfree(ge_b850v3_lvds_ptr->edid); - ge_b850v3_lvds_ptr->edid = (struct edid *)stdp2690_get_edid(client); + return (struct edid *)stdp2690_get_edid(client); +} - if (ge_b850v3_lvds_ptr->edid) { - drm_connector_update_edid_property(connector, - ge_b850v3_lvds_ptr->edid); - num_modes = drm_add_edid_modes(connector, - ge_b850v3_lvds_ptr->edid); - } +static int ge_b850v3_lvds_get_modes(struct drm_connector *connector) +{ + struct edid *edid; + int num_modes; + + edid = ge_b850v3_lvds_get_edid(&ge_b850v3_lvds_ptr->bridge, connector); + + drm_connector_update_edid_property(connector, edid); + num_modes = drm_add_edid_modes(connector, edid); + kfree(edid); return num_modes; } @@ -269,6 +272,7 @@ static int ge_b850v3_lvds_attach(struct drm_bridge *bridge, static const struct drm_bridge_funcs ge_b850v3_lvds_funcs = { .attach = ge_b850v3_lvds_attach, .detect = ge_b850v3_lvds_bridge_detect, + .get_edid = ge_b850v3_lvds_get_edid, }; static int ge_b850v3_lvds_init(struct device *dev) @@ -304,8 +308,6 @@ static void ge_b850v3_lvds_remove(void) drm_bridge_remove(&ge_b850v3_lvds_ptr->bridge); - kfree(ge_b850v3_lvds_ptr->edid); - ge_b850v3_lvds_ptr = NULL; out: mutex_unlock(&ge_b850v3_lvds_dev_mutex); @@ -323,7 +325,8 @@ static int stdp4028_ge_b850v3_fw_probe(struct i2c_client *stdp4028_i2c, /* drm bridge initialization */ ge_b850v3_lvds_ptr->bridge.funcs = &ge_b850v3_lvds_funcs; - ge_b850v3_lvds_ptr->bridge.ops = DRM_BRIDGE_OP_DETECT; + ge_b850v3_lvds_ptr->bridge.ops = DRM_BRIDGE_OP_DETECT | + DRM_BRIDGE_OP_EDID; ge_b850v3_lvds_ptr->bridge.of_node = dev->of_node; drm_bridge_add(&ge_b850v3_lvds_ptr->bridge); From patchwork Sun Jul 26 20:33:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686131 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 D35BA6C1 for ; Sun, 26 Jul 2020 20:33:59 +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 B11B8206D8 for ; Sun, 26 Jul 2020 20:33:59 +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="TM0GiHLC" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org B11B8206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 48B866E05F; Sun, 26 Jul 2020 20:33:58 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x242.google.com (mail-lj1-x242.google.com [IPv6:2a00:1450:4864:20::242]) by gabe.freedesktop.org (Postfix) with ESMTPS id 69F0F6E05F for ; Sun, 26 Jul 2020 20:33:52 +0000 (UTC) Received: by mail-lj1-x242.google.com with SMTP id h19so14993976ljg.13 for ; Sun, 26 Jul 2020 13:33:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uX+TT4QWAvG80AbodGqHvsEovFQ2Bu21T/XzdAJlnuo=; b=TM0GiHLC8WpQHaSGzixAFzMvcLL2nLedP1jZkDz+4vbScRX/r8rwhTzNi3UNT56huV ox9WBSVY7C8kGJ6itKE4kh1lQvchDrGIQV6mlHd4z2gO7CxV5o0L3qAQM1OutE48+PDA M78j+6v8EUO9YjIw3vKVlMGWAzYIKr84yQC8MSzCnJ0p7sIdkoLBadPvTyiqmCwSDVXz 67ktmwnkSnNsVFWW24cccHpNqbOOUw2Alu8r7NZSLocDKMNPemHnI9G2VjCarWKFKq7V +DpjHqi69o6Ynv5gukaL+RvuoJZbSVXKsBVNLf9PXiQ+As2ykeE9I9QE+g83XsLeYR60 V2Lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=uX+TT4QWAvG80AbodGqHvsEovFQ2Bu21T/XzdAJlnuo=; b=NsOOkUMlLLXTfgPgy+UqJK1/tGYrVrby0hDQUOt+a9PnG6gHvKUEu+hltiRonL1k0v bo2uWGoiT5b7IgoOS4uK/vwbelIoQXyMwLjSHL3cRmqwPnVWKcOnaWF7x4Z93gBLbblG iYs2Ow2ADXHMbyRSL6RuWDtLqbWFYKJgS6QZUe5mW1UlqQ1gfSmr+VKQ/qwyiFoE9QeJ sO+McoOIh3vGSTLp1bIcbOReEaG3cFgE4atBJd/YJeMktlWRMIUn0/IBp+8w2Nl6Td6o 5s+QkCkZ8U2S4KASV0fb0PRtPNjb55hCJq0d2ELwEER61pF0asron4JrMjV2FPcmkNWI cCDg== X-Gm-Message-State: AOAM5311fkaEMkmEf2bDYrZpKOYQ/BQpolXWpOaTye1kjqnJ8I0reDoD AHAEw5pLssPgz3In9l4H8f3ZYptyWJ0= X-Google-Smtp-Source: ABdhPJystrsdc1UDD65fIekQWsqKPKij1SHfyLhUOrZucDKv7eX5xnRFvZR2FrodVJoR84OzxV8NwA== X-Received: by 2002:a2e:9b41:: with SMTP id o1mr8992100ljj.360.1595795630648; Sun, 26 Jul 2020 13:33:50 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:50 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 13/15] drm/bridge: megachips: make connector creation optional Date: Sun, 26 Jul 2020 22:33:22 +0200 Message-Id: <20200726203324.3722593-14-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Make the connector creation optional to enable usage of the megachips-stdpxxxx-ge-b850v3-fw bridge with the DRM bridge connector helper. v2: - Set bridge.type to DRM_MODE_CONNECTOR_DisplayPort Signed-off-by: Sam Ravnborg Cc: Peter Senna Tschudin Cc: Martin Donnelly Cc: Martyn Welch Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec Reviewed-by: Laurent Pinchart --- .../drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c index f7b55dc374ac..61a24f265c7a 100644 --- a/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c +++ b/drivers/gpu/drm/bridge/megachips-stdpxxxx-ge-b850v3-fw.c @@ -245,16 +245,6 @@ static int ge_b850v3_lvds_attach(struct drm_bridge *bridge, { struct i2c_client *stdp4028_i2c = ge_b850v3_lvds_ptr->stdp4028_i2c; - int ret; - - if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) { - DRM_ERROR("Fix bridge driver to make connector optional!"); - return -EINVAL; - } - - ret = ge_b850v3_lvds_create_connector(bridge); - if (ret) - return ret; /* Configures the bridge to re-enable interrupts after each ack. */ i2c_smbus_write_word_data(stdp4028_i2c, @@ -266,7 +256,10 @@ static int ge_b850v3_lvds_attach(struct drm_bridge *bridge, STDP4028_DPTX_IRQ_EN_REG, STDP4028_DPTX_IRQ_CONFIG); - return 0; + if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) + return 0; + + return ge_b850v3_lvds_create_connector(bridge); } static const struct drm_bridge_funcs ge_b850v3_lvds_funcs = { @@ -327,6 +320,7 @@ static int stdp4028_ge_b850v3_fw_probe(struct i2c_client *stdp4028_i2c, ge_b850v3_lvds_ptr->bridge.funcs = &ge_b850v3_lvds_funcs; ge_b850v3_lvds_ptr->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; + ge_b850v3_lvds_ptr->bridge.type = DRM_MODE_CONNECTOR_DisplayPort; ge_b850v3_lvds_ptr->bridge.of_node = dev->of_node; drm_bridge_add(&ge_b850v3_lvds_ptr->bridge); From patchwork Sun Jul 26 20:33:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686139 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 8291F6C1 for ; Sun, 26 Jul 2020 20:34:05 +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 60B2F206D8 for ; Sun, 26 Jul 2020 20:34:05 +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="NlX//OrN" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 60B2F206D8 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 0E1006E0D1; Sun, 26 Jul 2020 20:34:00 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x243.google.com (mail-lj1-x243.google.com [IPv6:2a00:1450:4864:20::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id CA1136E064 for ; Sun, 26 Jul 2020 20:33:53 +0000 (UTC) Received: by mail-lj1-x243.google.com with SMTP id 185so4811521ljj.7 for ; Sun, 26 Jul 2020 13:33:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=0a7eoeooyl+78/8MyG1oCyo2+Hzh/e3h16Uz2HYAj/A=; b=NlX//OrNFaSzFwAM8DWWLHOgrEH4jQa/b5ZlxeokDliceMJqcUo+cTNOPfxjm0MwgE AVPZmoxcqWYIHvtHRarc/DlblPQBKAFJwduk4cnhOrVK7sMh6AC/QE67I1WXjoZ6zVWu ckzVY0K4pFfVSR51xg3eschLNb8gycY7fWYwLcoDO4f8IlcC5sh+Q9EwzTkuNxtqBjpC I5GfVtG8bQfRmAnYsiz9eMOd2iPfHhhpdVA/b70+PefhlLRflrrZHfoM94ML9Ob8o57r e5S0N/riXPtALcSnrfd/ex5N/2fINmBpv7xQD6iG8bbW5MlVpbFLolsdW7i1DgCq6RqX GVXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=0a7eoeooyl+78/8MyG1oCyo2+Hzh/e3h16Uz2HYAj/A=; b=MBnNDUYaX8RfP914JrlfP3hmy/n84vuTgwf9ounycrsdjRj1p33IJ0JK8xp7GxmTuR DUAUg/sw+2lHmxy8FS68U7o62xkq7A0KUZcnpHVqEnHGG+bI4PKdmLZ8c5MUdO4XzWbd G+3I9YVMZYHMTwmJR4lxpLvwBBw29n8FEX5leStqEgEASRBDcip7UhhfW++HkGLBSevs CQ3DmXVKuKwQ0aXJJhyiBRoeGKKN+NUyVbtrneiqH3F4qiAkAwhve5xtGL1bpxZlGRJm 6Rkq4iPQ1UaM9TQfkL9WxNglomLRbrHQn5xK44QKf0EdSerJKAnxA39RIkKqVPLHMY9+ LevQ== X-Gm-Message-State: AOAM531HnZoI7k1PPJJP9HaM6LaTiyZwR5NA0zTVrqdFiZBmPzMj1fyI 1+JRut8vRgCzYq1NUAVPoz/o4RG67SM= X-Google-Smtp-Source: ABdhPJw2H8hmgxHo4hZ8j4VeIxYPascvCGPXINhTqQuOoE8A2OvwdnVt0qUX33ANhes9jMGQbzX9zQ== X-Received: by 2002:a05:651c:222:: with SMTP id z2mr8964561ljn.395.1595795632071; Sun, 26 Jul 2020 13:33:52 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:51 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 14/15] drm/bridge: nxp-ptn3460: add get_edid bridge operation Date: Sun, 26 Jul 2020 22:33:23 +0200 Message-Id: <20200726203324.3722593-15-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Add the get_edid() bridge operation to prepare for use as a chained bridge. Add helper function that is also used by the connector. v2: - Fix memory leak (Laurent) - Do not save a copy of edid, read it when needed Signed-off-by: Sam Ravnborg Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec Reviewed-by: Laurent Pinchart --- drivers/gpu/drm/bridge/nxp-ptn3460.c | 43 ++++++++++++++++------------ 1 file changed, 25 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c index 438e566ce0a4..2805c8938f98 100644 --- a/drivers/gpu/drm/bridge/nxp-ptn3460.c +++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c @@ -29,7 +29,6 @@ struct ptn3460_bridge { struct drm_connector connector; struct i2c_client *client; struct drm_bridge bridge; - struct edid *edid; struct drm_panel *panel; struct gpio_desc *gpio_pd_n; struct gpio_desc *gpio_rst_n; @@ -184,17 +183,13 @@ static void ptn3460_post_disable(struct drm_bridge *bridge) } } -static int ptn3460_get_modes(struct drm_connector *connector) +static struct edid *ptn3460_get_edid(struct drm_bridge *bridge, + struct drm_connector *connector) { - struct ptn3460_bridge *ptn_bridge; - u8 *edid; - int ret, num_modes = 0; + struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge); bool power_off; - - ptn_bridge = connector_to_ptn3460(connector); - - if (ptn_bridge->edid) - return drm_add_edid_modes(connector, ptn_bridge->edid); + u8 *edid; + int ret; power_off = !ptn_bridge->enabled; ptn3460_pre_enable(&ptn_bridge->bridge); @@ -202,30 +197,40 @@ static int ptn3460_get_modes(struct drm_connector *connector) edid = kmalloc(EDID_LENGTH, GFP_KERNEL); if (!edid) { DRM_ERROR("Failed to allocate EDID\n"); - return 0; + goto out; } ret = ptn3460_read_bytes(ptn_bridge, PTN3460_EDID_ADDR, edid, - EDID_LENGTH); + EDID_LENGTH); if (ret) { kfree(edid); + edid = NULL; goto out; } - ptn_bridge->edid = (struct edid *)edid; - drm_connector_update_edid_property(connector, ptn_bridge->edid); - - num_modes = drm_add_edid_modes(connector, ptn_bridge->edid); - out: if (power_off) ptn3460_disable(&ptn_bridge->bridge); + return (struct edid *)edid; +} + +static int ptn3460_connector_get_modes(struct drm_connector *connector) +{ + struct ptn3460_bridge *ptn_bridge = connector_to_ptn3460(connector); + struct edid *edid; + int num_modes; + + edid = ptn3460_get_edid(&ptn_bridge->bridge, connector); + drm_connector_update_edid_property(connector, edid); + num_modes = drm_add_edid_modes(connector, edid); + kfree(edid); + return num_modes; } static const struct drm_connector_helper_funcs ptn3460_connector_helper_funcs = { - .get_modes = ptn3460_get_modes, + .get_modes = ptn3460_connector_get_modes, }; static const struct drm_connector_funcs ptn3460_connector_funcs = { @@ -279,6 +284,7 @@ static const struct drm_bridge_funcs ptn3460_bridge_funcs = { .disable = ptn3460_disable, .post_disable = ptn3460_post_disable, .attach = ptn3460_bridge_attach, + .get_edid = ptn3460_get_edid, }; static int ptn3460_probe(struct i2c_client *client, @@ -327,6 +333,7 @@ static int ptn3460_probe(struct i2c_client *client, } ptn_bridge->bridge.funcs = &ptn3460_bridge_funcs; + ptn_bridge->bridge.ops = DRM_BRIDGE_OP_EDID; ptn_bridge->bridge.of_node = dev->of_node; drm_bridge_add(&ptn_bridge->bridge); From patchwork Sun Jul 26 20:33:24 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Ravnborg X-Patchwork-Id: 11686141 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 3AF106C1 for ; Sun, 26 Jul 2020 20:34:11 +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 1986620719 for ; Sun, 26 Jul 2020 20:34:11 +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="taTwFKjF" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1986620719 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ravnborg.org 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 F3F616E08E; Sun, 26 Jul 2020 20:34:09 +0000 (UTC) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mail-lj1-x243.google.com (mail-lj1-x243.google.com [IPv6:2a00:1450:4864:20::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8A2296E064 for ; Sun, 26 Jul 2020 20:33:55 +0000 (UTC) Received: by mail-lj1-x243.google.com with SMTP id f5so15001929ljj.10 for ; Sun, 26 Jul 2020 13:33:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tN35hpHhiMKaoDPF1Mc5y2FsU6QK7qyErTiHR9MNcLM=; b=taTwFKjFcOwuVieW1wDqeZQV1vDEGNVu6ehyHOda0LVHo0NoyJkHQjyxVsbB8ZAAFw c3JdVtipO24pHTc9cfCqIFK/mrHDrz2ICKcjxX8pWftTsbIboVFmI4bGvN0unyXdQxvO lrXATF0IdIXsZ2nPrdP3gOozwJAO8LkvJx5Ri4LI+uEdZUQ4sSvR6s9ITwofly2bCmdr My+znBjVbIla0bd1MZy0bTrlr/7bKnUMdmN2rfwIlCQyo7IHdJLl7wmK2qRwozakroF3 SEqh25RlfX6pNi+uzYPaueQHnbL3xc2N+Vcvmioktkcvct7zKeUopFI2SU6Jwlis2a20 XNZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=tN35hpHhiMKaoDPF1Mc5y2FsU6QK7qyErTiHR9MNcLM=; b=UR2l7UiXoBMDdQ72k+dFYjypY/bQpiWHXXQowpJoOvQ1g1LI2ngxYGHLh/338TGOeg 2bK0CKRrQuKi7MJMY/0YTdyi7h7FRVXVCkmvthIATOjvNRjgqcNxrbwhYddxdzOnmQ64 jc5aEBF8XuGZ4OhTROmmjoxUHPN2vh9T8bYJSGgEyjdTAqcVHUU0Pba/uvPjgTqXY672 MIfyWyzNUNfgnE7yK9Z0sgovBG/gLXzkZTvghs4psd7K+VYzZegUX7NIP3LNcFxy3pJ+ KCuRbLI7Wd+2O0x9nCJ7rqzl1JDq5TlKWn1TsoV2HKdRLZ4tpYPDAWcAS3Z82jYA5Xz+ Be6A== X-Gm-Message-State: AOAM531bWRGBPTdAyobFSyzbIkwJic3iYkXWUBeA42wchbga0RXZJH8R jvawFvdVCjH3ci4k4so2HSJ4k+FYroI= X-Google-Smtp-Source: ABdhPJwAQ4kixPVRS/zV0cAlc9lP0ard0M4pepZpApZYjD44p6qZYQLB3T8kkVPJw5ybk6+E0ivQEw== X-Received: by 2002:a2e:8751:: with SMTP id q17mr8729088ljj.268.1595795633680; Sun, 26 Jul 2020 13:33:53 -0700 (PDT) Received: from saturn.lan ([2a00:fd00:805f:db00:955c:e8d3:9c9d:41af]) by smtp.gmail.com with ESMTPSA id 203sm2538473lfk.49.2020.07.26.13.33.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jul 2020 13:33:52 -0700 (PDT) From: Sam Ravnborg To: dri-devel@lists.freedesktop.org, Laurent Pinchart Subject: [PATCH v4 15/15] drm/bridge: nxp-ptn3460: add drm_panel_bridge support Date: Sun, 26 Jul 2020 22:33:24 +0200 Message-Id: <20200726203324.3722593-16-sam@ravnborg.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200726203324.3722593-1-sam@ravnborg.org> References: <20200726203324.3722593-1-sam@ravnborg.org> MIME-Version: 1.0 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: Jernej Skrabec , Peter Senna Tschudin , Martyn Welch , Jonas Karlman , Neil Armstrong , Andrzej Hajda , Thierry Reding , Laurent Pinchart , kbuild test robot , Sam Ravnborg , Martin Donnelly Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Prepare the bridge driver for use in a chained setup. - Replacing direct use of drm_panel with drm_panel_bridge support. - Make the connector creation optional Note: the bridge panel will use the connector type from the panel. v2: - Use panel_bridge for local variable name to align with other drivers - Fix that connector was created twice (Laurent) - Set bridge.type to DRM_MODE_CONNECTOR_LVDS. Signed-off-by: Sam Ravnborg Cc: Andrzej Hajda Cc: Neil Armstrong Cc: Laurent Pinchart Cc: Jonas Karlman Cc: Jernej Skrabec --- drivers/gpu/drm/bridge/nxp-ptn3460.c | 60 ++++++++++------------------ 1 file changed, 20 insertions(+), 40 deletions(-) diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c b/drivers/gpu/drm/bridge/nxp-ptn3460.c index 2805c8938f98..a49616855dd3 100644 --- a/drivers/gpu/drm/bridge/nxp-ptn3460.c +++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c @@ -29,7 +29,7 @@ struct ptn3460_bridge { struct drm_connector connector; struct i2c_client *client; struct drm_bridge bridge; - struct drm_panel *panel; + struct drm_bridge *panel_bridge; struct gpio_desc *gpio_pd_n; struct gpio_desc *gpio_rst_n; u32 edid_emulation; @@ -126,11 +126,6 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge) usleep_range(10, 20); gpiod_set_value(ptn_bridge->gpio_rst_n, 1); - if (drm_panel_prepare(ptn_bridge->panel)) { - DRM_ERROR("failed to prepare panel\n"); - return; - } - /* * There's a bug in the PTN chip where it falsely asserts hotplug before * it is fully functional. We're forced to wait for the maximum start up @@ -145,16 +140,6 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge) ptn_bridge->enabled = true; } -static void ptn3460_enable(struct drm_bridge *bridge) -{ - struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge); - - if (drm_panel_enable(ptn_bridge->panel)) { - DRM_ERROR("failed to enable panel\n"); - return; - } -} - static void ptn3460_disable(struct drm_bridge *bridge) { struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge); @@ -164,24 +149,10 @@ static void ptn3460_disable(struct drm_bridge *bridge) ptn_bridge->enabled = false; - if (drm_panel_disable(ptn_bridge->panel)) { - DRM_ERROR("failed to disable panel\n"); - return; - } - gpiod_set_value(ptn_bridge->gpio_rst_n, 1); gpiod_set_value(ptn_bridge->gpio_pd_n, 0); } -static void ptn3460_post_disable(struct drm_bridge *bridge) -{ - struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge); - - if (drm_panel_unprepare(ptn_bridge->panel)) { - DRM_ERROR("failed to unprepare panel\n"); - return; - } -} static struct edid *ptn3460_get_edid(struct drm_bridge *bridge, struct drm_connector *connector) @@ -245,12 +216,18 @@ static int ptn3460_bridge_attach(struct drm_bridge *bridge, enum drm_bridge_attach_flags flags) { struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge); + enum drm_bridge_attach_flags panel_flags; int ret; - if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) { - DRM_ERROR("Fix bridge driver to make connector optional!"); - return -EINVAL; - } + /* Let this driver create connector if requested */ + panel_flags = flags & ~DRM_BRIDGE_ATTACH_NO_CONNECTOR; + ret = drm_bridge_attach(bridge->encoder, ptn_bridge->panel_bridge, + bridge, panel_flags); + if (ret < 0) + return ret; + + if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) + return 0; if (!bridge->encoder) { DRM_ERROR("Parent encoder object not found"); @@ -270,9 +247,6 @@ static int ptn3460_bridge_attach(struct drm_bridge *bridge, drm_connector_attach_encoder(&ptn_bridge->connector, bridge->encoder); - if (ptn_bridge->panel) - drm_panel_attach(ptn_bridge->panel, &ptn_bridge->connector); - drm_helper_hpd_irq_event(ptn_bridge->connector.dev); return ret; @@ -280,9 +254,7 @@ static int ptn3460_bridge_attach(struct drm_bridge *bridge, static const struct drm_bridge_funcs ptn3460_bridge_funcs = { .pre_enable = ptn3460_pre_enable, - .enable = ptn3460_enable, .disable = ptn3460_disable, - .post_disable = ptn3460_post_disable, .attach = ptn3460_bridge_attach, .get_edid = ptn3460_get_edid, }; @@ -292,6 +264,8 @@ static int ptn3460_probe(struct i2c_client *client, { struct device *dev = &client->dev; struct ptn3460_bridge *ptn_bridge; + struct drm_bridge *panel_bridge; + struct drm_panel *panel; int ret; ptn_bridge = devm_kzalloc(dev, sizeof(*ptn_bridge), GFP_KERNEL); @@ -299,10 +273,15 @@ static int ptn3460_probe(struct i2c_client *client, return -ENOMEM; } - ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0, &ptn_bridge->panel, NULL); + ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0, &panel, NULL); if (ret) return ret; + panel_bridge = devm_drm_panel_bridge_add(dev, panel); + if (IS_ERR(panel_bridge)) + return PTR_ERR(panel_bridge); + + ptn_bridge->panel_bridge = panel_bridge; ptn_bridge->client = client; ptn_bridge->gpio_pd_n = devm_gpiod_get(&client->dev, "powerdown", @@ -334,6 +313,7 @@ static int ptn3460_probe(struct i2c_client *client, ptn_bridge->bridge.funcs = &ptn3460_bridge_funcs; ptn_bridge->bridge.ops = DRM_BRIDGE_OP_EDID; + ptn_bridge->bridge.type = DRM_MODE_CONNECTOR_LVDS; ptn_bridge->bridge.of_node = dev->of_node; drm_bridge_add(&ptn_bridge->bridge);