From nobody Wed Jun 17 01:42:35 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 F2F8C34D4F9; Tue, 28 Apr 2026 15:31:27 +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=1777390289; cv=none; b=ViBVG1VdRwg5S+wrSiEyIWj0yvJryr04dsJtgTYi8gSG4UpT2EwerYsS7ciTwLCLMu9Mm5fdv17jzE98wsuMokGiFch/GRNz/FrvMFdgQlXeoYzFF1jlaJymKyDdx3MDxrC/0tDwM7xzz50YhaP6TWufep0r8qAg/kSwg+lkW+w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390289; c=relaxed/simple; bh=/6i+I+Ahqcaw0hEVyXO/+NoRSgZfkn3GsxAfKifHV7c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UoTQajJFLB2HcqfFQJw7ktd2l/1TesH8bDgdnY3fMtU5vn1fc0wGc7u3LbEtmYxmzz2p0soKjT5r4hHbYvyIkEtoO720E5fktduV3DqdeoVeymbZ29FHMd0lBJpxFpZj3CSsXeq9ItmKgzaOEV2IRJN9iXemKNy90YqkBJOH0n8= 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=WB8l9OWe; 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="WB8l9OWe" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 0A240C5EF13; Tue, 28 Apr 2026 15:32:10 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 552F8601D0; Tue, 28 Apr 2026 15:31:26 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id C96E910728E18; Tue, 28 Apr 2026 17:31:20 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390284; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=2BvOzWo5y7iu3ogjGuvFlqMhxWThTnHYQLmqfAhkhSI=; b=WB8l9OWelMoWKonXJmNPEosw6UmTjMyDvYMFiv/ZdIvZ4c6MGQcKzq18C2w1A8bXXr8vgI nVjEYs4aT+s2bQ60RJMG00r/kY/Frg5dC3GxgIb5Gj75D0J7PzKJn+DLNlC/c50/YDOhc3 ohEdTqbZepBi+gLbNS8J/XHz+sPbssxw+Hj+fPmiCwwLHZzKXD4lUHT7mVewpLsJQCrExU Sx0cVc7E87qv5/pLQXSPuzuWbJ4Gq7QqeMAa2F/2bQ0VAcf9IghwVpRk61SAAxFb7zj8O9 C0Jtlr5MFFwxo9VZqwbxpc/dazjgPtenP27VYlYAPc+QgfnzjiWUAELitWcxCg== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:50 +0200 Subject: [PATCH v3 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-v3-1-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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 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/ Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli --- 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 01:42:35 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 1C35137DEB6; Tue, 28 Apr 2026 15:31:31 +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=1777390293; cv=none; b=YHcRJb8xUowTvPov2tf8Uf38bJDF228fPM1Zuxh0ol3W02sZFJWVTX1hQMYTVIPK0un3BIHfN2C8CtKkXeGhrjzG7RTgjvGCoTRTriVbOO5RxtAVSvzM8WAgPxWNnLixCWP/AOA0MNJCWu0yjjfZF9X0M/S1Fte59VQjeMkh/Ek= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390293; c=relaxed/simple; bh=B4wv+FsO0bzj3uJ3KuufjV0uFxb3XMb9IcU8I9/466A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JPHfh+CwdQpzzUoxApQotnlH4yWuqZFLbe75y24+yh/OFzEETnr8dx8GMkf6uLAxcv43TbkgdCfFGhsgKMpGSHQSGm0YVWGBM5MhCxkgG/0TqW1Hdo7ayibIkjeNneoWkVWVSatiUDtW+Zt1nebvYSS3WPri7yGNl3XYO7MlNNg= 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=uv2RqLZz; 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="uv2RqLZz" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 9CDDC1A3472; Tue, 28 Apr 2026 15:31:30 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 7087F601D0; Tue, 28 Apr 2026 15:31:30 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 30C621072861C; Tue, 28 Apr 2026 17:31:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390288; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=VsrC/dIKfRU1a6fTx7g9J6CIwsYbpBRHj18mRvL+Qcw=; b=uv2RqLZz+nNUGe35Hr9Iu/wF/eHNaGy3J5lftvjtoCUc2n545RGFMN1Ybj2uBpviMkOe10 iySoU1xJCfrm33YABPoyiTbDRx0gv22J/LGTECKaEQT25aD1WSQGPi0LVtedRqRp2ehYGl KA00zR+FntIzJe5J/Wwrku22DEc4HdnmlQAgPt1jfm8pekL0eMxGs4nPe0KLRvRFkq7JBl lXVP/mA4lx31Azu3kdqvLNpBeNxc7k1qFvpgNHal0SL26TNl4eRqcQ7Kq7jZknj+2DSNB2 OwO8ltGvsmvAqekwSmEiXk9JUodnfNb92TgHNlMgquqe3KXgYMX7BHkKjz7F3g== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:51 +0200 Subject: [PATCH v3 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-v3-2-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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 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 Signed-off-by: Luca Ceresoli --- 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 01:42:35 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 9BFC437E2EB; Tue, 28 Apr 2026 15:31:36 +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=1777390298; cv=none; b=p/94L6j4Ez1iDtnt1+q6YHjqrPrPcZHS4W5ueUBde7G261GXNehy0YgE6guVAedhH9Smpd6o/AgJgIDhSeGsp5LOnxeC1mAKwVVSkBPHxohn9P7ZBE87KyVNBqMfPzP6vz/LGbw/Ymt81ebyuOE8jpcma3co4g7Si4zh+fXxVpY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390298; c=relaxed/simple; bh=kPrNHRf62C2dlcaoAnjYnpAmywjk6cf+ncxSJYhlzfo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s2L/f4GjpmwPDiEIxNxTPUQuxpRM28p5DUxAT0MMR9fsCOqYOatXlhaQCX35evP4pJSdieO7xVNm5Hrw7lQ/1qcyzT+t4slgXIjEhDRzBYmnGEOTiTh6o3xIuqK/Iso48o2isXDaKisvBQZ9dFvjRdswro+JQ/ydsRv+8aMZaTY= 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=EZJyWCu/; 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="EZJyWCu/" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 30B0B4E42B54; Tue, 28 Apr 2026 15:31:35 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id F173C601D0; Tue, 28 Apr 2026 15:31:34 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 532FF10728E24; Tue, 28 Apr 2026 17:31:29 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390293; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=Z/hooeKY6yKLHzI7T4mV8xmJLrj8AvP17ju7OwRia/4=; b=EZJyWCu/ngaAoeyOw0f/dX73DwGadNCbb+iKAXC48H7vAYdz4WoP9M71ECOB5aNson6Wn+ /SStfy08g1FaWyK2DdQtWdxf2v/Hh9O1xTrjY9aFsobR/DVwQJ5IT+DljXr/U0VxTbJUB5 5MiKhLrD6Bz1z+7osvFoxRCz/Mwt6XPvDH7+TXp50evHX6d/cDeRUTAD+ABtJSrrSj9/1g Xx78IKmKp9WvOb2iHEXh2N9hpDaLAiltws8iIF3fqNuRIkVDlAsfE/Y7ZJMLQv6xD4mYQs uzBU+opjDNx5k+wlhdst9SCU5SmCMFSLbSNXhNrKMkpFlYnYqovXaQivmUTuXQ== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:52 +0200 Subject: [PATCH v3 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-v3-3-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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 Acked-by: Dmitry Baryshkov --- Changes in v3: - fix ERR_PTR deref when -ENODEV is returned --- drivers/gpu/drm/msm/hdmi/hdmi.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index 852abb2466f0..124dedc084ec 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -287,9 +287,13 @@ 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; + hdmi->next_bridge =3D of_drm_get_bridge_by_endpoint(dev_of_node(dev), 1, = 0); + if (IS_ERR(hdmi->next_bridge)) { + if (PTR_ERR(hdmi->next_bridge) =3D=3D -ENODEV) + hdmi->next_bridge =3D NULL; + else + return PTR_ERR(hdmi->next_bridge); + } =20 hdmi->mmio =3D msm_ioremap(pdev, "core_physical"); if (IS_ERR(hdmi->mmio)) @@ -383,6 +387,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 01:42:35 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 D29292DEA8F; Tue, 28 Apr 2026 15:31:40 +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=1777390304; cv=none; b=IqCNHRL+4T1h/T9OoGA/3b4xZtpXkGJ6qwKLIvRRZH/s6nM7wKKO6G4FPHsr37HCvsV9BhwCjq0h6qMogkuADJ7iTgLYOhl17CS0xyZbLndKVLmjspIotNkIYXvm3WN/ovU3KrxUTLQfcsvIwPNMtx8iVdFcuKx3incQeNriYZg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390304; c=relaxed/simple; bh=L0x8y9xGgw0PqpPEHV/w4d+6yN4OzTb63Hn8duLLjMo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nRilhYdN6PkEDdy1zJq38edrERup8XKarlZ0LzlBFtb0Gmq7I6A1EiDQYRW/0kXf0SofGG5EeKxkDE3UnfYCELU7y64IheWX527n+AOFQq3mg9FiDilK/h6S5sBgEzvKJyYMKprF2ovfCFsqLs37xedOPSn6jWpnGzPBhd3c/ow= 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=b8DzLl9g; 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="b8DzLl9g" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 7DEDE1A3472; Tue, 28 Apr 2026 15:31:39 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 52458601D0; Tue, 28 Apr 2026 15:31:39 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id D11D010728E23; Tue, 28 Apr 2026 17:31:33 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390297; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=EjLii+UVAxxUE1lRMJnRgBpuZnA4/R7NKW2C9QtWbBE=; b=b8DzLl9gTG1JT65zLcbVq4R71KdFvjxRWNrzmpI0bttBQqIprm5sh+gU2uu8XtKDRt0Epo fBjPRTsL/mTA1Bk1Rb/OxENx2XLmGVSN9Lj5bofvQh095I6lRyAdbm13Y4QH3gT2RSeJ27 Zdqxl8iSoKNhobWAEtbKrriFhY8+vo+33E8teDVmcL1I5uHRpOsZamLrT//Yq6Xxgn/mwK 1CTcx1/3XlFTR9owSKbcMg42RQ9J4+MtYXkMChUDbn6ygsGPiNvCdsNEQA9vpd73AhUhb0 HyXJ2JWyURD2BQ8t5LzQHbfn30OQ/xWgkX1tsWvHOE7qBDpvRySEa+fSpTuaGQ== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:53 +0200 Subject: [PATCH v3 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-v3-4-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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 Wed Jun 17 01:42:35 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 3D8743803D3 for ; Tue, 28 Apr 2026 15:31:45 +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=1777390308; cv=none; b=EuXfWOXQHTMCNPpGX69EQ7ibM9m8BOPMNMUEwMS2Iuhv1Yw1avxi3DdRIcK4bw/M2vYug9EuRsDvpZIjwcImDP7keYeUCbywaeC6m2ZUUogac/V3LDFtV/iSPVvj4JdVNXRLDtWI3wSaBmqXKwPHvV6jo/vBkcIoOZhQs7JyE0A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390308; c=relaxed/simple; bh=kU5W7BmCPn+VPYARcDjCn7r7QzOzW+o2hPELB6tiJxQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=APn7ECnJ9Q4Yv03MH3snx4xGg2O3WACXARtYIsEgiqmoRcEjm57hX86MEOtasne/IKTojtpHQ3+gTxotQUN3ezdP40wKcZ1L97ZGVM1F42GVfFAUZiu6xnoVWtcxNvoIY3gyjTy1w7EbB+lkE8nIfONaDnTeZKDQv1HoodssMi8= 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=NNAJv6nW; 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="NNAJv6nW" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id EA5BE1A3471; Tue, 28 Apr 2026 15:31:43 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id B7F53601D0; Tue, 28 Apr 2026 15:31:43 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 1CE8E10728E27; Tue, 28 Apr 2026 17:31:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390302; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=CNAywJbD55/79Kay7v4Z9jjJDlDuDprtAGni4uyb1B4=; b=NNAJv6nW5Qz5+LsU45maM5SIA9PGVapKt9FrrakFRoXfbzXyq2ZlAu8NB0zXKYA1NjX7WV 0B3kYHu8KGhNRyiUtROhz7NvCPUwKd1JgD9QB8oBc+t8YoYgyaum7pyVpJxYicnpPv/cln wMm9xoM5Hh4UDufI7UKS5PosJ2scqXIdoDVDtwdJNMn2PC7cAQ9DjvmlDh/hiNtOdFEobG PbV69xbMVI0DIhH1Wwc+X+LkaDYqX4LLGPa2QQTfM0e0mbgDPo/r1kGDqEnNqjJstukG7H aHrp6qZzk3XP0ulxJt644hYEkkX5d156A7xi10JAQZPIKTFeW3HBlWppDHVbGg== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:54 +0200 Subject: [PATCH v3 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-v3-5-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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 Wed Jun 17 01:42:35 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 72B9734D382; Tue, 28 Apr 2026 15:31:49 +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=1777390310; cv=none; b=fMlTzaiF2p1nuzhnq21vIVt+pp4EBNFvK1BCZQwFh/ZyEue66igjkH0DfjUcUFNrHYcm66C2JpyBrdrKupAwMNeKD5cph5XAJMGTv/15yZGh5uDVrMgPpwPWe6lAgsSe7L3Es0AX8PCIDaFuTLrkufNZw7VDGIMYQOXahBYh1W8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390310; c=relaxed/simple; bh=P+ybbR2JCX5P3ToxNXc4BQOIlQX42qMh7LwK2rkO8kU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KKuISZucQ8H+CQXSuqPGPG4+IUtRJPZ1PB0/R3ssXLWAz5g/vDnpBZvmJD+DuyYTGUs1mSuTCxd/IwpVOHYobJGmwam7R3AuvU0viFm6Ij6Yx3GUpgq4KlWOA4yQVCy7WM40b9ldFP8Df9rJwOFq971Q21Sf33S6/fQ2cXvT7sU= 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=AVztzYi8; 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="AVztzYi8" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 2A4FB4E42B54; Tue, 28 Apr 2026 15:31:48 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id F272F601D0; Tue, 28 Apr 2026 15:31:47 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 9E00210728E29; Tue, 28 Apr 2026 17:31:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390306; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=p2/Y7roARxFkweio2HkVO8IrTHGmO9nhgwGPDGzMLOQ=; b=AVztzYi8ovBH4Uwj4cMbsl1ePLmEHC5F5cXWkqQ9YWK2FwysTik9Bujy/DxlSJH7HvzKPT 1CHUVSlge3Z9/wI0OJpzXUcj5ZJVbCQWaYQaIbohBDcaciaYgt9tH/aGWUj9v8BI3bE5uz k/69Drt5aZjcvVgp+3vjHFun69Q7u4IiE4aFH+Zr4n2ErukDAyQfbPGoKWg4i9mQfcdPCz iYE5UZTQ3H3xIRw3LWy3HkWvx9WXRrt1jwtG54S7d21+XLB8rFyHugOOpGa1G4FDuto19J 7OqR7+6MYavTpV+rC58NF2lodsES4F4QFwg1ODuUh9duEkzkeBHRqqrt1A3ngA== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:55 +0200 Subject: [PATCH v3 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-v3-6-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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 Wed Jun 17 01:42:35 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 BA29F3195FC for ; Tue, 28 Apr 2026 15:31:54 +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=1777390316; cv=none; b=AHvEOYJXs2ih0E0C4wUvHNVYi6b3NB3NtCzSLvW44IiBmd7LS5yX/HuylY/4S+ZHyefgStvn4ubZ+dpClBHUv6dGaghHOqviDyl1TvuRM/FnJaF0Om0lHmIhIOEUqJixlPHoJtQAFwcuMivTWB8SSgE/ALeaymswvkWFNSBxnqM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390316; c=relaxed/simple; bh=egJWbWYiMv76eWAr6DTbvGsd4Kf5Sn0T33rsJRhBOrs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=s6CjmpF7yFiuBu8bR/7uxehW1u40o34SkpezqFjPOsshrSR19Nxm779MednnY0ZEVE8MxgOc9isNuJHPrhC6s7Jc6LsJrQVk3MpLzhgOBoHpm3nDtAjop3mtZaMo7RR3+ox3TXQA3zBpgXmLmyoRSPxCSnlcmrxJqRArndRiTi0= 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=yxeoqSF9; 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="yxeoqSF9" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 927F71A3471; Tue, 28 Apr 2026 15:31:53 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 65C4B601D0; Tue, 28 Apr 2026 15:31:53 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id B918110728E2A; Tue, 28 Apr 2026 17:31:46 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390311; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=T2up0nNcnVaU0yQbv4uPCscdyC0ZWVrNHuUZWb1EmZw=; b=yxeoqSF9K+Q4fliOa+s+bFBj4JFowTFcmRj4GKKnDfmuvener9LSBbgLhZwiPJW8hLR0Bj 5IZqW7V61auRDBJpl30ZFByIdOFfeZHqFuf0si3vLFbDD+d/IUiDKWlGYse4jTHGTgnbMt oJrMaUmAshs+UpsG8iOH3HwUsgvQvxYg0fVSlBXFskXhmfOH7zfM5W8WE13qLrtubBOguP m2A7CCmjBTSairleSamceBDSt9tiQ/ivPv7l1MMWFM7gF5iR5dqBYb59yNSz4bdNrP5jjd nnWmyzp0DfbcrSy6cZvp4hAn1KgzDswU3WcOM1Td6rqcVLxHZjt1PUuNfwU7uw== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:56 +0200 Subject: [PATCH v3 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-v3-7-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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 Wed Jun 17 01:42:35 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 4F1F22C11FE for ; Tue, 28 Apr 2026 15:31:59 +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=1777390320; cv=none; b=bL9DUPyecuoZX+UZETJv98lBQlhtAKORo6pKt4NDpvf7IbcRv5MH6i5CzAGK5A2P+revNqq8fBUr5XuZEN1Z+V5Rjsew9pRvLN7eEMOAz8MWV+MTrrs8/JStJmW3Fm8HUYKgvVTO3iqV1hxR4P1sy2walj2X3GoVyiwwEGUAe7g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390320; c=relaxed/simple; bh=f9XKXrYthfirZFTdXChafpfmNCoRCArrlrEquMevmuM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PiiS3sQrpKCm0E4Gcy0Ed8CWM4lajzN0zNF6x7vNlcdSRfcu4FPH79s/jF6ddtNo1TCcSVQXGrvPDhdXIcCdUN5sRt5bQa8fjdBYV6ZY4LOcjVH9TZG/qnJpdMxeRwtBYYTb48LwRDhZMMgwTCNApoxGgSGlxoNkhREujwsYSfU= 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=nfq8as+x; 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="nfq8as+x" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id B4262C5EF12; Tue, 28 Apr 2026 15:32:41 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 0C116601D0; Tue, 28 Apr 2026 15:31:58 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 4D0E01072861C; Tue, 28 Apr 2026 17:31:52 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390316; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=e4R0jvf1mGByt5z9p68KVY9CzHvtudNHS3mHJr4mzzA=; b=nfq8as+xoUh70/n2R9Tc0iT+BXi8uKSfHxPT1/gI+IKLCoU0C5WW2aE9N4cUdokLSHjmom q0ZHN6gpcMyFHvdB24m5VVGp6FbyPSONUIkYDB208nGYODtXB+rgc0ZmCSf9PQjTzz2Smr dOMxJk4B8I5hxxGIv0yxLt3wB3KcxXOVeFtXe/YbcJ7Tc5Dhpa9gmKrHFbby6lJBX5/uwH 1065s3CmH41N5ATLPbkKqO4/+t+0apmReqAYSqpiPdXpp3UbkKLSRe4ibtBOXWdXDRL7Bg k6/trvZ4BMAH0uLKB4zFlCLl5aAI5LTuLIZClsHoEzgcwrnfNGpxoZYnowUyiQ== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:57 +0200 Subject: [PATCH v3 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-v3-8-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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. 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 --- 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 6bd76c1fb007..3c516551e482 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,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 Wed Jun 17 01:42:35 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 BB3F12C11FE; Tue, 28 Apr 2026 15:32:03 +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=1777390325; cv=none; b=cJXJE1wYhqdh9xIAKVTrDU6IQKonfw/J8wyhcE3aItFjOE60rz1sLGssHK9AYSFBbvKafZSSFzBVRQbrhoEpPA72AtzrACmqqTuubeVTqGZ/jbulPNSfrGUILPYJekMX53FRgRQpqsgc25Xvaft6MRr/UHJp/t3qoHpCb9ow6HI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390325; c=relaxed/simple; bh=0mm4WgmUdA0yQi9nDfCBDMs+V/5BLUzfuWev6p9ZvIs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WKV0/L5WOjvCoGmWmpk0RJO7Fqsiy5Dnrrazm+7M8Yf2wGkQmiAKL+0TEotemzLMVe++58Amu7go8hiC9mZC34HrAnmUi7bUJsyAfNs2gEcqrF3NOE3MNWRQSFtPmi06XChb2UCrSKorKTnOvUg3TXo/L2JdoCIzR4KGDR1VDoU= 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=fePiIdJS; 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="fePiIdJS" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 81E134E42B5C; Tue, 28 Apr 2026 15:32:02 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 55473601D0; Tue, 28 Apr 2026 15:32:02 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id E1AA210728E18; Tue, 28 Apr 2026 17:31:56 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390320; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=yUEV9MYSt3pHOUbVC0XEstJh+n5Nd9x9JzYSEpAeTFA=; b=fePiIdJSEIYXaxtBJpSc6+bYGjNJSoZUCoxa+WE7erM4o3wtCXzN6Xoi0BZhagzWXDjut6 WklTsK7h1pWgAUyC1ON8fVb/S04tLb7jRcAFz5U9IK8nx/80HlernHWWBwUUvn89wdpPiR 2ocNhQF19Opo+3JNCVxJbXSW+nwLwEn9hpn1UFATBlF1Xw6Ws+1icEtoKEkChN08QlXTwX 8ZMXoziP53qsdjlFLpFYHbSm76avbDJ3Mj7X+Exot9MPfd+1K0ZfNNlGnl0XLHA6Vy4p7P AOdrsLgGqM5hHcgJIxSoKv6E0VYlB+PrGQ89Uf0irZ2yY9PiwV0NKfDFyfwVcw== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:58 +0200 Subject: [PATCH v3 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-v3-9-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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 Wed Jun 17 01:42:35 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 4B00E31E82E; Tue, 28 Apr 2026 15:32:08 +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=1777390330; cv=none; b=XtQfHznkS5isFoTm8WRIYkxfzaO/T1pmK/tKcA9YH3/4bGN4IdrWefIk4IPGRyS4s9kaKoUOnoaMmXv1oivJW+OrGAqAuYSqkodbrTIYcPEjtVdLnExV/RJU7t+H+YtT1at8W4B5EzwGuYeUEZyABnGrn2tyM/j0lTVa3wW200k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390330; c=relaxed/simple; bh=NFnes9hPw9+YZGzpGmpbzbNSp5KDvjc8VFMay/4D+Xk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qqwCqblKG0SjTzunyqmeKv99zFV+2a17aNn8CUccHCx9pjT/swdgqnxrfUbtSJgfNnH1E4ZybUyuOQ+4t+Tce4XAqsOZf/oWsz3+llC/M25leb4ueiRLBLQzza9jFnWSKr1PagmeoddYMG6c2oNe59+9teoPP95Vcx4Flsin+Ks= 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=BYMXXYkJ; 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="BYMXXYkJ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id E5F161A3471; Tue, 28 Apr 2026 15:32:06 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id B8EA9601D0; Tue, 28 Apr 2026 15:32:06 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 21C8410728E23; Tue, 28 Apr 2026 17:32:01 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390325; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=cXFW+HyurNWz3ETP7aXjiecln1l4BuLQEFH1wXf1WXs=; b=BYMXXYkJkQMhYhtVmqzk060bU6GZcvRgSzw5iiSGTYkXSn4HB7DiU8MSN+Y76eccn+kAts oCh+Oye+xFQ8yzJlKDvS+7fMAiOz8p8pGdZY23Yd4MphB+TpSTiE6z4V+3uLbtvDUyQ9Nm NR7o766tASQKAhQTLTU4MH4gI79PvAc97iySBXtQaM8NEc70Zn5shqKLVxsatAW4oylptb VwQoPNkGh9cgYXF/Qe1mIrHMrPRcY8ks3zXlrhpLEWbNJ7h4C2xoJPPFDoOieLbsg0iSlk Jdg3T3JH6xt8FC2UO9J/PwjSyqyX9tRd4HV3/D50rSHjIzlzjt5gvVvcpf5PQQ== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:30:59 +0200 Subject: [PATCH v3 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-v3-10-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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. 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 --- 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..c5aa236d6b74 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=3D -ENODEV) { + dp->bridge.next_bridge; + } else { + 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 01:42:35 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 11B9C37E2EB for ; Tue, 28 Apr 2026 15:32:12 +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=1777390336; cv=none; b=KvDKGC5VbXYkHZzj/wHwmJepr2Zy1pZgJUO111iv/pP972OEoEFL5+/B+Ty2VJnTFY9vFQeEn2YJE375Ipp/dqcSWywJzTvIRf9xcNIzjHHGjjLAFKRyWE799DfnAitdzVo9Orv3/JoIJvdCgerln6KlPtZoUGx0xbkRXOh5hoc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777390336; c=relaxed/simple; bh=iq7bihL/7bod5gRoSE+KZVggpv9ssT9oSFB32DKFN48=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=cMTH3qvKVx7zVzrRM2w75/MJGHvRnmQFQ4E5YSFTHWPLTofNZg3NT60Y+tL7uwiQp0FjKRes7hDO3DtSm6GrbG5PoQgsFrUkiajY80G/plZChP5dyd1OklNBZ+XXk6G1hPH4MQAibgT7oeszPwJVPnmx6x9uzY6H5jt7APxotdQ= 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=o5i2FGEw; 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="o5i2FGEw" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 4DBEB4E42B5C; Tue, 28 Apr 2026 15:32:11 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 218EA601D0; Tue, 28 Apr 2026 15:32:11 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id A595210728E2C; Tue, 28 Apr 2026 17:32:05 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777390329; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=pOOUC/6IIIksC8MXl8RMQVMT+zs6jAuaGxEXoJvROdk=; b=o5i2FGEwZ9J4xEw406YB2Qry69Hbl4ztwna6UxopLMtqbuwvDWWBvpduxVugwnP5SZysyI 32/TtKNdp//VVZlLckL5fkEMevwZC08FXZbPa5i01t9MLz2xhe8VUxy0SSdXvWrMylCV7N GJP9LCicRpK/x4FKlWOay3t40qh7QKMGb8OClKhyk+YsnqEs48ZrtxDTbmthmnGsMzmK1+ NJgUkaJ9uVpG3qpJZwpkB/RGhos3KKuJUiMzBYYM70DswRcB13ZIjTKTEDhwR+gpBBFity zlucVzBmy5EHsouy0WKJpkEOiVRbNBUJHPW6M/cU/B5pmBTFTNlRxqDj5NZ6xg== From: Luca Ceresoli Date: Tue, 28 Apr 2026 17:31:00 +0200 Subject: [PATCH v3 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-v3-11-a537b5567add@bootlin.com> References: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@bootlin.com> In-Reply-To: <20260428-drm-bridge-alloc-getput-panel_or_bridge-v3-0-a537b5567add@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 , Xinliang Liu , Sumit Semwal , Yongqin Liu , 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 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 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