From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 265BC3FA5C9 for ; Thu, 7 May 2026 13:45:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161558; cv=none; b=BlGksRmYdbgi4YvUe/zBlR6+z2JqcwKiwsJVQecS3AnKUEgMNYHjHhHyDe3CT40ObWFj9PrVfjLz3mndeVVfD/wJPW+Vg7IlsnmtJ4nWT5ArV6pySDtIP09wqjlB8EFSzSc+4g3N1JqIPoWSOYaQrJHoM35QaafNxmopTZPlD9c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161558; c=relaxed/simple; bh=OyzLstVpL+XgqH+X39MsNeI59A7dqDkaO8r6SkDxjB8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=gaOGE5n84Tt2hyggeeMKxNVGGQqsGQKXLRaBNWa6GkaUmVffbaaaw2Fa1/sdin4CSLYL3FLd1lTkqSPyCyYMtNgidHaq32F5ORwTITAT/uKd3FWqS3uJy3C2m7tfw7xHZhv7x2XEn57J2zp3HzBWwMnARVG4QKPUOdihX0CW/dU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=m+OAwk2t; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="m+OAwk2t" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 9A36BC5DC5D; Thu, 7 May 2026 13:46:37 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id DB18060495; Thu, 7 May 2026 13:45:49 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 5AA3A108194AD; Thu, 7 May 2026 15:45:44 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161548; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=gtuI/NuanHD3U7tvwm+d4uFTl+RmPkrMLjBzX+k18nU=; b=m+OAwk2t4Ac8cHrRYkYZUa5uRS0OoY57d22x3n808lZ9QUmHq6CMrfW7TXzozYC8iVYxnj eE2hdix7M+pOTDpv+XryjILyFNloZt+0yAZIgZ6VxbL8hXZUHOLy+iJwAk8Eb+rOBXZ40Y VMvz6ifEKJLHN7I+6I+iTquJ16/HphHDbnpgbZEBTCFLVpbp5zulKs1dKfKe6jL/R2It/G YLqvTLyWRe5CFJVBVn/ktBGC+A6nKKLyCBHp26mvo9/q7h42nADRxfAtvuDAq9CXgIUeJG BEOgBwvYOaRC8EAzQOrT+Xmru7UiqfYix9SslCGgPLkXMt2GN11AMpwIoqk36Q== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:19 +0200 Subject: [PATCH v5 01/11] drm/bridge: drm_bridge_put(): ignore ERR_PTR Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-1-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Laurent Pinchart , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 Most functions returning a struct drm_bridge pointer currently return a valid pointer or NULL, but this restricts their ability to return an error code as an ERR_PTR describing the error kind. In preparation to have new APIs that can return a struct drm_bridge pointer holding an ERR_PTR (and for those which already do) make drm_bridge_put() ignore ERR_PTR values, just like it ignores NULL pointers. This will avoid annoying error checking in many places and the risk of missing error checks. Suggested-by: Laurent Pinchart Link: https://lore.kernel.org/all/20260318152533.GA633439@killaraus.ideason= board.com/ Suggested-by: Dmitry Baryshkov Link: https://lore.kernel.org/all/omlnswxukeqgnatzdvooaashgkfcacjevkvbkm6xt= 33itgua2k@jcmzll2w6kdq/ Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli Reviewed-by: Laurent Pinchart --- Changes in v5: - don't change drm_bridge_get(), only drm_bridge_put() has known use cases Changes in v4: - removed incorrect change to drm_bridge_clear_and_put() kdoc Patch added in v2 --- drivers/gpu/drm/drm_bridge.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index d4b3478258ec..4aaea517b436 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -300,7 +300,7 @@ EXPORT_SYMBOL(drm_bridge_get); =20 /** * drm_bridge_put - Release a bridge reference - * @bridge: DRM bridge; if NULL this function does nothing + * @bridge: DRM bridge; if NULL or an ERR_PTR this function does nothing * * This function decrements the bridge's reference count and frees the * object if the reference count drops to zero. @@ -310,7 +310,7 @@ EXPORT_SYMBOL(drm_bridge_get); */ void drm_bridge_put(struct drm_bridge *bridge) { - if (bridge) + if (!IS_ERR_OR_NULL(bridge)) kref_put(&bridge->refcount, __drm_bridge_free); } EXPORT_SYMBOL(drm_bridge_put); --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A32983F7875 for ; Thu, 7 May 2026 13:45:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161558; cv=none; b=AjklAB97kBXE2/XveNp83M+RLBnoEwmOGTzjKr8j5FBjjcH/uAQLOYATCmyWm7KB3EyyRJ657F2Ql3W1QfEqxkyZir8p8Ku2NJ6SzRmSk5o8vHgnvRHAUMUCo046k3NXJJIpW3WeO0vgMejOCXHhmlfNswmWihdVilQ4l8KEGYc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161558; c=relaxed/simple; bh=2QzGLsEZAuI/Mqhoj0Xz9pzhkAKeneTzvWMm7ieiRx8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C4eW/yIowHzjURmgO9XqmS64jBj1EKeiNWZvNzuHmohPHQYpl+pP5lAl8AHPbtXGUexd8UNfh+1JIPpJ2aMgrPE4YEI39CK+v9zNLvzzh/Uoj8Z0pVN+LGKMUL6QTgtB+g+VH87QHWEZRl5/4EkdvL95XAG139eEsONaMK2M5Ko= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=bJGZ0SRj; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="bJGZ0SRj" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 3332B1A3556; Thu, 7 May 2026 13:45:54 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 062EA60495; Thu, 7 May 2026 13:45:54 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C534B102F291C; Thu, 7 May 2026 15:45:48 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161552; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=Z6Yw5IeNbztqy9jznr3VYHLfUqnfTnc5ZkHTRNnsNKo=; b=bJGZ0SRjsgSZZYZ49AMjuqMDaPi5hwh27UYFFC1GVfzubKoQ/ff7YfBBhUeyMVlCpyJGNo aX377J5GIRUbeZYfdhnsEyyoVdZCIjFc4hmqtvRe5gAM6RhXugOt5qEYMxrwm+qyVYKtw5 1TLpBjeyDe8PSSDQQnH4/j33S/Udozk02pTl1BvZ7hHdZuJk5pbxF+n+dACtIEm5Yxge1E Iq97kulWDE3zN7Q1d5Pmc48DnPaxJ22XNYP19WPWcpWO+wh4lRBjuf3/3x9PDn/Ofyc/OP g3vEacia2jyaIXTBLNE10IPaHfojeg75oOsvuY7LUfJzepBi+ObcK6w+a8bZmw== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:20 +0200 Subject: [PATCH v5 02/11] drm/bridge: add of_drm_get_bridge_by_endpoint() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-2-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov , Laurent Pinchart X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 drm_of_find_panel_or_bridge() is widely used, but many callers pass NULL into the @panel or the @bridge arguments, thus making a very partial usage of this rather complex function. Besides, the bridge returned in @bridge is not refcounted, thus making this API unsafe when DRM bridge hotplug will be introduced. Solve both issues for the cases of calls to drm_of_find_panel_or_bridge() with a NULL @panel pointer by adding a new function that only looks for bridges (and is thus much simpler) and increments the refcount of the returned bridge. The new function is identical to drm_of_find_panel_or_bridge() except it: - handles bridge refcounting: uses of_drm_find_and_get_bridge() instead of of_drm_find_bridge() internally to return a refcounted bridge - is simpler to use: just takes no @panel parameter, returns the pointer in the return value instead of a double pointer argument - has a simpler implementation: it is equal to drm_of_find_panel_or_bridge() after removing the code that becomes dead when @panel =3D=3D NULL Also add this function to drm_bridge.c and not drm_of.c because it returns bridges only. Reviewed-by: Dmitry Baryshkov Reviewed-by: Laurent Pinchart Signed-off-by: Luca Ceresoli --- Changes in v4: - update function declaration in non-OF case - fix grammar in comment Changes in v2: - return the bridge in the return value, not a double pointer --- drivers/gpu/drm/drm_bridge.c | 41 +++++++++++++++++++++++++++++++++++++++++ include/drm/drm_bridge.h | 7 +++++++ 2 files changed, 48 insertions(+) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 4aaea517b436..55384e257c50 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -1582,6 +1582,47 @@ struct drm_bridge *of_drm_find_bridge(struct device_= node *np) return bridge; } EXPORT_SYMBOL(of_drm_find_bridge); + +/** + * of_drm_get_bridge_by_endpoint - return DRM bridge connected to a port/e= ndpoint + * @np: device tree node containing output ports + * @port: port in the device tree node, or -1 for the first port found + * @endpoint: endpoint in the device tree node, or -1 for the first endpoi= nt found + * + * Given a DT node's port and endpoint number, find the connected node and + * return the associated drm_bridge device. + * + * The refcount of the returned bridge is incremented. Use drm_bridge_put() + * when done with it. + * + * Returns a pointer to the connected drm_bridge, or a negative error on f= ailure + */ +struct drm_bridge *of_drm_get_bridge_by_endpoint(const struct device_node = *np, + int port, int endpoint) +{ + struct drm_bridge *bridge; + + /* + * of_graph_get_remote_node() produces a noisy error message if port + * node isn't found and the absence of the port is a legit case here, + * so at first we silently check whether graph is present in the + * device-tree node. + */ + if (!of_graph_is_present(np)) + return ERR_PTR(-ENODEV); + + struct device_node *remote __free(device_node) =3D + of_graph_get_remote_node(np, port, endpoint); + if (!remote) + return ERR_PTR(-ENODEV); + + bridge =3D of_drm_find_and_get_bridge(remote); + if (!bridge) + return ERR_PTR(-EPROBE_DEFER); + + return bridge; +} +EXPORT_SYMBOL_GPL(of_drm_get_bridge_by_endpoint); #endif =20 /** diff --git a/include/drm/drm_bridge.h b/include/drm/drm_bridge.h index d6cd0f5af045..31e11a360c42 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -1327,6 +1327,8 @@ int drm_bridge_attach(struct drm_encoder *encoder, st= ruct drm_bridge *bridge, #ifdef CONFIG_OF struct drm_bridge *of_drm_find_and_get_bridge(struct device_node *np); struct drm_bridge *of_drm_find_bridge(struct device_node *np); +struct drm_bridge *of_drm_get_bridge_by_endpoint(const struct device_node = *np, + int port, int endpoint); #else static inline struct drm_bridge *of_drm_find_and_get_bridge(struct device_= node *np) { @@ -1336,6 +1338,11 @@ static inline struct drm_bridge *of_drm_find_bridge(= struct device_node *np) { return NULL; } +static inline struct drm_bridge *of_drm_get_bridge_by_endpoint(const struc= t device_node *np, + int port, int endpoint) +{ + return -ENODEV; +} #endif =20 static inline bool drm_bridge_is_last(struct drm_bridge *bridge) --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 60389388398; Thu, 7 May 2026 13:45:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161561; cv=none; b=jMBWUo5/R9PmnnpK9OGyG8Lw59yp3MnCb5SbV98v5fqYe8Emhh/5Sb/BKWS3BZgMfWDghvFWmosROy4CZYO38Sa+Ru/GoeqQ/7mRhs3FWobFwJ4sMxMaQ2kmuAllNCUV/eLwy0ZY7hO+lCvNADSWCxD+BjNmRr1ribhOqFMS0Ow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161561; c=relaxed/simple; bh=YU4W10QZOyvlqiJ44v/3rj0oAfMtEBv8LCCv8Og1kCs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qfCS4OQ/VJ5/i6pQAgUWB7Xi+m11D/waMeXC0wQTOm8f5tB2Ya6L3774nfdsfe3fGnvgb2jNA9H1perL34Rb9qaTIz4eBwYYMuBV+NzMdTDbTB8i4K2ctIWC2xp+rbXm/xupvl5FqKOU+ce87mfy+1BJLaoVd6EHomGkzXGqxBQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=I70fN5yp; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="I70fN5yp" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 171571A355C; Thu, 7 May 2026 13:45:58 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id DE06E60495; Thu, 7 May 2026 13:45:57 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id E2ACD108194AE; Thu, 7 May 2026 15:45:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161556; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=RtzP57UXUm85OPkvizoSGXF1wAN47TiL0RnGW2p7TxY=; b=I70fN5ypih0XjYhzsQvcof/74Ijv7zwpyhaaEfqKbQ/tBh9dsGEz1lmBOsajlDpOmPsQiu n4taQqavyWRH/IaRZm+efBklRheKiFAUP1vNI5NKRf5CxbQMA0Yn/0kMPIsUqplLE6dSTM frR4kS1nnVaEs3AuJL8gIv+grBuJBo2i8MxZPQD3VkXhu8c+1TgU1ihVP6M6bx7bUt9Mvt fs8GNKzmKCCgSzubZy8FO0TzNLBJuQMV0khAGrePDehQoXHWQIKTkifuUtGe+VcBvZATwO rUp2BtGiy6QPbl8ZTDKd65qiX/aa4QSClx1drEaOXcFu02fCweCjmDR8MMZqbQ== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:21 +0200 Subject: [PATCH v5 03/11] drm/msm/hdmi: switch to of_drm_get_bridge_by_endpoint() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-3-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. Signed-off-by: Luca Ceresoli --- Changes in v5: - simplify error management code flow Changes in v4: - ensure next_bridge is put on later probe failures Changes in v3: - fix ERR_PTR deref when -ENODEV is returned --- drivers/gpu/drm/msm/hdmi/hdmi.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index d9491aac1a89..3640be8c1bf9 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -285,9 +285,14 @@ static int msm_hdmi_dev_probe(struct platform_device *= pdev) spin_lock_init(&hdmi->reg_lock); mutex_init(&hdmi->state_mutex); =20 - ret =3D drm_of_find_panel_or_bridge(dev_of_node(dev), 1, 0, NULL, &hdmi->= next_bridge); - if (ret && ret !=3D -ENODEV) - return ret; + struct drm_bridge *next_bridge __free(drm_bridge_put) =3D + of_drm_get_bridge_by_endpoint(dev_of_node(dev), 1, 0); + if (IS_ERR(next_bridge)) { + if (PTR_ERR(next_bridge) !=3D -ENODEV) + return PTR_ERR(next_bridge); + + next_bridge =3D NULL; + } =20 hdmi->mmio =3D msm_ioremap(pdev, "core_physical"); if (IS_ERR(hdmi->mmio)) @@ -367,6 +372,8 @@ static int msm_hdmi_dev_probe(struct platform_device *p= dev) if (ret) goto err_put_phy; =20 + hdmi->next_bridge =3D no_free_ptr(next_bridge); + return 0; =20 err_put_phy: @@ -381,6 +388,7 @@ static void msm_hdmi_dev_remove(struct platform_device = *pdev) component_del(&pdev->dev, &msm_hdmi_ops); =20 msm_hdmi_put_phy(hdmi); + drm_bridge_put(hdmi->next_bridge); } =20 static int msm_hdmi_runtime_suspend(struct device *dev) --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B4C93FAE12; Thu, 7 May 2026 13:46:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161568; cv=none; b=EgD7g++COW2spuTkeN+n6Yq+IKm7PttyxhCmkyKCa3lduSmJXxtFE0hUD+vsbIv5a3CRV0151mPmnoc4onwnxd9xPLCW3teSRpu9MMU4KQGPQ08jg70NjAZnwSElyhqRIvjA2gVxzmrsVJj5EsoMj5By3Kpp8ExiEWfVFBRAwtc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161568; c=relaxed/simple; bh=L0x8y9xGgw0PqpPEHV/w4d+6yN4OzTb63Hn8duLLjMo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nLfC3/sZVcqgNFkaKmEw4yjR54QKLUO0zPa3Q9U7bp9HmWSp2uU8PlmaoA1Dxb4772h+96no4nDeIn30kW3bMMYmnFqWCxjuF09OB8WYDAIFp8Nj7D3nqpYfK3d4vFFF5VAzpkMySBzWW5H3I8C8pOQLThT+JYziriRXXT5IqDU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=mNqUq6Z/; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="mNqUq6Z/" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 0C5E51A3556; Thu, 7 May 2026 13:46:02 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id CD45B60495; Thu, 7 May 2026 13:46:01 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id DE9B9108194B1; Thu, 7 May 2026 15:45:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161560; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=EjLii+UVAxxUE1lRMJnRgBpuZnA4/R7NKW2C9QtWbBE=; b=mNqUq6Z/Itr5zMQoehVcmStSXKbhYx6Tw8PHwdV1d3IffODa8Td2iOGpPeLndE8Y5gbLMz y31Yc2n9n921mJ263I7WEnqU6tBRF2cV/L1szoIblnUtPSUDuF+H8M7wdYd/UiKUp0TxAD gvy+H89m74UQvyxkKI5yEDGLLHthkR9viMPNQhaBbSwp7LtpblMt6ZIR/oI7EA/XMZp80E FwZ6pEwYuo/u5kEDhqnAeyrW9snMwoPZ42zOrmsGNDjOMn2pA1sdXZOYw7agBFSHV9Hl5g g0mOt7qrucWPV1TRgNmQhFHfaXF0wqP5zaL+IiXgOItqOnvbbXDo4/VypT6JLg== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:22 +0200 Subject: [PATCH v5 04/11] drm/hisilicon/kirin: switch to of_drm_get_bridge_by_endpoint() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-4-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. Here the bridge pointer is only stored in a temporary variable, so a cleanup action is enough. Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c b/drivers/gpu/drm= /hisilicon/kirin/dw_drm_dsi.c index e80debdc4176..ab3cd309505a 100644 --- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c +++ b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c @@ -778,17 +778,16 @@ static int dsi_host_init(struct device *dev, struct d= w_dsi *dsi) static int dsi_bridge_init(struct drm_device *dev, struct dw_dsi *dsi) { struct drm_encoder *encoder =3D &dsi->encoder; - struct drm_bridge *bridge; + struct drm_bridge *bridge __free(drm_bridge_put) =3D NULL; struct device_node *np =3D dsi->dev->of_node; - int ret; =20 /* * Get the endpoint node. In our case, dsi has one output port1 * to which the external HDMI bridge is connected. */ - ret =3D drm_of_find_panel_or_bridge(np, 1, 0, NULL, &bridge); - if (ret) - return ret; + bridge =3D of_drm_get_bridge_by_endpoint(np, 1, 0); + if (IS_ERR(bridge)) + return PTR_ERR(bridge); =20 /* associate the bridge to dsi encoder */ return drm_bridge_attach(encoder, bridge, NULL, 0); --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1649C388398 for ; Thu, 7 May 2026 13:46:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161568; cv=none; b=ocfQZm819sD/88BwLP3cYpExZt7wA7AvTkcbN1xoppDmexKohCARLMz5VNTK3HtMWKQg0FD+MwXSf0L48wNV8nGQ7Jix3f9TIpsKmspty/rOz9pM26y4qBA0LKJFpoWeeNzIPXmR54om1eml4f7BbbTzKGjHc5j7NnnqDXCkNHo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161568; c=relaxed/simple; bh=kU5W7BmCPn+VPYARcDjCn7r7QzOzW+o2hPELB6tiJxQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VA5LSo+7H9QalVxK/fucpS4RP6pR+uox0xdck8D/McTRtnjTrg0Fq7/6g/9Gdw5dXrZYBgX3foZKSCKbC1rltTATJIMplKML4d2hiarFpyCsXLd8GVtf7UMf87axF2FDTfMIGI/nvcLoCRU7J0ZbUp+TV92V56IS/f/zp6+fvNs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=bCsQ1luk; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="bCsQ1luk" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 9B4E0C5DC5B; Thu, 7 May 2026 13:46:53 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id DB10D60495; Thu, 7 May 2026 13:46:05 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C45B3108194AF; Thu, 7 May 2026 15:46:00 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161564; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=CNAywJbD55/79Kay7v4Z9jjJDlDuDprtAGni4uyb1B4=; b=bCsQ1luk4lHyXfPp0bGzJ1bv+aVBuI7dExc5t9NINDS6CyFmbXhLkIu3/K4d4s0j8TnZlO iocQGsG/FUWbkVttREnikuOXLPFP/kZmChD1gib8wh04wVIAXdZ/0t3EXrJOg40UqJfS28 NqtuYBRyPJz+867bP6MdR2Bh30GlFdeEy+ReXqsdfW923OhDPW4hFl512+PRktoocmgKWm 3cfXym2rIYOLi05P/tf4wX6d+65+VAmTwuHyJaHe9XK+mPlIH9odcM4mE6dBBC4tCt9G6o 5qtN+d7t/JxoOpD6MKwNkqTpa2e845peGlfK/f/GcJ6LUfHxJUEHKW+T6LVyPg== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:23 +0200 Subject: [PATCH v5 05/11] drm/bridge: chrontel-ch7033: switch to of_drm_get_bridge_by_endpoint() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-5-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/chrontel-ch7033.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/bridge/chrontel-ch7033.c b/drivers/gpu/drm/bri= dge/chrontel-ch7033.c index 54d49d4882c8..a237c65ebd69 100644 --- a/drivers/gpu/drm/bridge/chrontel-ch7033.c +++ b/drivers/gpu/drm/bridge/chrontel-ch7033.c @@ -199,7 +199,6 @@ enum { =20 struct ch7033_priv { struct regmap *regmap; - struct drm_bridge *next_bridge; struct drm_bridge bridge; struct drm_connector connector; }; @@ -215,7 +214,7 @@ static enum drm_connector_status ch7033_connector_detec= t( { struct ch7033_priv *priv =3D conn_to_ch7033_priv(connector); =20 - return drm_bridge_detect(priv->next_bridge, connector); + return drm_bridge_detect(priv->bridge.next_bridge, connector); } =20 static const struct drm_connector_funcs ch7033_connector_funcs =3D { @@ -233,7 +232,7 @@ static int ch7033_connector_get_modes(struct drm_connec= tor *connector) const struct drm_edid *drm_edid; int ret; =20 - drm_edid =3D drm_bridge_edid_read(priv->next_bridge, connector); + drm_edid =3D drm_bridge_edid_read(priv->bridge.next_bridge, connector); drm_edid_connector_update(connector, drm_edid); if (drm_edid) { ret =3D drm_edid_connector_add_modes(connector); @@ -275,7 +274,7 @@ static int ch7033_bridge_attach(struct drm_bridge *brid= ge, struct drm_connector *connector =3D &priv->connector; int ret; =20 - ret =3D drm_bridge_attach(encoder, priv->next_bridge, bridge, + ret =3D drm_bridge_attach(encoder, priv->bridge.next_bridge, bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret) return ret; @@ -283,15 +282,15 @@ static int ch7033_bridge_attach(struct drm_bridge *br= idge, if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) return 0; =20 - if (priv->next_bridge->ops & DRM_BRIDGE_OP_DETECT) { + if (priv->bridge.next_bridge->ops & DRM_BRIDGE_OP_DETECT) { connector->polled =3D DRM_CONNECTOR_POLL_HPD; } else { connector->polled =3D DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT; } =20 - if (priv->next_bridge->ops & DRM_BRIDGE_OP_HPD) { - drm_bridge_hpd_enable(priv->next_bridge, ch7033_hpd_event, + if (priv->bridge.next_bridge->ops & DRM_BRIDGE_OP_HPD) { + drm_bridge_hpd_enable(priv->bridge.next_bridge, ch7033_hpd_event, priv); } =20 @@ -299,8 +298,8 @@ static int ch7033_bridge_attach(struct drm_bridge *brid= ge, &ch7033_connector_helper_funcs); ret =3D drm_connector_init_with_ddc(bridge->dev, &priv->connector, &ch7033_connector_funcs, - priv->next_bridge->type, - priv->next_bridge->ddc); + priv->bridge.next_bridge->type, + priv->bridge.next_bridge->ddc); if (ret) { DRM_ERROR("Failed to initialize connector\n"); return ret; @@ -313,8 +312,8 @@ static void ch7033_bridge_detach(struct drm_bridge *bri= dge) { struct ch7033_priv *priv =3D bridge_to_ch7033_priv(bridge); =20 - if (priv->next_bridge->ops & DRM_BRIDGE_OP_HPD) - drm_bridge_hpd_disable(priv->next_bridge); + if (priv->bridge.next_bridge->ops & DRM_BRIDGE_OP_HPD) + drm_bridge_hpd_disable(priv->bridge.next_bridge); drm_connector_cleanup(&priv->connector); } =20 @@ -543,10 +542,9 @@ static int ch7033_probe(struct i2c_client *client) =20 dev_set_drvdata(dev, priv); =20 - ret =3D drm_of_find_panel_or_bridge(dev->of_node, 1, -1, NULL, - &priv->next_bridge); - if (ret) - return ret; + priv->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dev->of_node, = 1, -1); + if (IS_ERR(priv->bridge.next_bridge)) + return PTR_ERR(priv->bridge.next_bridge); =20 priv->regmap =3D devm_regmap_init_i2c(client, &ch7033_regmap_config); if (IS_ERR(priv->regmap)) { --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 395AA3B8BD4; Thu, 7 May 2026 13:46:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161572; cv=none; b=Uz4x3lEm6OpEs/G9KaGnLhNdNHpnxJ4kx0FeqtRi1tTC32NCGsIYbVcvTpxsiZLCwXTnpFOgEDyiMR1izKonTQz0rcdIHNoR8FM6dXk56WPCYoOjVsHu9fQouN9FZ6vV26/YDczfX2OUC9/xqdQcndfrQrMfVYn8a0aZkTvciAI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161572; c=relaxed/simple; bh=P+ybbR2JCX5P3ToxNXc4BQOIlQX42qMh7LwK2rkO8kU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rQF+KSLLJ0/RKVbcHmMIvo1Yg9PKVch+V229XWrB5iQYUsURtR3kLAvqN432Ee3a7zk+KYfwLWnLRiQ3OIBV6KSqZEo7/4+Q7iX1oKDGBE8wVq/p1AovF/B+5v9mOSHuDD1jgcNQ7z3H8PR3NZqm7F62GX5b4FlLsBC/5pr6Pu8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=VV1PVAbG; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="VV1PVAbG" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 9535BC5DC5E; Thu, 7 May 2026 13:46:57 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id D52C660495; Thu, 7 May 2026 13:46:09 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id DCC23108194B2; Thu, 7 May 2026 15:46:04 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161568; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=p2/Y7roARxFkweio2HkVO8IrTHGmO9nhgwGPDGzMLOQ=; b=VV1PVAbGYz4ItPC8e3ikDV+Oki8QyLW1OCtbR5rY6++1q7FykAerI5eKiEqplmvreUa7Yb nj4Pc/ph4RN6UYgZo5Bitd5lgurmTjQtyPubUsjXs0oQx04/hgVCecnkWoDkeNR/sskbsR brHBMFyLHA0noq/w1xgQ088wgABDM2J1Bd3RHkJ+Z+h1O/J4E2hrcS1a+l/oz0/iQH6w1R vXmopeQlzrvLqqcW71KVkr1gGkJVzOEoxhifV19h1fk5EHe16O+q5W+Ij1Yu/UUqNB3kAZ SNQw1JLbIMH3zGXAIeCw/QCdRnLycU8fX4jq2MwbUE9YtFzhNT4q7SQzQ1aU7w== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:24 +0200 Subject: [PATCH v5 06/11] drm/bridge: lontium-lt9611uxc: switch to of_drm_get_bridge_by_endpoint() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-6-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/b= ridge/lontium-lt9611uxc.c index 11aab07d88df..9427cc2358ae 100644 --- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c +++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c @@ -35,7 +35,6 @@ struct lt9611uxc { struct device *dev; struct drm_bridge bridge; - struct drm_bridge *next_bridge; =20 struct regmap *regmap; /* Protects all accesses to registers by stopping the on-chip MCU */ @@ -284,7 +283,7 @@ static int lt9611uxc_bridge_attach(struct drm_bridge *b= ridge, { struct lt9611uxc *lt9611uxc =3D bridge_to_lt9611uxc(bridge); =20 - return drm_bridge_attach(encoder, lt9611uxc->next_bridge, + return drm_bridge_attach(encoder, lt9611uxc->bridge.next_bridge, bridge, flags); } =20 @@ -487,7 +486,11 @@ static int lt9611uxc_parse_dt(struct device *dev, =20 lt9611uxc->dsi1_node =3D of_graph_get_remote_node(dev->of_node, 1, -1); =20 - return drm_of_find_panel_or_bridge(dev->of_node, 2, -1, NULL, <9611uxc-= >next_bridge); + lt9611uxc->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dev->of_n= ode, 2, -1); + if (IS_ERR(lt9611uxc->bridge.next_bridge)) + return PTR_ERR(lt9611uxc->bridge.next_bridge); + + return 0; } =20 static int lt9611uxc_gpio_init(struct lt9611uxc *lt9611uxc) --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A90D93F9F36 for ; Thu, 7 May 2026 13:46:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161580; cv=none; b=QxqYZ9QuPDac/MNOWfIh+XxtmbxJpMFMd3ZZbF3jcBALmSKFqulFEWHx8s6Nb2VueYZwU0Smbz6xeUL/kCFFG1HXUSHCzc+zxObVRoWrom1BZzkx3MWdy2++J9Kc7XFFuTBQG/1BORa6g0Trhe+skesyetvRkeNgt7ATeSfP5Q8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161580; c=relaxed/simple; bh=egJWbWYiMv76eWAr6DTbvGsd4Kf5Sn0T33rsJRhBOrs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=q3XOUAJNGAvdM4lsmLfLxOkemH7f3StE3xIoe3SaZWkO/DLHHN7rsIMLLY7kgjMGTf2uyWAhvzI7CEhduXghkCvoWCh8NxiekV91kDvrSUx83CeNcmbAg5KX510O+z9jYlktydUFLsBeDXBShPITKEd6banjMcwIcKRsJpeeXSc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=dkpLdmrX; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="dkpLdmrX" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 687A01A355C; Thu, 7 May 2026 13:46:14 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 3BCA660495; Thu, 7 May 2026 13:46:14 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id CC8CC108194B0; Thu, 7 May 2026 15:46:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161572; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=T2up0nNcnVaU0yQbv4uPCscdyC0ZWVrNHuUZWb1EmZw=; b=dkpLdmrX5Iw48Vc763OAt0N/uiJhi63LJTbM7eYSSkE82eAUgLaKj+Uecs7y3PiCtiaTUd ZDSSqMywJ0k/wLRHpyoG+eajHbl+IqLpXEivW2UBXBTf4g8v/4Udkdb6LMrAWajcAREsfQ +QOUrfBvUjRQNNM0zdgaQZnsYx7k2/91PvAM86o741IRbhGLa8RW3QYzaqzg9MnwWfSOpy 1bDWyq5rOrgd/+4CZcj9y3FUxc5Qzn+AXvsR9oyE2q8tY8fLufBNwaDvqSZYxnDLK0+4Qq 5+rfp5T93lkMDlNF/tjvfMdF9ApPL0t58PqE4G2iZndCmtavvMqoQljtaEB9SA== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:25 +0200 Subject: [PATCH v5 07/11] drm/bridge: lt9611: switch to of_drm_get_bridge_by_endpoint() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-7-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/lontium-lt9611.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/lontium-lt9611.c b/drivers/gpu/drm/brid= ge/lontium-lt9611.c index 4517aee83332..4b4418cc83bf 100644 --- a/drivers/gpu/drm/bridge/lontium-lt9611.c +++ b/drivers/gpu/drm/bridge/lontium-lt9611.c @@ -37,7 +37,6 @@ struct lt9611 { struct device *dev; struct drm_bridge bridge; - struct drm_bridge *next_bridge; =20 struct regmap *regmap; =20 @@ -761,7 +760,7 @@ static int lt9611_bridge_attach(struct drm_bridge *brid= ge, { struct lt9611 *lt9611 =3D bridge_to_lt9611(bridge); =20 - return drm_bridge_attach(encoder, lt9611->next_bridge, + return drm_bridge_attach(encoder, lt9611->bridge.next_bridge, bridge, flags); } =20 @@ -1058,7 +1057,11 @@ static int lt9611_parse_dt(struct device *dev, =20 lt9611->ac_mode =3D of_property_read_bool(dev->of_node, "lt,ac-mode"); =20 - return drm_of_find_panel_or_bridge(dev->of_node, 2, -1, NULL, <9611->ne= xt_bridge); + lt9611->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dev->of_node= , 2, -1); + if (IS_ERR(lt9611->bridge.next_bridge)) + return PTR_ERR(lt9611->bridge.next_bridge); + + return 0; } =20 static int lt9611_gpio_init(struct lt9611 *lt9611) --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8F3943B95E7 for ; Thu, 7 May 2026 13:46:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161583; cv=none; b=sYfMRnmx+AZSJqhdYwkW1lKuXgR6Ad3V2p3dUGaW+PG+K3rTsayP8ac/HySGCL8+CAplev2jgZy5wO5HKbYAuZbiXFLCkIZ6RP0S1lVE6MC3Up9JgVwUtk3hjuokmGG5N6Qahahh2QsnovhwDhu4bPnBG8Gca2xE5jMIYoxtSOI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161583; c=relaxed/simple; bh=yPFXgxmud+A2NQJwbxi2g0zJIav9Acdc7KtVwjU1Ex8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Z17rcE/MJS96LvgHYcqMqDXVPq1ib419ivqkJCm6KDaWkNlgciO+2dtSo3N5uh5KJa3NFvtRdDH+1HPJsw5CTI1NYb1f76bRtrmxg7T2lw6b49pNR8Y2n0hyajPnf2UKSXITCcORQRLMqbOjFRuFpg+OVtZBDp4heq0/QNakElI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=aPFrPMqZ; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="aPFrPMqZ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 1755C1A3556; Thu, 7 May 2026 13:46:20 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id D23A260495; Thu, 7 May 2026 13:46:19 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 27E06108194AD; Thu, 7 May 2026 15:46:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161577; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=wSKdFSjblkonJUoHXe2RGnWG2gMdoHtLmwTvlc37T7U=; b=aPFrPMqZv1voNYbm1yqA9Dx2fIOScxYHi7j9T3yKozc/RRkp/+LorNvNRUsDR0K+2GxFlQ tkrw8A3mIOWJBHpK587XjNMqMjj4s07Y/aF2ICXsTG5IjAarVR40KHRtqf8tVqVT0BBZ1T S4D8g6dZZ6J1DneSzq7UbuUHbZ1cR4Oap1tJgmMplFa4GPQVZN0AroXGiVQgXZkAHip10K oE5xJ9rNd+9LJ3JGPsjxq/8YkWoS1oBOZYgM3RaQkfKkcZ/A0QLspyOxx3bGX5jE1COvhG dc5B2qVrCCH0UdHr5pn6fqfO0ua0gqQLSaC2ft2pF1/GYuraQ5AWf9+Jn6QhnQ== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:26 +0200 Subject: [PATCH v5 08/11] drm/bridge: adv7511: switch to of_drm_get_bridge_by_endpoint() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-8-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Biju Das , Dmitry Baryshkov , Laurent Pinchart X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Tested-by: Biju Das Reviewed-by: Dmitry Baryshkov Reviewed-by: Laurent Pinchart Signed-off-by: Luca Ceresoli --- Changes in v3: - fix ERR_PTR deref when -ENODEV is returned --- drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 - drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 15 +++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bri= dge/adv7511/adv7511.h index 8be7266fd4f4..12c95198d9a4 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h @@ -354,7 +354,6 @@ struct adv7511 { enum drm_connector_status status; bool powered; =20 - struct drm_bridge *next_bridge; struct drm_display_mode curr_mode; =20 unsigned int f_tmds; diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm= /bridge/adv7511/adv7511_drv.c index f318080f1139..8304978535e4 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c @@ -849,8 +849,8 @@ static int adv7511_bridge_attach(struct drm_bridge *bri= dge, struct adv7511 *adv =3D bridge_to_adv7511(bridge); int ret =3D 0; =20 - if (adv->next_bridge) { - ret =3D drm_bridge_attach(encoder, adv->next_bridge, bridge, + if (adv->bridge.next_bridge) { + ret =3D drm_bridge_attach(encoder, adv->bridge.next_bridge, bridge, flags | DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret) return ret; @@ -1249,10 +1249,13 @@ static int adv7511_probe(struct i2c_client *i2c) =20 memset(&link_config, 0, sizeof(link_config)); =20 - ret =3D drm_of_find_panel_or_bridge(dev->of_node, 1, -1, NULL, - &adv7511->next_bridge); - if (ret && ret !=3D -ENODEV) - return ret; + adv7511->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dev->of_nod= e, 1, -1); + if (IS_ERR(adv7511->bridge.next_bridge)) { + if (PTR_ERR(adv7511->bridge.next_bridge) =3D=3D -ENODEV) + adv7511->bridge.next_bridge =3D NULL; + else + return PTR_ERR(adv7511->bridge.next_bridge); + } =20 if (adv7511->info->link_config) ret =3D adv7511_parse_dt(dev->of_node, &link_config); --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-04.galae.net (smtpout-04.galae.net [185.171.202.116]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A9EF3FB7D5 for ; Thu, 7 May 2026 13:46:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.171.202.116 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161587; cv=none; b=Q/dCN6OzImg+l+1++v2EGExyFLj4CWgSRtXeilioEPe+8GzFoiMMTdjQXmbl5qxeapLkBrKe+K+7HSFTZ5grPHd8Ka76UWHQ7wJSpmoZTWhn4AFwGSnRVEk5JrvKYeCxTPIwUf+PO3/ZXhi6Rda5w/facmF3kvbQJVoBBoq0lk8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161587; c=relaxed/simple; bh=0mm4WgmUdA0yQi9nDfCBDMs+V/5BLUzfuWev6p9ZvIs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Bi+6OdmDWXLzrepX+vvGDXoeoDOcuHnJG6SoYXwX094L0Hd507+ZmOefQ5dKzdrDKcLRtd5c17UqbxiUw4Gc/WFNeH4CVym+CDbGAaAnD47hAlOe+OK/E7yEYLLRniEHFY9R201yprsyRrgBEuu7Stfz05VgzIGtODQNiW9Xups= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=A3BWfcZy; arc=none smtp.client-ip=185.171.202.116 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="A3BWfcZy" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 0676CC5DC5E; Thu, 7 May 2026 13:47:12 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 48A1760495; Thu, 7 May 2026 13:46:24 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 6806C108194AE; Thu, 7 May 2026 15:46:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161582; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=yUEV9MYSt3pHOUbVC0XEstJh+n5Nd9x9JzYSEpAeTFA=; b=A3BWfcZyRq2hJzUM5GiEYNqmkUqnqEDwFNgVecUz94laAHFlgph3q4u+sRCnlutaxl6ISW Fj+GrjfCmWwUewVfe+a0nwvQde3Yv85NRefaD3BgSrw5b0Q2Szh2OhbfB4Vwa80ETlfhUV lLFp7+g9tP6hz/S5r27Qrkf7yFXR4i+U8a1kaauHkhhLDfalPQ8Xo55zD2jxxyf+kiA+TY maNMleTtYwqbEY0GG47UdUfiawK5Gtf1D8Rqqm+5abrp8U0PeucefdGHnPNkbIJjhdBTm1 DFdffX/w62rAjG3aIQ8LGCN05zswep87qHzlTj7xc4DcOzlWUcIPCr3/3ffwDw== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:27 +0200 Subject: [PATCH v5 09/11] drm/bridge: lt8713sx: switch to of_drm_get_bridge_by_endpoint() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-9-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/lontium-lt8713sx.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/bridge/lontium-lt8713sx.c b/drivers/gpu/drm/br= idge/lontium-lt8713sx.c index 18fac6a46db4..cee485adf5e5 100644 --- a/drivers/gpu/drm/bridge/lontium-lt8713sx.c +++ b/drivers/gpu/drm/bridge/lontium-lt8713sx.c @@ -32,7 +32,6 @@ DECLARE_CRC8_TABLE(lt8713sx_crc_table); struct lt8713sx { struct device *dev; struct drm_bridge bridge; - struct drm_bridge *next_bridge; =20 struct regmap *regmap; /* Protects all accesses to registers by stopping the on-chip MCU */ @@ -458,7 +457,7 @@ static int lt8713sx_bridge_attach(struct drm_bridge *br= idge, struct lt8713sx *lt8713sx =3D container_of(bridge, struct lt8713sx, bridg= e); =20 return drm_bridge_attach(encoder, - lt8713sx->next_bridge, + lt8713sx->bridge.next_bridge, bridge, flags); } =20 @@ -537,10 +536,9 @@ static int lt8713sx_probe(struct i2c_client *client) if (IS_ERR(lt8713sx->regmap)) return dev_err_probe(dev, PTR_ERR(lt8713sx->regmap), "regmap i2c init fa= iled\n"); =20 - ret =3D drm_of_find_panel_or_bridge(lt8713sx->dev->of_node, 1, -1, NULL, - <8713sx->next_bridge); - if (ret < 0) - return ret; + lt8713sx->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(lt8713sx->= dev->of_node, 1, -1); + if (IS_ERR(lt8713sx->bridge.next_bridge)) + return PTR_ERR(lt8713sx->bridge.next_bridge); =20 ret =3D lt8713sx_gpio_init(lt8713sx); if (ret < 0) --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-03.galae.net (smtpout-03.galae.net [185.246.85.4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 90BA93FF8A8 for ; Thu, 7 May 2026 13:46:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.85.4 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161591; cv=none; b=oX5TaC8iztw4wbQ0KCPSbScbcZAK53ZzW9wrWPPyh3zsQwD1+Ic4j2r/JvwMnKgn9+RNM2gx30WuKKkDlxJ4bFQcuXqoPRAvI4yTQPb7XpN2SP1vVkYJ/dyLwdTknyfBUz5EfHMVZEPVDgvX3XkGeWdNW0R8SG8fKCa0efqxuYY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161591; c=relaxed/simple; bh=b2lF5UREYyWTRGPUh0vPyZK1ycJtgSe4kbirdUzjZfg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mlr+uvKFNOUzNwXgEQJjj8iH9bcJDHt3lE1uhmoD73IK0tx8IPGbd6CaCzUGXl3QsAqBIDNsiY3KEketQv/wtVYPBRFE564Nc77ms2oJoXF3fIjFCKoL8EV05OB0H/q5ZXwq3LApRkR5spOYwSDtTlDqjF+4GPdZGH0Tz5cK6+w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=h6bwji/y; arc=none smtp.client-ip=185.246.85.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="h6bwji/y" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 53D5B4E42C30; Thu, 7 May 2026 13:46:28 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 2742D60495; Thu, 7 May 2026 13:46:28 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id EAD01108194AF; Thu, 7 May 2026 15:46:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161586; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=D3j1Kg0MGD89s0UlGQuIXfEiHzH3ubFcDL9lQxl9jOE=; b=h6bwji/yn40RIXN6gUyz5FkfVMqXtCHKXb+glDiSOGEZDxRpoXvs51Bsc7iv6cUN9mjDJw YjnkVqpMtT8KIjXzH3eTsrgPcsOLs7575N7kku2D4eanMW0wZ7FeGjXHHqNtDhdFmPARJt cuMh/8nuN4t0LJMnChcH3M/AOBXGXRhK+ftqSdd34C1hcqgJQNRZ430UfJRU8nJajxqcdu SjVMpHc2O8v1NThSzUIdJ9Ua96w7I2S0F/ZjUAqUS2bTjBUye9kLR4WvKXrfQd8xI0H4e/ WrWHhuTO2pqJciiUF2513k4YI41oKx/9nwGN3WAmybKK837rkwbvjaRBrcdOUQ== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:28 +0200 Subject: [PATCH v5 10/11] drm: zynqmp_dp: switch to of_drm_get_bridge_by_endpoint() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-10-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Laurent Pinchart X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Reviewed-by: Laurent Pinchart Signed-off-by: Luca Ceresoli --- Changes in v4: - fix missing assignment - simplify error management code flow Changes in v3: - fix ERR_PTR deref when -ENODEV is returned --- drivers/gpu/drm/xlnx/zynqmp_dp.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/drivers/gpu/drm/xlnx/zynqmp_dp.c b/drivers/gpu/drm/xlnx/zynqmp= _dp.c index 379180fb3004..6130e31375c3 100644 --- a/drivers/gpu/drm/xlnx/zynqmp_dp.c +++ b/drivers/gpu/drm/xlnx/zynqmp_dp.c @@ -353,7 +353,6 @@ struct zynqmp_dp_train_set_priv { * @lock: Mutex protecting this struct and register access (but not AUX) * @irq: irq * @bridge: DRM bridge for the DP encoder - * @next_bridge: The downstream bridge * @test: Configuration for test mode * @config: IP core configuration from DTS * @aux: aux channel @@ -385,7 +384,6 @@ struct zynqmp_dp { struct completion aux_done; struct mutex lock; =20 - struct drm_bridge *next_bridge; struct device *dev; struct zynqmp_dpsub *dpsub; void __iomem *iomem; @@ -1494,8 +1492,8 @@ static int zynqmp_dp_bridge_attach(struct drm_bridge = *bridge, return ret; } =20 - if (dp->next_bridge) { - ret =3D drm_bridge_attach(encoder, dp->next_bridge, + if (dp->bridge.next_bridge) { + ret =3D drm_bridge_attach(encoder, dp->bridge.next_bridge, bridge, flags); if (ret < 0) goto error; @@ -2461,10 +2459,15 @@ int zynqmp_dp_probe(struct zynqmp_dpsub *dpsub) * Acquire the next bridge in the chain. Ignore errors caused by port@5 * not being connected for backward-compatibility with older DTs. */ - ret =3D drm_of_find_panel_or_bridge(dp->dev->of_node, 5, 0, NULL, - &dp->next_bridge); - if (ret < 0 && ret !=3D -ENODEV) - goto err_reset; + dp->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dp->dev->of_node= , 5, 0); + if (IS_ERR(dp->bridge.next_bridge)) { + if (PTR_ERR(dp->bridge.next_bridge) !=3D -ENODEV) { + ret =3D PTR_ERR(dp->bridge.next_bridge); + goto err_reset; + } + + dp->bridge.next_bridge =3D NULL; + } =20 /* Initialize the hardware. */ dp->config.misc0 &=3D ~ZYNQMP_DP_MAIN_STREAM_MISC0_SYNC_LOCK; --=20 2.53.0 From nobody Sat Jun 13 12:33:03 2026 Received: from smtpout-02.galae.net (smtpout-02.galae.net [185.246.84.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E87033FCB1C for ; Thu, 7 May 2026 13:46:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.246.84.56 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161595; cv=none; b=g09tlizQZSW9O/jliELvAX18WiF3ZAfKzlvVzhCSXB3lulrJFildUPD3S1Jc+TYtyEOpEOCXIjyj0IgpwDvMgcHdWurHEZybNMNUgPf+hH6EU7f/nH9Apum09GgTHj5qbVOBbCrALfzRclyUQZfjrx1LL2nSm+OMEec8UcwR/MY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778161595; c=relaxed/simple; bh=ScKxJtYDAsQIP4C5mxe67eN0zqabXwMhpWRySHhm8TY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qBe40TCfmkWE4W7r3Za1w/uAm6VmmLlpqtFGzmz74w8/rZlh+5ExyP4XsUWF+PMcViw1Vl37YGHsiWuh0NpaO+Sysd4QUES8d84fyMCrZ0SBPWoWv9uoNLd3HkhvMNKeeKXAjVZ7HSXfuAN9Kgc4c2W+rTWoemkWBneE40VlrjU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com; spf=pass smtp.mailfrom=bootlin.com; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b=DA/Fkkpa; arc=none smtp.client-ip=185.246.84.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=bootlin.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=bootlin.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=bootlin.com header.i=@bootlin.com header.b="DA/Fkkpa" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id B72C91A355C; Thu, 7 May 2026 13:46:32 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 8506360495; Thu, 7 May 2026 13:46:32 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 18C10102F291C; Thu, 7 May 2026 15:46:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1778161591; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=rto68eV+z4Sp1JUsMmDrk2YNt6sW9eVr0c5AroOwg1g=; b=DA/FkkpadiHknCOdwQzAd7lGvsG1vvJIrnLA9ClSeUKUy6d7HJhQSpcjW5zSXvE2/Yt39J DT/DSeM3+/NWgRZKMpWgDahF55GO1cks4OtdK1E+aELVYWh1v9QPmaOvmRxquKh5+pNXzn gHTvMk0c7JjKQ0PeweT4+EJgPRqoFowAmqhcNPRX/75kXYvgCQNVyxn7uPYWP8h3RlL/1h HL00HLIO7gyxPqlu4SFkePZTjvj6/Gtr3bTnq+2DqfzIxAapK8r1+c7xZVXf4sdL3xhxx1 V5iHnkoBhMiPUSrfkvDfYfH0MIJHYtVxoZ3cZtPwkBCvT6zOZDencITK4H4zbA== From: Luca Ceresoli Date: Thu, 07 May 2026 15:45:29 +0200 Subject: [PATCH v5 11/11] drm: of: forbid bridge-only calls to drm_of_find_panel_or_bridge() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-11-472b913b5cb7@bootlin.com> References: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> In-Reply-To: <20260507-drm-bridge-alloc-getput-panel_or_bridge-v5-0-472b913b5cb7@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov , Laurent Pinchart X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 Up to now drm_of_find_panel_or_bridge() can be called with a bridge pointer only, a panel pointer only, or both a bridge and a panel pointers. The logic to handle all the three cases is somewhat complex to read however. Now all bridge-only callers have been converted to of_drm_get_bridge_by_endpoint(), which is simpler and handles bridge refcounting. So forbid new bridge-only users by mandating a non-NULL panel pointer in the docs and in the sanity checks along with a warning. Reviewed-by: Dmitry Baryshkov Reviewed-by: Laurent Pinchart Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/drm_of.c | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/drm_of.c b/drivers/gpu/drm/drm_of.c index ef6b09316963..d03ada82eac9 100644 --- a/drivers/gpu/drm/drm_of.c +++ b/drivers/gpu/drm/drm_of.c @@ -225,15 +225,15 @@ EXPORT_SYMBOL_GPL(drm_of_encoder_active_endpoint); * @np: device tree node containing encoder output ports * @port: port in the device tree node * @endpoint: endpoint in the device tree node - * @panel: pointer to hold returned drm_panel + * @panel: pointer to hold returned drm_panel, must not be NULL * @bridge: pointer to hold returned drm_bridge * * Given a DT node's port and endpoint number, find the connected node and - * return either the associated struct drm_panel or drm_bridge device. Eit= her - * @panel or @bridge must not be NULL. + * return either the associated struct drm_panel or drm_bridge device. * * This function is deprecated and should not be used in new drivers. Use - * devm_drm_of_get_bridge() instead. + * of_drm_get_bridge_by_endpoint() instead when not looking for a panel, or + * devm_drm_of_get_bridge() otherwise. * * Returns zero if successful, or one of the standard error codes if it fa= ils. */ @@ -245,10 +245,10 @@ int drm_of_find_panel_or_bridge(const struct device_n= ode *np, int ret =3D -EPROBE_DEFER; struct device_node *remote; =20 - if (!panel && !bridge) + if (WARN_ON(!panel)) return -EINVAL; - if (panel) - *panel =3D NULL; + + *panel =3D NULL; =20 /* * of_graph_get_remote_node() produces a noisy error message if port @@ -263,13 +263,11 @@ int drm_of_find_panel_or_bridge(const struct device_n= ode *np, if (!remote) return -ENODEV; =20 - if (panel) { - *panel =3D of_drm_find_panel(remote); - if (!IS_ERR(*panel)) - ret =3D 0; - else - *panel =3D NULL; - } + *panel =3D of_drm_find_panel(remote); + if (!IS_ERR(*panel)) + ret =3D 0; + else + *panel =3D NULL; =20 if (bridge) { if (ret) { --=20 2.53.0