From nobody Wed Jun 17 04:20:17 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 5963B2EF653 for ; Tue, 28 Apr 2026 09:16:16 +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=1777367778; cv=none; b=S7PzObVAnLYM15VSkSgQfvuBv6Ol+Q1BQq73iaxQuPFod6dauG8xzCNMfq73drSChjs00KgYps5RzETuSqAbkvcH+Y4qDlIegrtFCUrCwfuXO3s5HzigH0DQMUCC1Z4xGle+adeVMn5GWwKgtcFsQGk/68UBNgretX/uoxa5k3Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367778; c=relaxed/simple; bh=xVOmhULoDAvEOqJsplX3ItVdTcSPCL7yA/iwB9qwLI0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=m0Go9DIIvLLCluHLvmCvz7TNEyh/WVL1wxwQfmnxG0h+O6/OT5plgBxKRh9Xb6aOdvc26f7Njdy3FbAzbh52NpHv/wps8/kF6fhJ0rMEULlzHeZ1IXoN3NBDjLdY8cNKx+nD+Qv9rqPNjbwF8mHSUKuPUBATTsaMNp4xOGFU0Ls= 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=gZtWpc3Z; 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="gZtWpc3Z" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id A78B3C5EF13; Tue, 28 Apr 2026 09:16:58 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 1C9D3601D0; Tue, 28 Apr 2026 09:16:15 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 1E8C610728631; Tue, 28 Apr 2026 11:16:08 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367772; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=9eo/paXSzW8BfmZpRrcP3BLHcobk12GzzlOo9kVEISI=; b=gZtWpc3ZSRRnd4uPBXmVObuxc8b70mdizyNzto8rtZS1uImrEoGxPYW2eTiuMOOfzCqDjp Gw8wYAtxuRZInF9j7CBINLwawUlx+8x6aem3/QfVJSj+bmiTPXWXg0kTLu3vZUieVtk2wM n6ut4ZYM14a13BLpseFPBxKlMdcLVd88zkxJCzwIRgDx3f/fxoRgL02agg+PJ56wJPxsf1 vuXmJAoFzrhpr9gWE4FcL7Df2HczNsU97jnIx+AXD3Uw89/vzRdru5i8q3lVsrAgd5vMQn 0qdgr8ZQW+Fq2cevjahutli9RnM0D2qEv45DR87Eo1ZksS86gKaeuFbz1KsukA== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:47 +0200 Subject: [PATCH v2 01/11] drm/bridge: drm_bridge_get/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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-1-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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 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_get() and drm_bridge_put() ignore ERR_PTR values, just like they ignore 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/ Signed-off-by: Luca Ceresoli Reviewed-by: Dmitry Baryshkov --- Patch added in v2 --- drivers/gpu/drm/drm_bridge.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 986e4c79a4e0..cea5babbe99e 100644 --- a/drivers/gpu/drm/drm_bridge.c +++ b/drivers/gpu/drm/drm_bridge.c @@ -282,7 +282,7 @@ static void __drm_bridge_free(struct kref *kref) =20 /** * drm_bridge_get - Acquire 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 increments the bridge's refcount. * @@ -291,7 +291,7 @@ static void __drm_bridge_free(struct kref *kref) */ struct drm_bridge *drm_bridge_get(struct drm_bridge *bridge) { - if (bridge) + if (!IS_ERR_OR_NULL(bridge)) kref_get(&bridge->refcount); =20 return bridge; @@ -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); @@ -319,8 +319,8 @@ EXPORT_SYMBOL(drm_bridge_put); * drm_bridge_clear_and_put - Given a bridge pointer, clear the pointer * then put the bridge * @bridge_pp: pointer to pointer to a struct drm_bridge; ``bridge_pp`` - * must be non-NULL; if ``*bridge_pp`` is NULL this function - * does nothing + * must be non-NULL; if ``*bridge_pp`` is NULL or an ERR_PTR + * this function does nothing * * Helper to put a DRM bridge, but only after setting its pointer to * NULL. Useful when a struct drm_bridge reference must be dropped without --=20 2.53.0 From nobody Wed Jun 17 04:20:17 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 76D4C3502A4 for ; Tue, 28 Apr 2026 09:16:20 +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=1777367782; cv=none; b=NIKW2w1puE6HzHv9gpjk4m0vS0FPbxUJqLXAg4cxU/TkGfvlvPjLs3n/Ol2/tpwwHu8K4gvaiBlypzRICy6dAGlahYX3uireoktQvCswe1wYprnC0IS0z7Xd2Xe8P5mutgrUAL0a8hD6jJcSsPzH3Fk6olbOj0fEF8ZDnbDip6c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367782; c=relaxed/simple; bh=JgsLjY7N/cSTr84A5yekh+dYCMdOFfAOpvYNjwdXnhA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YtGw18MjyHJ63hnt0S6WAH0jHpcGpFIHnNmcf5aAchir1CUEANXpG3rMnZ5fUPSPqERyjXZ/l4C8c86qkwabxbJ2z0qkYEfjfBCD8Qe9L7vGLyZoyu40uxy4PolLPcnxSjKKBdiuaxZEPdHJFaSldF8TIyiChnegs07BqhFd41E= 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=L90hIb6J; 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="L90hIb6J" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 3567B1A346D; Tue, 28 Apr 2026 09:16:19 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 0B0EA601D0; Tue, 28 Apr 2026 09:16:19 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 7435310728630; Tue, 28 Apr 2026 11:16:13 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367777; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=xq600VuXUHTogNlvQ1+mRAnMWFVRAxScMNGq+qSiS0k=; b=L90hIb6JmlBTYTGnRZQwH8tWTd1If+HhWAPcd00XDWFvfwSMCBQIbFetx9PA7PEKbzKIn5 XFXbEewQTyy66ZuOkSMlGgcI0BVh23fwzwPEV3ZJOvnrdiWvDYqPXDcQ4q4siwN4h7xaS4 Y4L+1hnzj1zwYz0W2zBIdOSIIxBZ97ebX6DwjJNvpBqZzqF3xhPMHvdV4CZ5WDGF6FfKPd 2rU6Ld8h8NUqZwbDYpqEhAORbLSEmUoW1MHLWYJABcFR2LXiV+Jb+de4bwNdS1OSPot2DK 7iUOU8xDJw2JaWmSosv9XFXZWSmAw+wKZRqL7wBNSp7AHHCmLzQavdIsNTFIqg== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:48 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-2-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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 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. Signed-off-by: Luca Ceresoli Reviewed-by: Dmitry Baryshkov --- 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 | 8 ++++++++ 2 files changed, 49 insertions(+) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index cea5babbe99e..8a4141bb7b31 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 presents 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..c96398460618 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,12 @@ static inline struct drm_bridge *of_drm_find_bridge(= struct device_node *np) { return NULL; } +static inline int of_drm_get_bridge_by_endpoint(const struct device_node *= np, + int port, int endpoint, + struct drm_bridge **bridge) +{ + return -ENODEV; +} #endif =20 static inline bool drm_bridge_is_last(struct drm_bridge *bridge) --=20 2.53.0 From nobody Wed Jun 17 04:20:17 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 ADBA33191D3 for ; Tue, 28 Apr 2026 09:16:25 +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=1777367787; cv=none; b=cZZkacSW9LYkTlkkwKSvuyfGXzrwQSIBwJuZQY7l6a6p0Qesi905QPmN+jm8BPiAxPAzL48VzKleLA6XQ8DrbhOoKzpf6DhRzRNKwao4Tupkx6JtWdrp5MFarkqzY4iPVKP0HNk/0zINSy4RJXNNxG4SKkXPChGaDvFhJIMuW6M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367787; c=relaxed/simple; bh=9KGZOIAdid4T8QowDC6fcWDXZTVef9rlIxxr85Nhs58=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JDE6Z3eosVhF9NzMhqpyyKf8d/+9oQ+NebBBUPc2kLtc88X8uRoj8bww/lvoMlKaPshORA/orIeBOGs/VknlRsCGI26Jz+v/TYqAm2Ap3HEgVJSyk0sBO3DTdvT6rz3fi7/odRFySA7vPkXJhollKEJFjr92ygTuqEkr4AMXf9I= 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=1jlaI5Cj; 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="1jlaI5Cj" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 531F11A346A; Tue, 28 Apr 2026 09:16:24 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 1C9AC601D0; Tue, 28 Apr 2026 09:16:24 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C4DEC107285BB; Tue, 28 Apr 2026 11:16:17 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367782; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=BcpOgdyt9d8XI/IOdZOfSLVbiB2evUamW2GZoPDUxSE=; b=1jlaI5CjCQW6/fmhxYFHY8zVDTvDN8NwTtwS+uYlak7r59KqfJTiJsuf3n9aHX2uE6moLe tTGikq4z0KCdU7x+IJmhwdsR2G9rE6Af9rRIGv7iNjZAXzXQ4c0QGy6QtcczOuhbAmGTz7 g/5JSJUSvLdF1ZCucpR+mHdGEZHjZnqgQWge5WbkB7g5Up3cExMC2x+l4SXY0UfNQrquHC q8HBUIxTXjVJRULNmUGBfrFkUVH8N3QBtUlpel7LrCbICzZDzcF176VlVGN3D8g6Gc11QH jJqpKInIdDgKZbnhMkkEKPxYKKZ++qPlU2PbwhEGPMoK5VTLaCRSul6b8ktMnQ== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:49 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-3-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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 Acked-by: Dmitry Baryshkov --- drivers/gpu/drm/msm/hdmi/hdmi.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 852abb2466f0..57c25a09b354 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -287,9 +287,9 @@ static int msm_hdmi_dev_probe(struct platform_device *p= dev) 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; + hdmi->next_bridge =3D of_drm_get_bridge_by_endpoint(dev_of_node(dev), 1, = 0); + if (IS_ERR(hdmi->next_bridge) && PTR_ERR(hdmi->next_bridge) !=3D -ENODEV) + return PTR_ERR(hdmi->next_bridge); =20 hdmi->mmio =3D msm_ioremap(pdev, "core_physical"); if (IS_ERR(hdmi->mmio)) @@ -383,6 +383,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 Wed Jun 17 04:20:17 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 172A8243951; Tue, 28 Apr 2026 09:16:30 +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=1777367791; cv=none; b=kZ4opvn81+oxGGMzZDba8zbE41uISra5zIZSkMet5EahiJRH1UD9inPN045LEPXUFrMTEmMuv6GrY4OUNq56i0xSUvq0lLh+IVtbXO+mppZS78uxZSArR4UPZjpteo3MN7GvUu73eAOKh6o2AZR65VtD5+jQWsgg2q3A2QMrYVk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367791; c=relaxed/simple; bh=L0x8y9xGgw0PqpPEHV/w4d+6yN4OzTb63Hn8duLLjMo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JRm0ZJDtZt59lrvRJ8AYzXCRsfanglGZfldjkfjThbMyrATg35EP2Aiwyb5cUbFLeZoNfHp/ESlFNHRQMVLb7A7auguWWFfe90t+nj8JOVnfPOTqlDo5IEa7oYh9RtV3/lZu4pJuptCAvRfo/ksCAJWET2bi5YTfzF8rEJ0S+6o= 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=gQo4Ex/c; 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="gQo4Ex/c" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id F047B1A346A; Tue, 28 Apr 2026 09:16:28 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id C37DC601D0; Tue, 28 Apr 2026 09:16:28 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 74FC4107285D0; Tue, 28 Apr 2026 11:16:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367786; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=EjLii+UVAxxUE1lRMJnRgBpuZnA4/R7NKW2C9QtWbBE=; b=gQo4Ex/cG1QWsfIwfIx0QlZLcHfIWk3hdRQrQpKVYxPrFs1OeJfkzuos2xCr6SrDcdZppa La/hx0ZXgDiMJXkkepnc04GiWy9CwjYKA9otckJKMMTw42wrcm+2GbTlkmBxtS5hGZsvWO TC2gzKB7NdK3WmDcJJsZc5tgl6Z/UTitcf29DBDcGl2Ojt0hCcdpELv7I/8ZLBX+JQJQXA k6s1iHhUij7p16Dzc0Tjo7VZti/Qm7rzq/X8JYjqLeU8l2gPtF1YiF+II1EohDHTs4xwHX gwv10cpMGWMLvESdekT/VZ7KWSTpbTmPpsJlgs535q6C0ioChErbCKd6kX8WsA== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:50 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-4-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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 Wed Jun 17 04:20:17 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 EFBB033DEE9 for ; Tue, 28 Apr 2026 09:16: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=1777367795; cv=none; b=nC77AzdWHjGIJFnvE3k6imTP94VBWdOsLjyvp7mM4eZyZwY/NgzR/2ZiBIq2EOyCaRCqcu3AjZEfhws3ZnlHwafR/q3Pjb6LTaUS5QGXUo636UGLrEI+nZLUK77x0GIwS8odJt6X0llR5XVJUmb8nQDpVj3b8Q6HOUARbbGtb3g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367795; c=relaxed/simple; bh=5r2Ph9WJjoO6Rs7TDY6Hf8UYufpzpR+eaX40eaFU4OE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JanjyMPBmqcOxOmG9JdwHlkJRzdsYGi+aHfdwjSNEGYz0L+Rir4MM67u7mE21a+DFLLj0m77w7OpU9I7uC4MXR0irbQwGyOh1+SKinSoLtmM9cTNFNuTna2l025jQ2jeJVHhE9XtfLf2lC2BqAL/CEMA3fd8tbOsNcn/owmIx8Y= 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=F55Y8HGJ; 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="F55Y8HGJ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id B60E21A346B; Tue, 28 Apr 2026 09:16:32 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 89D75601D0; Tue, 28 Apr 2026 09:16:32 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 00FF910728638; Tue, 28 Apr 2026 11:16:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367791; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=Tq7wLm5Qjy/VWPuE7Hon9QVm3LdoZsXSZF3xzGhx52k=; b=F55Y8HGJrPsA1QleW8uHKusfZdRSpcUbqIEw7Fx05F/b6YzZ5IgjjpckL4ukkpVLg2qWI7 NTzH6RAm7OUB52NaS6bnI+whokVed+tUXXQfM/8fU6TAC5XGBNVYJVh0wyLBtAF+I6v1oT 79FxnMRd1T4Dcm7403umxrgiBRXJchSppXymjcr8wOWk2h7z7Fg2Iv0C/w+1Xbb9hFHrEo RJdcPfM6dwIUD1PD8LfeudKd4h1nxnbUJ5fEg4/l8O5j1A22JOqh1ebYZRoQPgXyt+I0Ht 0UO9QOdqpDkBw/Pk71vJrlfz5eLqQ9/BI0OhSDcnIkDb/SPUhyPVVv+w1EILzA== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:51 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-5-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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. 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. Signed-off-by: Luca Ceresoli Reviewed-by: Dmitry Baryshkov --- 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 Wed Jun 17 04:20:17 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 9F8C233DEE9 for ; Tue, 28 Apr 2026 09:16:38 +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=1777367799; cv=none; b=efV3fjBJFkaq7QOCDxXISnlt0A2wFCQE6+4enL8UhFf7sRbY2QIjGTFGBQSfb46oTiYrRFBeeAcoLyIIfRUV7+bp0knsF4yacerlCzB5AdfVEJddTYe26168eI/LsLHchoGkw405v/b7C2DkqYO4PWsl4UeMXzkstZYR0U9p5OQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367799; c=relaxed/simple; bh=YOqKGCGYp/FPjKihl+TaQcNK6xqqvXv42Qun9EK7N1k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dI9Yi5u3vsToLTqyNL4LEWyJsCjgtF10v/2vx7VAXE7U9CMAcjNUHwfRHFcRRWSALMLKlGzSu8q/5fjYC4AN0IEv252Mm+zCMdFDswcgMlmEQaCi6vskjYyM0fZRAAKdVJxVuhIWacoNrgeDPebZsaAqtrJm2e8Z0s6eGA0/QmQ= 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=MaVSKeYa; 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="MaVSKeYa" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id EB32EC5EF13; Tue, 28 Apr 2026 09:17:20 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 5F203601D0; Tue, 28 Apr 2026 09:16:37 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 7546B10728590; Tue, 28 Apr 2026 11:16:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367795; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=IlJi1iPD8S3oBFXTvLf+zpfxjc4D0IFZgnv6l3mfmfw=; b=MaVSKeYajeSg0mjQmkK23UyHedLfCtcWDtHNulWWFnN/GaUA93w2EcBTepHCUIehlMlaSZ +pSV4VJjBwtyXg++gWiuRggf0cSn3XutaOG/UZC5EpaiGWkQOOEz0aOw0AZs+uJKq5bFI8 A/CgaNVUQUhfJU+/YAO8X0hrbhbE2p1ygVci6NWQ7+pMF+qj2YtCkRRBmxqh2Ced9lQhgI 6o9GqW+TOREV3f0TO5qfS97IuiHQuxsgLW3B+J8QCsuiWvf5h1YkGplyTM2NyjSvSIsaqe iEQxTvuttQ7gFZUPYDANE/Vs/N0ctx5L/50A5pYwFihjtMMxh7a1n1hCrlfx5A== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:52 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-6-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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. 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. Signed-off-by: Luca Ceresoli Reviewed-by: Dmitry Baryshkov --- 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 Wed Jun 17 04:20:17 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 5307C364E92; Tue, 28 Apr 2026 09:16:43 +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=1777367804; cv=none; b=Whh1Uh7kritiJeCjTofjzXBovyOKoICkj0ciqByOiYvNLuMHf4r+1P/0AH8gR8dF61syonZ3duaKTfkAFkTqQA9Vc9TGGBLWxL039oAQiI8TBBiyxIV6Y8MWqrvtSfmLYZeuu/MDlVMwogauxNysIxvNY4rkXnTIvtrf0IOOau4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367804; c=relaxed/simple; bh=ge1Vw7Tnnu0PMp6BFgBSkH7MnZBd1dke/mfhdIAFrrI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oElpbmK5/4CW1SEfHpnpzJ92jugZ0V9hp5qrxObXQUvSzDMtfnxSOD310eSUiS2yeItNuHjUTSqkTfIGkbyvVd9Z+jHBRJpQ0JV55t/Iqf/DcBLI23VHOgJr/qry9if56QJg9D8uYwfl7U6NEFpyf5bl3keafBJRCoTWfEfJgxQ= 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=A1M5rSSi; 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="A1M5rSSi" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 22D814E42B62; Tue, 28 Apr 2026 09:16:42 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id EC9B6601D0; Tue, 28 Apr 2026 09:16:41 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 48163107285BB; Tue, 28 Apr 2026 11:16:36 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367800; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=mmaVKtJM3lO6Hnnqd5tJzatbViYwoIePxSM4S8afOyo=; b=A1M5rSSihc6K7iDqB9h3eXd9CX7GPilekWRGD4JazuZWnGLqKbOzTyGNNsh/diHRSNVsUN 3HYIjD3AhhLICo336SY2pMPT5kUDG+T1s/mCFARYs1sCLKQsvgcWG3l3/av1b3m3ZFKtg5 TdkVGnj7OyJRfA/DHO/srRp3yEVnY20QEVDlLEZUSCcJxG4abMn7T9g8avxivqRS8ZLKNw RNcLGlTu2mjiqspwKn99CFwxIL9DHSNm1//UMGN5cvseTGeI09/5jeB6rmCJm4nvLi25OU CYx05m3gBUXY7ggA1Bw+zYaiBb6K+Go/swqUHSnyzVi0Wd0HlfVj+U5SorjAmw== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:53 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-7-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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. 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. Signed-off-by: Luca Ceresoli Reviewed-by: Dmitry Baryshkov --- 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 Wed Jun 17 04:20:17 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 B88A62EF653 for ; Tue, 28 Apr 2026 09:16:47 +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=1777367809; cv=none; b=u++0i6mLB7y+xP50Ej7ttm7FKh2mXfvcYjbcji89KTwChE6uhhsBBeCqeEy6zjkIfKQJOGhP1z0PXU5/76dPGI/z+BSe4P8L71kkKWusOZa4Lm7Guf85zEZA1764ptAX5XQfICtJphrL/A+vELMx5AzVArMIlTjoszjFj8KntC4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367809; c=relaxed/simple; bh=gDro3JCp5eksoK3sEL8UYVwYh7g8r/9IIH1qbnh5cME=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fzxCFWCDoklYQ/xZl3ZYen5LxPk1lgX5JmzBoDgFq3zqFP2Nd9wETDaRF4hjYDh7qTiLkiefqZbZn4a74uMpaGhSAxi72ZutUiqnLyiahWPs0fDtAD13VxmzO6eI3/cvEx9ylfCZlmTAQXxkFnN1GeZomjIhTFjrJ0muoqdkFVE= 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=xjomQkTf; 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="xjomQkTf" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 973AF4E42B61; Tue, 28 Apr 2026 09:16:46 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 64C1E601D0; Tue, 28 Apr 2026 09:16:46 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id E4342107285D0; Tue, 28 Apr 2026 11:16:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367804; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=Is6xGi5GYWmiEnjrUUIDhp2RdEA1LY4b9Jww/X6p7Fc=; b=xjomQkTf5BvzlAO/2ZP6+rVEnI8vsXk5utCNDzsnO7qfn0waLW+pHHmsokAzIcgfPlJLDv GsJauK6RNjVIU6aIFlweNZHiq71xpXzIYCvNhRg9hu9FhfSvY4cWEUwCaW3fSPbXey44hK NLxiFeKGj80QjCelp6JANPzgueMuTnmhepM+OIJU8SO9tXM6OkcXaqTXcrCE83goUFfIw9 bNDYfljLYQ/SamAUTqX/BnxJky96isxtojgHy34r6jFS1ptfE1E/PPyhzVldPYnBYIgV49 8+BiKm3SaApND0VhcBm0f72uEK1oi6uFc8qH1M5rPtuLs1HHZxALEwNSe6Xr8A== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:54 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-8-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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. 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. Signed-off-by: Luca Ceresoli Reviewed-by: Dmitry Baryshkov --- drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 - drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 11 +++++------ 2 files changed, 5 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 6bd76c1fb007..498e38579a0f 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c @@ -851,8 +851,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; @@ -1251,10 +1251,9 @@ 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) && PTR_ERR(adv7511->bridge.next_b= ridge) !=3D -ENODEV) + 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 Wed Jun 17 04:20:17 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 8771C341AB8; Tue, 28 Apr 2026 09:16:52 +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=1777367813; cv=none; b=jETd3DUS8+fOORVoTv8aOGlb7gkhZWUr1wN5+P1RincAJ//d/rGX5t2SPYa7Cwp6bAqmB6+kPRh2ke5hflOMqyw/dFOw8j08wS2V5s+uvkMjmsD0N2Yg+L+aAm2YCdYCRA+9/7DxJn/JPB2rKuK8VH0yaLoM3queJgFZ41ZbSts= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367813; c=relaxed/simple; bh=JHW8LpWPhsT5GMoRfqiuOga5zuHR+fUpHLrUF2bRxz4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=czn4WffyEoALVRpDTVV/iKpjZS70eSjFbd2JscCO42MYW+FUlCPgDTdT1doEiT2cOXumEBRGaq+QCqhF/XFSen6nH3+hpAIUZgKSckiQ7ZPnCypRJzdvXSNqjNAouOFtrUm+q6j7rmsiHqeVKANHEnRuBsEt2RCoNYwgSbJdzd0= 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=mgacal5Y; 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="mgacal5Y" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 52BB51A346A; Tue, 28 Apr 2026 09:16:51 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 20804601D0; Tue, 28 Apr 2026 09:16:51 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 3D3FD10728590; Tue, 28 Apr 2026 11:16:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367809; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=Xj+7EyWtqLA0saxXZPBQMk+VDQw/UBk6Y4BSe8yjAq4=; b=mgacal5Yb6iqLeaES/8xPqsrdMbHUc060TKg4ybxIIyUf3IJ9wo2BKYImPvKE5m5n6IgY5 OMXe4euPUcPIrEMklFmse7UFTd9DxpQBXwkxQykuqnPn+JUV1WMWgVKnQPA+XxoH0bvabw ba4QnxjPtXy8yMtt7j02johqpYjUdFokzD+G1mxSep2apMgQ1zOUHd3J2ZOV5eJhYaJumt lsHk2zsxsKuQGZ7xvGYRYiV/3YfH8Wddn0VefXkmiS0FBKiczGhr+KD87qnO8LGHGo8mi0 AdR9FdheKBstlMb2jQQx5PcbCBlcQTfIrlGcyxh2Yne3IDmhjf7cJRqCLK95tQ== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:55 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-9-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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. 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. Signed-off-by: Luca Ceresoli Reviewed-by: Dmitry Baryshkov --- 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 Wed Jun 17 04:20:17 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 E3F333148D9 for ; Tue, 28 Apr 2026 09:16:56 +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=1777367818; cv=none; b=rLCnV6oViHb5MEL4mkHuJ2jQA+xLa1C+/5j9F9zih5tkVUbwAV/TgK14UqeMYJWna4z6vnWMKfp7duTazPOsL48WBER8HX/LontwIbz6GDNqMi0tPQDTXxQlYl5Zpr3Fie6sVosifcCszwWvdIicIFHrNwH3Ip4R5qV5qfbaylI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367818; c=relaxed/simple; bh=u2ghPYS072iYRhNlYBqGcE2MO2ijrdggceHaz/9OWRE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VhsHvJbpGjmk9BwYxUNHGO6fEOXcuZ5GXyy02blmTfifo2n/C47FK0uhUQ1e5bNI1IfFnZqgMf04wE/CcG5CvVYc7Sv0fCZBfYGiDJMybno1P8HfTpquhkW4vB+h2X66QtGxF/2MC6ijKaV5JAeqQ5W2Rem/xSna8avAAyAvAN0= 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=TEtocTzN; 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="TEtocTzN" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 6AFFDC5EF13; Tue, 28 Apr 2026 09:17:39 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id D1447601D0; Tue, 28 Apr 2026 09:16:55 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C1EEF10728632; Tue, 28 Apr 2026 11:16:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367813; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=SdzSJHCqBPghJHP9yT4mgftGxJjry3km7Q5bZ8Dl+Ig=; b=TEtocTzN7gk+5Eb7iEPNc1IabHYrkE40qkY4J1Cch5xIZi+i7TZD20qh+PrF4iCscdCunn tOJZU/Au1wR2dh0g2SLJKUa5FZ0/0KNQV6mhRDoLHrGGh7Jf8ik0UtCAWXCbjxHNTOulQd 227e4M1fUrLamXqqrDgh+mZdaJJtB8SCCAj1v7f2dG62XfbwSSnlIvmqVWR8ZzBkJgeiOI /CSfWEKE2WiEzbTPPiFyyeWsor1Y7lNGU8mbiPgN5a343QlyWHoNnEcoJDVPosTIc6/TS4 qh9F1exhZRJwd5FKR6CBwnLyiPn8WzTj+4rldWPWr1l9rFmSkiCci5lRc0sCIQ== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:56 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-10-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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. 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. Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/xlnx/zynqmp_dp.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/xlnx/zynqmp_dp.c b/drivers/gpu/drm/xlnx/zynqmp= _dp.c index 379180fb3004..c724250d794f 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,11 @@ 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) + dp->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dp->dev->of_node= , 5, 0); + if (IS_ERR(dp->bridge.next_bridge) && PTR_ERR(dp->bridge.next_bridge) != =3D -ENODEV) { + ret =3D PTR_ERR(dp->bridge.next_bridge); goto err_reset; + } =20 /* Initialize the hardware. */ dp->config.misc0 &=3D ~ZYNQMP_DP_MAIN_STREAM_MISC0_SYNC_LOCK; --=20 2.53.0 From nobody Wed Jun 17 04:20:17 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 4780F2D9EED; Tue, 28 Apr 2026 09:17:01 +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=1777367822; cv=none; b=JVe1S5PfsgEiGCrbDSI2b36Qwia4loKBI69iXAmxuuytzmKeyOhHwxK+t+y/87edXtsRd+R82VNO2KzJnL40OGhhPIDQcX2dZtCqdyZixz66UpJGL1v3Xp0bkb73uIbm6kNid5t5aQ9geMKzT1cV1pzFV56DkBKVJhtwK7CQ8VE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777367822; c=relaxed/simple; bh=ArN1Htb5CCpGnYLPlHwhzOzBtQS5Ksc6a2oZhP4ArWY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=M+QJPUXGppA0AngVanUZ9s5pNuGLIhFnKp3Z0pVhrN7Lltay7Tc5m7TE8onWpWSCrE9yjAeyCi7hrtz0JFkNeR619o5yis+S2hfDUV5j5DZI5paoTO8Fw/gx3z2wLKRrX3ACev2w131gZK6Njccok4IvKIjgRldhI5Sw5EbB/sM= 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=YV7pQ7yc; 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="YV7pQ7yc" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 2228F1A346A; Tue, 28 Apr 2026 09:17:00 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id EA931601D0; Tue, 28 Apr 2026 09:16:59 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 9180510728633; Tue, 28 Apr 2026 11:16:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777367818; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=7L3fu9G25AKAS86kjQ1C+zgzZfaR0xQLx8NNumo/hq8=; b=YV7pQ7ycoEQINH3obkrMoAHR3FyLyq9PJVH8K5wmmIriXQY/1znQhr8lishYKa4GzigOik qsfHSejISdO+hI2VvJtTWFne4yUYx7EP9fQFASf093wMn6vSYWWB5hftFlH2t7HcvHi1N0 O7q/2IYGc/CrHxyAmAAAvpiy15Cdr07GYcuxVOSxKHYLHiz2Mzwi+8myhm2Al4Z8hPqCLc 12mj7NDBl7MfXFukX3Z45daH6/ifJcgStCrjDo8eFaZyQ2iVzz0Zm85j3Tk8MR9RORpWKv PRh4ffssOnTswwhz/Zo7dORr4viqLn6fH2NR6K5jhdPqlSanOXHFP6EEbOIweA== From: Luca Ceresoli Date: Tue, 28 Apr 2026 11:15:57 +0200 Subject: [PATCH v2 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: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-11-4300744a1c47@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v2-0-4300744a1c47@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Tian Tao , Xinwei Kong , Sumit Semwal , John Stultz , Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , 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 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. Signed-off-by: Luca Ceresoli Reviewed-by: Dmitry Baryshkov --- 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