From nobody Sun Jun 14 02:37:01 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 1A5DD3A6B67 for ; Mon, 4 May 2026 10:45:24 +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=1777891526; cv=none; b=ePAJpWuqYL+e1qvQ8gCEAlH9sX6C90VcLIjdXvVHHRdiZTV5K1+1/Of6TrBdEH+tG8ENhoqruQhvufuQPIiycysOe1mpJ/SJCGgH0ufyK9FpfjoxpBrD9EgEYt8ULzw5En0aCJuOhto82OjZBVC7+2KDBvYwprokI9YlFkS0FzQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891526; c=relaxed/simple; bh=sG63iQPGh7FPBQG0M1bmkknaJxpiP+qL7Vz2cEx1SII=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QSQW65GYr+S/b3gtBZY/jw+5u4vtKj61H1fgZiATaNn3jlDPNxzgv1rohHPne/Li6ZwJfTfBcLH1qz5JBoWZobnqydSJ8cq5DzXoNWTWnEz1zCtAUf5t2gERZkVGP/5RGjxFMt7QYIFQxOeOIhQ/STgQHmLnTqxJmjRbFIfP+Yw= 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=J1bP7p5j; 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="J1bP7p5j" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id 2B043C5D72B; Mon, 4 May 2026 10:46:10 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id C7CA75FD5F; Mon, 4 May 2026 10:45:23 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 302A211AD268B; Mon, 4 May 2026 12:45:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891522; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=klEnOYxwmyhP43dH3LhaM6WGup/8KCXunSlgbkKjiG0=; b=J1bP7p5jLRAg4yL8WnncjKCDTZOj3ZAmRZEkdaNKTsHWgSFlmnGYxSRH6NnxbcF3+mjzwB zTOaH9kSr/PP6nhe86m8Epojv57ra2ZTCBZVSldj38oAYD5+frkyg3NkGc5usfJBqZBMaD 90oULpBA4oX8S68g8mOgEXoJMf45WM9AUMFFdKconV/NE2c8D4RvI0eY4xEp4FWJl7dzx3 7sQmaW8+VZRLUf16TgKsoU83BaJf46ctk123nu78CwoUzTIwP1GxWMTWPADT2y85ramMjx LetAO3dfS8Ycrmi8Bj2QA2G5kyTA0QEtoPVIL7dTDmebjm/aEg285JChhzLaAw== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:04 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-1-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Laurent Pinchart , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 Most functions returning a struct drm_bridge pointer currently return a valid pointer or NULL, but this restricts their ability to return an error code 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 --- Changes in v4: - removed incorrect change to drm_bridge_clear_and_put() kdoc Patch added in v2 --- drivers/gpu/drm/drm_bridge.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index d4b3478258ec..6fb71de6d22a 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); --=20 2.53.0 From nobody Sun Jun 14 02:37:01 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 47BF93A7832; Mon, 4 May 2026 10:45:29 +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=1777891530; cv=none; b=bc7wbsyPUj5oV4+49R2fUpTaprOjsJJKGyJ2zfXReWJLld3ln7Emp+bzHIpgxdiZy7f+xmd4MDcc/SJ4EkdWkQXUFnbzUHjTQpsl13D2VucCe84sb2OeIEsFsYa2w/941oVQRjmaIwpX1c2UmZwlUh7bVCf12mGeyOHVSf+kMc8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891530; c=relaxed/simple; bh=/PSu0QbB+Or6kEs/8/SGZyN66OJf4toZGXcQHVPPrGA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=H1GxwDYQ3YUxbaSxK3/FDEbNF7U3TuVLSH5TuYLWpYUbII3zqF/i1Bam9VAIXZ+5UmC+/L3CiwKPxEbXWTjyKHt70XdqxylkIjng5spJQUeBv8m+rqviWZdpy4loMt2PzYdFq1ulnR1Rsq3SYfeAgxPB4NaG4XFjj45otK6rVGA= 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=ZFclFM8Z; 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="ZFclFM8Z" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id D3CDD1A3506; Mon, 4 May 2026 10:45:27 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id A66D85FD5F; Mon, 4 May 2026 10:45:27 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id D46B211AD25EC; Mon, 4 May 2026 12:45:22 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891526; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=tH42HPB39h3kBzbWcxFZWiKUrfGB04wlh6MH8DO2oSg=; b=ZFclFM8ZVj5OcXkOAEkp5XGwRnVuNqRA2Xtu8JR/kdU/M8oqWrz0ZkcF29QiCZcdEw1PwF Nf4IZGxdbzLWL3DsPJKitGzeHKjyYSfXBTXlzwHTmWiDd0JrUV/78O+rJ47zI7j26y0qmi 3sagPuskLsrnMgVWWgcsE8poS0nl/KVU45gkXFad1FKrzuISUsM8KNwAdl/vrtCH5JGRaH BEqge73vrjMcJMqd06QHwNnZcRLdHzoTxXiyqHaSB8kwPedsdjsKuhDw5wAvQ1stQ2+t4a TvvYl0Ctafh7lZLobVCaSk2s47RwyE3btYJOw+TX2oTBe5aD3HA0XPU6zoR19A== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:05 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-2-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 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 Reviewed-by: Laurent Pinchart --- Changes in v4: - update function declaration in non-OF case Changes in v2: - return the bridge in the return value, not a double pointer --- drivers/gpu/drm/drm_bridge.c | 41 +++++++++++++++++++++++++++++++++++++++++ include/drm/drm_bridge.h | 7 +++++++ 2 files changed, 48 insertions(+) diff --git a/drivers/gpu/drm/drm_bridge.c b/drivers/gpu/drm/drm_bridge.c index 6fb71de6d22a..01f9e0426648 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..31e11a360c42 100644 --- a/include/drm/drm_bridge.h +++ b/include/drm/drm_bridge.h @@ -1327,6 +1327,8 @@ int drm_bridge_attach(struct drm_encoder *encoder, st= ruct drm_bridge *bridge, #ifdef CONFIG_OF struct drm_bridge *of_drm_find_and_get_bridge(struct device_node *np); struct drm_bridge *of_drm_find_bridge(struct device_node *np); +struct drm_bridge *of_drm_get_bridge_by_endpoint(const struct device_node = *np, + int port, int endpoint); #else static inline struct drm_bridge *of_drm_find_and_get_bridge(struct device_= node *np) { @@ -1336,6 +1338,11 @@ static inline struct drm_bridge *of_drm_find_bridge(= struct device_node *np) { return NULL; } +static inline struct drm_bridge *of_drm_get_bridge_by_endpoint(const struc= t device_node *np, + int port, int endpoint) +{ + return -ENODEV; +} #endif =20 static inline bool drm_bridge_is_last(struct drm_bridge *bridge) --=20 2.53.0 From nobody Sun Jun 14 02:37:01 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 E6A5237F759 for ; Mon, 4 May 2026 10:45:33 +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=1777891535; cv=none; b=PJpBzsAweNwc3ZE3uO1HeyqTVOg5qvSn8FPDch8/hfDXRqcL10F3T1MuAcw7G4+eObnRziDX1bCYCrvg0U+vhs/Z8nN8jXbdD5DR+1jRm+Ynbf1KTC8zfHaifZsyKlRiL3Xq+VVIxHgDTDpAEWnam1wkv7xbchyz+KNwE07U4hQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891535; c=relaxed/simple; bh=SD9IFqQDJ2gKsleQewtuNbnBXZNTZkHUGVZF3NA2t4c=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IU6wZ68VTQ9Vne014gquAOmvK5x2MQiNQMkvMiaxtShOJV/UgaPh9dlhVPz8NSqTApucUIfE3neFml6Apy4VAZKsfI2rY71tROb6rGgRHDTo3NDqsmDa05G8/cjqJ2aK+dAhVxG40OWO5pPfWfbDQUUcFaVKfw6IedaUBWqdzqs= 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=SYxX8vGd; 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="SYxX8vGd" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 6FC2E4E42BBC; Mon, 4 May 2026 10:45:32 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 43BC15FD5F; Mon, 4 May 2026 10:45:32 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id AB0D411AD2689; Mon, 4 May 2026 12:45:26 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891530; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=PvxOn44HUNqP2XkLqz8KBgE9MvnmuHtx98MyEiUPfeI=; b=SYxX8vGd3o9wNpfvXFQd4FWz2tCYF7bulAhbeFm07B1WC8f3HANvBhhED5gVtzjCF1M5y2 4oFLeUUQ1mmfWreEJj9pMrYtMbuSu5nYTiw6RKnY6hONcczzCRVDghRGQfgMsvwH6nYW5/ sLzIBCgcnouuNCg+vXYAApvXn3T6i1uEzDOPFRNGXebBg9QClyicCsWXNUecF/UJr8FNwO wlfx5FnWxMUKmqKzRdv2De80OZjcSjz9UFbOmVkjFLkN9dJ6DR88e+yBwbPAPialg981x0 qM7BTPJKQnqQjZNiFimQ/VAAIkAufMLo53fWS3aHqCqeguaKHNlTfDtiEKoT7w== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:06 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-3-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. Signed-off-by: Luca Ceresoli --- Changes in v4: - ensure next_bridge is put on later probe failures Changes in v3: - fix ERR_PTR deref when -ENODEV is returned --- drivers/gpu/drm/msm/hdmi/hdmi.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/msm/hdmi/hdmi.c b/drivers/gpu/drm/msm/hdmi/hdm= i.c index d9491aac1a89..57e85ac38059 100644 --- a/drivers/gpu/drm/msm/hdmi/hdmi.c +++ b/drivers/gpu/drm/msm/hdmi/hdmi.c @@ -285,9 +285,14 @@ static int msm_hdmi_dev_probe(struct platform_device *= pdev) spin_lock_init(&hdmi->reg_lock); mutex_init(&hdmi->state_mutex); =20 - ret =3D drm_of_find_panel_or_bridge(dev_of_node(dev), 1, 0, NULL, &hdmi->= next_bridge); - if (ret && ret !=3D -ENODEV) - return ret; + struct drm_bridge *next_bridge __free(drm_bridge_put) =3D + of_drm_get_bridge_by_endpoint(dev_of_node(dev), 1, 0); + if (IS_ERR(next_bridge)) { + if (PTR_ERR(next_bridge) =3D=3D -ENODEV) + next_bridge =3D NULL; + else + return PTR_ERR(next_bridge); + } =20 hdmi->mmio =3D msm_ioremap(pdev, "core_physical"); if (IS_ERR(hdmi->mmio)) @@ -367,6 +372,8 @@ static int msm_hdmi_dev_probe(struct platform_device *p= dev) if (ret) goto err_put_phy; =20 + hdmi->next_bridge =3D no_free_ptr(next_bridge); + return 0; =20 err_put_phy: @@ -381,6 +388,7 @@ static void msm_hdmi_dev_remove(struct platform_device = *pdev) component_del(&pdev->dev, &msm_hdmi_ops); =20 msm_hdmi_put_phy(hdmi); + drm_bridge_put(hdmi->next_bridge); } =20 static int msm_hdmi_runtime_suspend(struct device *dev) --=20 2.53.0 From nobody Sun Jun 14 02:37:01 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 3766E3A8FF6 for ; Mon, 4 May 2026 10:45:38 +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=1777891540; cv=none; b=odLdp+parf7eBFByIaFZGPBjcuQ9LTp8m3xc/S58Sxp72SlJ3jjGqtVin1YIyKLL2mv9cfEm8zmpdgFL7Pxf0KSVkTppM7B/UqXdRH8iK1By6ufdCMd3yVmUOHguF5zOs5z3AnOVKTQHZeZ40P7B1UO/j/htJRetHW9sIMBvLdo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891540; c=relaxed/simple; bh=L0x8y9xGgw0PqpPEHV/w4d+6yN4OzTb63Hn8duLLjMo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=rsKiGOCZCFaDbhTyW66ojNY458HDQKU2YEMHy6OE8PY2HHP2uxCK0puh4kLFTYXsocXO2cMwMAtS8tT33kRjt6yG0vv19rhBySOKmKzvU0Zm25nON/t8dZ5sO6z9YKJ1fWb+RMCZjx2NhhTZFn5/pxdvxVpfYA3CM1q2Y5os5w4= 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=ByAQ6Hp0; 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="ByAQ6Hp0" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id DA3541A3506; Mon, 4 May 2026 10:45:36 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id AE0D45FD5F; Mon, 4 May 2026 10:45:36 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 2923B11AD268E; Mon, 4 May 2026 12:45:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891535; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=EjLii+UVAxxUE1lRMJnRgBpuZnA4/R7NKW2C9QtWbBE=; b=ByAQ6Hp0CG/jTpjNN8dy81nP3/s/1sDrzZ8i5zmkMMsU2qDxXunnOLen0bbHkhoUb5ax1z 0kqfbWivocwLVEixOOvRHzVyyNG5jEifFYkKFFr6B2unQanfPy6Uce4yt+OP+Hh1aNWlel 2+1RhxV1GIFh4ELCm5QcpZTR8spon0Zl7ECzccdzSqpiWxmICOGi4+HbMd/Frnd4Iyj/4Q 7iCV2zUrg6Xzjc6mk/6+VQqfYiFu2wUBLw4G564szLey42RrQQFGXBG4C2T5cymWpkdV3c gRLW3TeQsVe/5bpfRKPGn9Gq2MM1Zb3n9tZIohSTxV2rVFx1Vp5jA4HoMYnAog== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:07 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-4-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. Here the bridge pointer is only stored in a temporary variable, so a cleanup action is enough. Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c b/drivers/gpu/drm= /hisilicon/kirin/dw_drm_dsi.c index e80debdc4176..ab3cd309505a 100644 --- a/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c +++ b/drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c @@ -778,17 +778,16 @@ static int dsi_host_init(struct device *dev, struct d= w_dsi *dsi) static int dsi_bridge_init(struct drm_device *dev, struct dw_dsi *dsi) { struct drm_encoder *encoder =3D &dsi->encoder; - struct drm_bridge *bridge; + struct drm_bridge *bridge __free(drm_bridge_put) =3D NULL; struct device_node *np =3D dsi->dev->of_node; - int ret; =20 /* * Get the endpoint node. In our case, dsi has one output port1 * to which the external HDMI bridge is connected. */ - ret =3D drm_of_find_panel_or_bridge(np, 1, 0, NULL, &bridge); - if (ret) - return ret; + bridge =3D of_drm_get_bridge_by_endpoint(np, 1, 0); + if (IS_ERR(bridge)) + return PTR_ERR(bridge); =20 /* associate the bridge to dsi encoder */ return drm_bridge_attach(encoder, bridge, NULL, 0); --=20 2.53.0 From nobody Sun Jun 14 02:37:01 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 5C6053A7820; Mon, 4 May 2026 10:45:43 +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=1777891544; cv=none; b=t7QxwTaEglRXP9lC17qJhdIc0EtMY+QX/fyVF6BA+nYXAOYJE+Wgme0L7HlosMD1lWz/Zrm/MFPqaFFjh0BBR8SWbJaiBlw3tNeclzRyhTIgpOIAec7QwTPPAp9kiq0og6/w/AHH6qTP42a1yZFWjwychb6QNF73AechGKN1Gic= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891544; c=relaxed/simple; bh=kU5W7BmCPn+VPYARcDjCn7r7QzOzW+o2hPELB6tiJxQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jr5w5pwvkHe7NUud2nQfDs6vucSAE4abVgFrBIOQhKDWnCj05QgmfW48lixdXOZhdmMVHpRQuqsydelII9dw4+i5a231D7yGspZutjmagbV04uEnn8WjrkIh73qm/wyJ+iNh7o/6ul9HKRnnGhoDFlzWBJY12Omn4citee64VD8= 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=XN3WAsM6; 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="XN3WAsM6" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 0DA641A3509; Mon, 4 May 2026 10:45:42 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id D52F45FD5F; Mon, 4 May 2026 10:45:41 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 9237F11AD2692; Mon, 4 May 2026 12:45:35 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891540; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=CNAywJbD55/79Kay7v4Z9jjJDlDuDprtAGni4uyb1B4=; b=XN3WAsM6QgxLZFxSoxG7hsghWn7vm1zyB8rv/Xi/4J8Q8Wowfj24kudrAJiEENKa+9AQz9 +GsrXrt1Zy9N2d9lcG3S9Z54q438haR6R2sC/SMPsF+ZKGOAeLc4wErG4Z262hJmhOm9ad 1+MC/2NLvapEeS9d/dVtrugA1jHFLLDlhEJJPwMb3MupBMoahhbGDemPjh6HcjTbTwgmJT o5NTRp8RS55wUPTXpob1gRnKWdo6o8fZ9eehrurFVFpteyGL5lquCDoVYOuYuBkOdmnTES VsU0SS/hHP6/sUaer9z/R0+CTG14xxwoP9LQszmnRiXHtJEoZFdrayiVr+oujQ== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:08 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-5-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/chrontel-ch7033.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/drivers/gpu/drm/bridge/chrontel-ch7033.c b/drivers/gpu/drm/bri= dge/chrontel-ch7033.c index 54d49d4882c8..a237c65ebd69 100644 --- a/drivers/gpu/drm/bridge/chrontel-ch7033.c +++ b/drivers/gpu/drm/bridge/chrontel-ch7033.c @@ -199,7 +199,6 @@ enum { =20 struct ch7033_priv { struct regmap *regmap; - struct drm_bridge *next_bridge; struct drm_bridge bridge; struct drm_connector connector; }; @@ -215,7 +214,7 @@ static enum drm_connector_status ch7033_connector_detec= t( { struct ch7033_priv *priv =3D conn_to_ch7033_priv(connector); =20 - return drm_bridge_detect(priv->next_bridge, connector); + return drm_bridge_detect(priv->bridge.next_bridge, connector); } =20 static const struct drm_connector_funcs ch7033_connector_funcs =3D { @@ -233,7 +232,7 @@ static int ch7033_connector_get_modes(struct drm_connec= tor *connector) const struct drm_edid *drm_edid; int ret; =20 - drm_edid =3D drm_bridge_edid_read(priv->next_bridge, connector); + drm_edid =3D drm_bridge_edid_read(priv->bridge.next_bridge, connector); drm_edid_connector_update(connector, drm_edid); if (drm_edid) { ret =3D drm_edid_connector_add_modes(connector); @@ -275,7 +274,7 @@ static int ch7033_bridge_attach(struct drm_bridge *brid= ge, struct drm_connector *connector =3D &priv->connector; int ret; =20 - ret =3D drm_bridge_attach(encoder, priv->next_bridge, bridge, + ret =3D drm_bridge_attach(encoder, priv->bridge.next_bridge, bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret) return ret; @@ -283,15 +282,15 @@ static int ch7033_bridge_attach(struct drm_bridge *br= idge, if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) return 0; =20 - if (priv->next_bridge->ops & DRM_BRIDGE_OP_DETECT) { + if (priv->bridge.next_bridge->ops & DRM_BRIDGE_OP_DETECT) { connector->polled =3D DRM_CONNECTOR_POLL_HPD; } else { connector->polled =3D DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POLL_DISCONNECT; } =20 - if (priv->next_bridge->ops & DRM_BRIDGE_OP_HPD) { - drm_bridge_hpd_enable(priv->next_bridge, ch7033_hpd_event, + if (priv->bridge.next_bridge->ops & DRM_BRIDGE_OP_HPD) { + drm_bridge_hpd_enable(priv->bridge.next_bridge, ch7033_hpd_event, priv); } =20 @@ -299,8 +298,8 @@ static int ch7033_bridge_attach(struct drm_bridge *brid= ge, &ch7033_connector_helper_funcs); ret =3D drm_connector_init_with_ddc(bridge->dev, &priv->connector, &ch7033_connector_funcs, - priv->next_bridge->type, - priv->next_bridge->ddc); + priv->bridge.next_bridge->type, + priv->bridge.next_bridge->ddc); if (ret) { DRM_ERROR("Failed to initialize connector\n"); return ret; @@ -313,8 +312,8 @@ static void ch7033_bridge_detach(struct drm_bridge *bri= dge) { struct ch7033_priv *priv =3D bridge_to_ch7033_priv(bridge); =20 - if (priv->next_bridge->ops & DRM_BRIDGE_OP_HPD) - drm_bridge_hpd_disable(priv->next_bridge); + if (priv->bridge.next_bridge->ops & DRM_BRIDGE_OP_HPD) + drm_bridge_hpd_disable(priv->bridge.next_bridge); drm_connector_cleanup(&priv->connector); } =20 @@ -543,10 +542,9 @@ static int ch7033_probe(struct i2c_client *client) =20 dev_set_drvdata(dev, priv); =20 - ret =3D drm_of_find_panel_or_bridge(dev->of_node, 1, -1, NULL, - &priv->next_bridge); - if (ret) - return ret; + priv->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dev->of_node, = 1, -1); + if (IS_ERR(priv->bridge.next_bridge)) + return PTR_ERR(priv->bridge.next_bridge); =20 priv->regmap =3D devm_regmap_init_i2c(client, &ch7033_regmap_config); if (IS_ERR(priv->regmap)) { --=20 2.53.0 From nobody Sun Jun 14 02:37:01 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 AF1803A783D for ; Mon, 4 May 2026 10:45:47 +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=1777891549; cv=none; b=Wqfw//ICvIgJne+WaIWqqtvjHIKlcnvNZAB8sHwENPnF0vCWRVzf+lvBI+5gEzsxZGvUtRYe/pDN1mrzUx+xnBcoD42m4SRAp4MqZUkm4kV1R2LJc+Ztykf6Ba4INZIFHrjckJxAj5OL52Ltz8GB4pKCLrkvvBKnRXDb8x/RqC0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891549; c=relaxed/simple; bh=P+ybbR2JCX5P3ToxNXc4BQOIlQX42qMh7LwK2rkO8kU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nnBRg+aXUkn8XmDo/YjeeTdkKT5JfFkIZwyx7mjKnPqR7QjV1DEL6hUVggzyTxFyv29BpKCaGRLTdTyiexw0RRszU+vg+RT+yu2tEpcgzjyOJhE06t2ifSfVcyksDaNyGPDUS6dmNBENles1OvBAzdBDyxsviWcE7GMuk5+KqzU= 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=ic4Gw11t; 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="ic4Gw11t" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id CDECBC5D72B; Mon, 4 May 2026 10:46:32 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 7A37C5FD5F; Mon, 4 May 2026 10:45:46 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id DB74111AD2694; Mon, 4 May 2026 12:45:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891545; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=p2/Y7roARxFkweio2HkVO8IrTHGmO9nhgwGPDGzMLOQ=; b=ic4Gw11tVoBzcev859MKmJFk5XV2yg0UzV+TedTO8QFMN72e3t7NptuwQg+ipx2Xkz2G9H CFphTJUmCUaqx3PVmoiNsU6LrjAl1eGxvJOWJXOt9Gp+6MH5WomSjTjGEExiZFy66gMQlk pf6AhK3JZiosah++zVbwjF1vMuodVnncYDooovbLKUNUmb9yr0OaTWhve17XqSwoL0wc5n hrM/yHWpAhRP1vzRsipUJBtH+mEGqhh1H26BliwBmnILOj/qBwN7QxIf4aTke7dugT1jeN LH7JEE30PEmNFJwfUMJt4p7dlx+SWCVqrPrwyJHZS9WFxwSjC3SkOIW+PO+zVA== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:09 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-6-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/b= ridge/lontium-lt9611uxc.c index 11aab07d88df..9427cc2358ae 100644 --- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c +++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c @@ -35,7 +35,6 @@ struct lt9611uxc { struct device *dev; struct drm_bridge bridge; - struct drm_bridge *next_bridge; =20 struct regmap *regmap; /* Protects all accesses to registers by stopping the on-chip MCU */ @@ -284,7 +283,7 @@ static int lt9611uxc_bridge_attach(struct drm_bridge *b= ridge, { struct lt9611uxc *lt9611uxc =3D bridge_to_lt9611uxc(bridge); =20 - return drm_bridge_attach(encoder, lt9611uxc->next_bridge, + return drm_bridge_attach(encoder, lt9611uxc->bridge.next_bridge, bridge, flags); } =20 @@ -487,7 +486,11 @@ static int lt9611uxc_parse_dt(struct device *dev, =20 lt9611uxc->dsi1_node =3D of_graph_get_remote_node(dev->of_node, 1, -1); =20 - return drm_of_find_panel_or_bridge(dev->of_node, 2, -1, NULL, <9611uxc-= >next_bridge); + lt9611uxc->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dev->of_n= ode, 2, -1); + if (IS_ERR(lt9611uxc->bridge.next_bridge)) + return PTR_ERR(lt9611uxc->bridge.next_bridge); + + return 0; } =20 static int lt9611uxc_gpio_init(struct lt9611uxc *lt9611uxc) --=20 2.53.0 From nobody Sun Jun 14 02:37:01 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 AB9903A7832 for ; Mon, 4 May 2026 10:45:52 +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=1777891554; cv=none; b=ZftuKq3nrS6W8gOm4j0NUy493dVuPM0uROmErKc4YxyzwHZBdlqMCWAoXP2iSBMUHQ3KVzmxy1MGVqRBi2oeQne3b4hD7+ovaPgNrs6E/uEiTmopPCpg5gsAdWnRbe8CjPr6tSjYHII8i7aNeTILa8CBoY3drtskzTL2VA80ZHE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891554; c=relaxed/simple; bh=egJWbWYiMv76eWAr6DTbvGsd4Kf5Sn0T33rsJRhBOrs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=CAgdnGMe8Hby71koCNSQQgHBFMr9bN60XK/qtanBysgBB9tfC+MpOdbJAH6gZEYQc4bJDkKMh7ea5MhMYpf8LBOFrSgj8Qy9dodNjlJqlsvOIQE1iv6u0WL3LR9s+226H9NvMaPg0YDJWagP96iRuVPD1HOCkQZW+94vPIQYZkE= 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=mM0iOGf7; 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="mM0iOGf7" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id 31B1C4E42BBC; Mon, 4 May 2026 10:45:51 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 05EDB5FD5F; Mon, 4 May 2026 10:45:51 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 75DCD11AD25EC; Mon, 4 May 2026 12:45:45 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891549; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=T2up0nNcnVaU0yQbv4uPCscdyC0ZWVrNHuUZWb1EmZw=; b=mM0iOGf7EAqLT6L2rvdBnDbzDeddR3CJkQhKK5GXWZuZahcsUiKmIAXZdihsAph11yaJsc A3WL32f8sLEuM5yJt0wXhhrGP+lcRFnPxrG/uSeAJ7WyaPLdjkASzCeO+2t+2wBDmPq5mz ZSOx43+DSjDy+/AyMp/WyPgKuaGnFmn3TYVbKCodH4AAwyNGPBEvyOG0hJjb3LHIlzsX8F FnkvWTKi2wl7GNKn3Q7ZLlHl4TT9DdYsrPlqzCddmbpB38o3p5ocso59UHbn1p76Kg5TpN wO5hY1sv4oDUpgd9zxGJ5nWTCwZ+Cn8kjxxCqmc6nuc/HS1e/JAwaTeC3mV5+g== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:10 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-7-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/lontium-lt9611.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/bridge/lontium-lt9611.c b/drivers/gpu/drm/brid= ge/lontium-lt9611.c index 4517aee83332..4b4418cc83bf 100644 --- a/drivers/gpu/drm/bridge/lontium-lt9611.c +++ b/drivers/gpu/drm/bridge/lontium-lt9611.c @@ -37,7 +37,6 @@ struct lt9611 { struct device *dev; struct drm_bridge bridge; - struct drm_bridge *next_bridge; =20 struct regmap *regmap; =20 @@ -761,7 +760,7 @@ static int lt9611_bridge_attach(struct drm_bridge *brid= ge, { struct lt9611 *lt9611 =3D bridge_to_lt9611(bridge); =20 - return drm_bridge_attach(encoder, lt9611->next_bridge, + return drm_bridge_attach(encoder, lt9611->bridge.next_bridge, bridge, flags); } =20 @@ -1058,7 +1057,11 @@ static int lt9611_parse_dt(struct device *dev, =20 lt9611->ac_mode =3D of_property_read_bool(dev->of_node, "lt,ac-mode"); =20 - return drm_of_find_panel_or_bridge(dev->of_node, 2, -1, NULL, <9611->ne= xt_bridge); + lt9611->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dev->of_node= , 2, -1); + if (IS_ERR(lt9611->bridge.next_bridge)) + return PTR_ERR(lt9611->bridge.next_bridge); + + return 0; } =20 static int lt9611_gpio_init(struct lt9611 *lt9611) --=20 2.53.0 From nobody Sun Jun 14 02:37:01 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 14FE73A6F0C for ; Mon, 4 May 2026 10:45: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=1777891558; cv=none; b=iwFbxwqgJkRm7xWJeglXv+auvgaFzOIqwqWpJTQRYOnnYs01OjPJVYSz1nJ77YIQUp1SJmKOk829c6RyYK5smABe1h+pBHy+WuN+C36QzFvP4NOP37yyD73K8D1VZ522/VQ1dW26W94Ud4UGYOKX8jZR5IfjDial4B3rIHWjTuw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891558; c=relaxed/simple; bh=beVERDwYP2ot7ZdziA2XLQqYeWC96PM+GrQFaBMQRgI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mqyh5h3cB0OdKqRB+yD+baAqkrw+n8/3OA3af/7Le8lNdw7phjuBAs7VMb2biPlvOYsATLztp5AsfRrI3LkZB/gvm00icxgVvXzFmYfVucmjrPKmxUnz0Qu6P8YwhNjeK+2vKdmMcojagw3RNwnOex+GmQGPOIoS9+siZGU9rbc= 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=udv6K9m5; 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="udv6K9m5" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id EA3FEC5D72B; Mon, 4 May 2026 10:46:41 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 95FFE5FD5F; Mon, 4 May 2026 10:45:55 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id D694611AD269A; Mon, 4 May 2026 12:45:49 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891553; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=7g3vKU4FJK3bdeL2wswg+c1U9GcG/rfgEqVyD7i/uyE=; b=udv6K9m5VyBA6hUWtGuVFWKNp8/AatoPvgc1zsqDqHLLjUNfeipryfUZqmWR4TNdHLe1Yt nR7cEpCucCf+Rw4o4dwBtufJ0lAacebWizgX1VtCnlCTFArIkRsugZ86VP4vSzoRehYGaQ r1ZLZGbkOQVMV9FifsjI64ESBLrG28P4ZAbMtzEgvfRj593P+YIWvx9yUI9vENIwt7Wi/z WhQpcCd6QCQC2ohDaH5UpVdEIibTbcLLJKzlDhJeHiPHNRKZf8g8ixcP2b4iAZseyckJDf BYsYdwcPk7EwIKK1F83wAEmIoS+2GM9t1YeL3KFc0SKguzELFcWcU6gbLOhXmg== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:11 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-8-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Biju Das , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Tested-by: Biju Das Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli Reviewed-by: Laurent Pinchart --- Changes in v3: - fix ERR_PTR deref when -ENODEV is returned --- drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 - drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 15 +++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bri= dge/adv7511/adv7511.h index 8be7266fd4f4..12c95198d9a4 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h @@ -354,7 +354,6 @@ struct adv7511 { enum drm_connector_status status; bool powered; =20 - struct drm_bridge *next_bridge; struct drm_display_mode curr_mode; =20 unsigned int f_tmds; diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm= /bridge/adv7511/adv7511_drv.c index f318080f1139..8304978535e4 100644 --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c @@ -849,8 +849,8 @@ static int adv7511_bridge_attach(struct drm_bridge *bri= dge, struct adv7511 *adv =3D bridge_to_adv7511(bridge); int ret =3D 0; =20 - if (adv->next_bridge) { - ret =3D drm_bridge_attach(encoder, adv->next_bridge, bridge, + if (adv->bridge.next_bridge) { + ret =3D drm_bridge_attach(encoder, adv->bridge.next_bridge, bridge, flags | DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret) return ret; @@ -1249,10 +1249,13 @@ static int adv7511_probe(struct i2c_client *i2c) =20 memset(&link_config, 0, sizeof(link_config)); =20 - ret =3D drm_of_find_panel_or_bridge(dev->of_node, 1, -1, NULL, - &adv7511->next_bridge); - if (ret && ret !=3D -ENODEV) - return ret; + adv7511->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(dev->of_nod= e, 1, -1); + if (IS_ERR(adv7511->bridge.next_bridge)) { + if (PTR_ERR(adv7511->bridge.next_bridge) =3D=3D -ENODEV) + adv7511->bridge.next_bridge =3D NULL; + else + return PTR_ERR(adv7511->bridge.next_bridge); + } =20 if (adv7511->info->link_config) ret =3D adv7511_parse_dt(dev->of_node, &link_config); --=20 2.53.0 From nobody Sun Jun 14 02:37:01 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 85A473A6F0C for ; Mon, 4 May 2026 10:46:01 +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=1777891562; cv=none; b=PjFTmUUZ+lr2SIPh8ofm3kd6VLDigCewqwZEZvbJOwjSWWSeeVulZLbv7i7CEtxCxUgL/ypfJTLLU6ETwS4KbJT15myIw55qvVQ5xeZ5CfTIkWUoQnB/xnzSJz2RT7d8G1o4Ozs8O38kWjIf8E9pQAa7WSsw6ibN/XMxoKFi0GI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891562; c=relaxed/simple; bh=0mm4WgmUdA0yQi9nDfCBDMs+V/5BLUzfuWev6p9ZvIs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WXNNejcNShny5NWawziiT0gOJZ1qNd5VRmGtkCdJ8bPgn/KCNmOgQKDXf+pHC4GzTIxUN+FEaMtNU+ao0Tv/8z1AUXVYxaXrVY+dwQvBx9gMI0Im+Hr0dG7cHMzzxNQskfqzFxr+8or39vO7T0rfOvuRjTJ6ssqFwLHTluZgFHo= 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=McGIlkQL; 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="McGIlkQL" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-04.galae.net (Postfix) with ESMTPS id CCE76C5D72B; Mon, 4 May 2026 10:46:46 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 7682E5FD5F; Mon, 4 May 2026 10:46:00 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 5C14611AD2697; Mon, 4 May 2026 12:45:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891558; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=yUEV9MYSt3pHOUbVC0XEstJh+n5Nd9x9JzYSEpAeTFA=; b=McGIlkQLxAaeShqBoEvdrTM5fFesioCNkCLtafyxwCYfTwd3EVgpNQ2nCqYGEYEM1Xhbiv rqBkN7qzsAOzABelx+a09kgKTj72VRZLeIIy80rAoKN0ZOnw5QBJOl0UqWdIcvLQIkBPHZ CaG9upRrgU3APYACR8lQXFKGNCphYc1iE9cxpVQpvFVo6rlxwzT9tUDg+VenmVpQsYEqMI sqnrp0Ry3YKXWJfvzpReE5UtXf9OkTjtc+cpHsmL4b5kQ4Toi8/VIq5pzwSqWE1+D4QNXH klxmCSmhB8bBkS25tR5DXZhARN6oxSCHdA+O1uw5+esIlANyzDswlXVdAczsWA== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:12 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-9-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. To achieve this, instead of adding an explicit drm_bridge_put(), migrate to the bridge::next_bridge pointer which is automatically put when the bridge is eventually freed. Reviewed-by: Dmitry Baryshkov Signed-off-by: Luca Ceresoli --- drivers/gpu/drm/bridge/lontium-lt8713sx.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/bridge/lontium-lt8713sx.c b/drivers/gpu/drm/br= idge/lontium-lt8713sx.c index 18fac6a46db4..cee485adf5e5 100644 --- a/drivers/gpu/drm/bridge/lontium-lt8713sx.c +++ b/drivers/gpu/drm/bridge/lontium-lt8713sx.c @@ -32,7 +32,6 @@ DECLARE_CRC8_TABLE(lt8713sx_crc_table); struct lt8713sx { struct device *dev; struct drm_bridge bridge; - struct drm_bridge *next_bridge; =20 struct regmap *regmap; /* Protects all accesses to registers by stopping the on-chip MCU */ @@ -458,7 +457,7 @@ static int lt8713sx_bridge_attach(struct drm_bridge *br= idge, struct lt8713sx *lt8713sx =3D container_of(bridge, struct lt8713sx, bridg= e); =20 return drm_bridge_attach(encoder, - lt8713sx->next_bridge, + lt8713sx->bridge.next_bridge, bridge, flags); } =20 @@ -537,10 +536,9 @@ static int lt8713sx_probe(struct i2c_client *client) if (IS_ERR(lt8713sx->regmap)) return dev_err_probe(dev, PTR_ERR(lt8713sx->regmap), "regmap i2c init fa= iled\n"); =20 - ret =3D drm_of_find_panel_or_bridge(lt8713sx->dev->of_node, 1, -1, NULL, - <8713sx->next_bridge); - if (ret < 0) - return ret; + lt8713sx->bridge.next_bridge =3D of_drm_get_bridge_by_endpoint(lt8713sx->= dev->of_node, 1, -1); + if (IS_ERR(lt8713sx->bridge.next_bridge)) + return PTR_ERR(lt8713sx->bridge.next_bridge); =20 ret =3D lt8713sx_gpio_init(lt8713sx); if (ret < 0) --=20 2.53.0 From nobody Sun Jun 14 02:37:01 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 E1CE73A6F0C; Mon, 4 May 2026 10:46:05 +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=1777891567; cv=none; b=fOLCHOCUSnapjBSBvtkFMMfPQ2vx5LZPr/GgVYTmlcMz+/pp8EprStA5J4ek2U5uPIXEuq4pCETT39tMgBC9GTH+gJF20R/lhGUfpEvqakJ4mg7vNgM91/hbmbxmDYy8362x8hkEWvgs6iT//Y2gYHxW9eB91XKqLPLUztZ8Z2M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891567; c=relaxed/simple; bh=V0PpqizMsJE0XxiMzPUaLJnSX9NTfojdytwyzgBadBk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WydsIczxQGCp6zkMWGRrZY3zOk/dgXvcffIqr5ytap74t05orwImnkop8Zjj2LVeSY55joeyvFBtnEwt63TtVEmtkNQan2VZS1knN7eWvi7PPHLmgr5jqN1vYVnVTJByB4M67rxzEaNZONJJEj2my+dr18IrPaUzkrlkkEKliuQ= 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=KP22np9Y; 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="KP22np9Y" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id AB15D4E42BBE; Mon, 4 May 2026 10:46:04 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 7E5985FD5F; Mon, 4 May 2026 10:46:04 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 26D8311AD2693; Mon, 4 May 2026 12:45:59 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891562; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=220IIHXE3fADhEmb2vMVV/+5gMB7YquHWvvizygnUgw=; b=KP22np9YDJWGU7WPx4i3+TOw3UIEDH6TYq3LFOZ27vc7MQ4ubUXWS1LERoJQTILhZhV9Z9 8tksgz5TQ5pCgVQeNnNhrZovevI3CKlUSfc8kyE9Rsj4kSdw7ZxUyl8RTcqX6nYXC46yi5 uiL5F5dwOovAnFMNkKy0ihUUDaTl8Mc11+Ll5Xi6vm0Zqwy+aMTa2R1tvO6bSuwX39e/Ji e1bUCRObvakQG6xU+amItx1RF6Q+lEDfbWCyLLwEVKT96u/LUIQQrskWyatX/9JHsXYJtM JwMfCx8tHfofSJyw+xuj1wM8NTScngYMAtB7+1RRzhRBvRa+PK0xGQfE+TpvYA== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:13 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-10-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 This driver calls drm_of_find_panel_or_bridge() with a NULL pointer in the @panel parameter, thus using a reduced feature set of that function. Replace this call with the simpler of_drm_get_bridge_by_endpoint(). Since of_drm_get_bridge_by_endpoint() increases the refcount of the returned bridge, ensure it is put on removal. 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: Laurent Pinchart --- Changes in v4: - fix missing assignment 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..fd30491a6697 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 =3D NULL; + } 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 Sun Jun 14 02:37:01 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 445B13A7584 for ; Mon, 4 May 2026 10:46:10 +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=1777891571; cv=none; b=u/HKeq+QDWXdiDAfo29Tv5e/AbuLxrOdMBLuV5RoiCviDL8jdUMv9ic7oBjpCEO0lJLvq7ybid5xD9C1rlWdB7LJC6ZW6G02LG2FbypPjoHhW0BjcdwvEetqcUwJrE3HhliVG4NXmbzHDxY0DmQ2y3iJHReH1Zyxi07hX6AywuQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777891571; c=relaxed/simple; bh=iq7bihL/7bod5gRoSE+KZVggpv9ssT9oSFB32DKFN48=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oVl37Ps4nE3eQ7HVuM7ISX1YxQyF9llHl+Ss0GOrtP5nB19xi0c3PzOlpiuBgcXubcl82DjSVuMP3FtIQ2syGvlcYG28nLqbNBZRXJf4BsJ4/CywGiscv2rhDyegXXlg8gBc2mcbO2EPOHLR7QQHnY271Su7UC+pkjrujFtcPOY= 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=JISm6dvD; 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="JISm6dvD" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-02.galae.net (Postfix) with ESMTPS id 027001A3506; Mon, 4 May 2026 10:46:09 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id C95975FD5F; Mon, 4 May 2026 10:46:08 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 581A011AD26A1; Mon, 4 May 2026 12:46:03 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1777891567; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=pOOUC/6IIIksC8MXl8RMQVMT+zs6jAuaGxEXoJvROdk=; b=JISm6dvDSmcY3CpEyUuFv4a2Up2zoXD5vJWycIpCXdTHAp80I46e47C8cVHESIp1rU5tFp fD1oQAdRo4EzdrtlRTpTtYtmOLqTL4IGC5vAMSNwjhhk+U5iAvtPBKb6EfKdU0SYMWDTcR nzEGdEuW9+wMflwMH6/pejXn6zC6iw7DsvNtqvcZiVoJ9zWRvs68Qn7LMyyObxSBkx5fRA S9RGL2BC6PQfi9fPfhGkGbh/ZvsjnOLOToJxRnHTwhT0nMdQObw+tDy1bOCviNROjd9TaN 674tABfuAW1qCWcujUOO4R6gQGTt97A/CkyEduBlNpcl1Eb4aOJAj8j9HgI8gA== From: Luca Ceresoli Date: Mon, 04 May 2026 12:45:14 +0200 Subject: [PATCH v4 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: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-11-b578c3daaf10@bootlin.com> References: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> In-Reply-To: <20260504-drm-bridge-alloc-getput-panel_or_bridge-v4-0-b578c3daaf10@bootlin.com> To: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Rob Clark , Dmitry Baryshkov , Abhinav Kumar , Jessica Zhang , Sean Paul , Marijn Suijten , Sumit Semwal , John Stultz , Tomi Valkeinen , Michal Simek Cc: Hui Pu , Ian Ray , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, freedreno@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, Luca Ceresoli , Dmitry Baryshkov X-Mailer: b4 0.15.2 X-Last-TLS-Session-Version: TLSv1.3 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 Reviewed-by: Laurent Pinchart --- 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