From nobody Wed Feb 11 06:56:55 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 31B4D31B825 for ; Wed, 7 Jan 2026 13:13:51 +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=1767791633; cv=none; b=gEWoMZnX4y1/egL2xqjQ5DNtOWPJj1EeHY+PY4KQfSFivhlGsXGpm3M8ul3nTJnFp/gjkon8VtJjXup87o9vk8Knnjic9Lq1WMnl8bFz1oWpfB4I0cwaYlsN37KXGOrwMqXmrdT1hae396FoywP6V5gOnljloy5ChyjwUDAGEuo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767791633; c=relaxed/simple; bh=geQevuXHdefJplJWRFXCTgfRVlyUpFRRHxc8gAIKsfo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=UyPIUMRmyhZzKFYDWizJgJnX11TM5JUoD6lTfcsfYOTwsYZIgxtPrlUO3ZLq2Wihyp4wSEWyttgh6JvDLS2xh3phYoGfCJsDRZohsnZjby1SYMCbEvF5/UUNtLkYTFrSOLJgpcPNy3TiaBPHG3Mb5mblXNwfo1DTU40d1szUF38= 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=pPm8csoJ; 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="pPm8csoJ" Received: from smtpout-01.galae.net (smtpout-01.galae.net [212.83.139.233]) by smtpout-03.galae.net (Postfix) with ESMTPS id A53644E41FDE; Wed, 7 Jan 2026 13:13:49 +0000 (UTC) Received: from mail.galae.net (mail.galae.net [212.83.136.155]) by smtpout-01.galae.net (Postfix) with ESMTPS id 6EA5B606F8; Wed, 7 Jan 2026 13:13:49 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) by localhost (Mailerdaemon) with ESMTPSA id 4BC18103C8744; Wed, 7 Jan 2026 14:13:44 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=dkim; t=1767791627; h=from:subject:date:message-id:to:cc:mime-version:content-type: content-transfer-encoding:in-reply-to:references; bh=AofJV46GCcIycup8AyvdwScpLkblbZyy7dzUs70zbeM=; b=pPm8csoJHFOtCpXH2s+CTdsiSGlOr6aFzuCyOraotIbgXUOF67e30ioJY4KQ30d/H6x7gc G6WKbMrwHr2QbJzFOtDlld557GcNqd0KKD+Sni+DQ5Id3tTWL+1MUxKcJylQ3rW9WctVZu /2SdyuZcUpXPHO7GK2Mx6K59cv9frqTGZYRo6Q5xDYqjDjibdL4gMRCxcyjIAXKSlBOgA9 6m45RVyHag4wNIpNkZUzPjXxrTXPMzr28GWso7PMYzjK7g8fU9YXeMnwZBON2kvOmyixOO ff7hgGnjSfA8/dLgG9b7VEs94HlAHXGbGvNLqCQrKDmnmF0wJQJ3WVQCU+1RIA== From: Luca Ceresoli Date: Wed, 07 Jan 2026 14:12:56 +0100 Subject: [PATCH 05/12] drm/bridge: tfp410: convert to of_drm_find_and_get_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: <20260107-drm-bridge-alloc-getput-drm_of_find_bridge-2-v1-5-283d7bba061a@bootlin.com> References: <20260107-drm-bridge-alloc-getput-drm_of_find_bridge-2-v1-0-283d7bba061a@bootlin.com> In-Reply-To: <20260107-drm-bridge-alloc-getput-drm_of_find_bridge-2-v1-0-283d7bba061a@bootlin.com> To: Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Philippe Cornu , benjamin.gaignard@linaro.org, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Adrien Grassein , Liu Ying , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , Inki Dae , Jagan Teki , Marek Szyprowski Cc: Hui Pu , Thomas Petazzoni , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, Luca Ceresoli X-Mailer: b4 0.14.3 X-Last-TLS-Session-Version: TLSv1.3 of_drm_find_bridge() is deprecated. Move to its replacement of_drm_find_and_get_bridge() which gets a bridge reference, and ensure it is put when done by using the drm_bridge::next_bridge pointer. Signed-off-by: Luca Ceresoli Acked-by: Maxime Ripard --- drivers/gpu/drm/bridge/ti-tfp410.c | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c b/drivers/gpu/drm/bridge/ti= -tfp410.c index b80ee089f880..11b5bb50e9f4 100644 --- a/drivers/gpu/drm/bridge/ti-tfp410.c +++ b/drivers/gpu/drm/bridge/ti-tfp410.c @@ -30,7 +30,6 @@ struct tfp410 { struct gpio_desc *powerdown; =20 struct drm_bridge_timings timings; - struct drm_bridge *next_bridge; =20 struct device *dev; }; @@ -53,8 +52,8 @@ static int tfp410_get_modes(struct drm_connector *connect= or) const struct drm_edid *drm_edid; int ret; =20 - if (dvi->next_bridge->ops & DRM_BRIDGE_OP_EDID) { - drm_edid =3D drm_bridge_edid_read(dvi->next_bridge, connector); + if (dvi->bridge.next_bridge->ops & DRM_BRIDGE_OP_EDID) { + drm_edid =3D drm_bridge_edid_read(dvi->bridge.next_bridge, connector); if (!drm_edid) DRM_INFO("EDID read failed. Fallback to standard modes\n"); } else { @@ -89,7 +88,7 @@ tfp410_connector_detect(struct drm_connector *connector, = bool force) { struct tfp410 *dvi =3D drm_connector_to_tfp410(connector); =20 - return drm_bridge_detect(dvi->next_bridge, connector); + return drm_bridge_detect(dvi->bridge.next_bridge, connector); } =20 static const struct drm_connector_funcs tfp410_con_funcs =3D { @@ -126,7 +125,7 @@ static int tfp410_attach(struct drm_bridge *bridge, struct tfp410 *dvi =3D drm_bridge_to_tfp410(bridge); int ret; =20 - ret =3D drm_bridge_attach(encoder, dvi->next_bridge, bridge, + ret =3D drm_bridge_attach(encoder, dvi->bridge.next_bridge, bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR); if (ret < 0) return ret; @@ -134,14 +133,14 @@ static int tfp410_attach(struct drm_bridge *bridge, if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) return 0; =20 - if (dvi->next_bridge->ops & DRM_BRIDGE_OP_DETECT) + if (dvi->bridge.next_bridge->ops & DRM_BRIDGE_OP_DETECT) dvi->connector.polled =3D DRM_CONNECTOR_POLL_HPD; else dvi->connector.polled =3D DRM_CONNECTOR_POLL_CONNECT | DRM_CONNECTOR_POL= L_DISCONNECT; =20 - if (dvi->next_bridge->ops & DRM_BRIDGE_OP_HPD) { + if (dvi->bridge.next_bridge->ops & DRM_BRIDGE_OP_HPD) { INIT_DELAYED_WORK(&dvi->hpd_work, tfp410_hpd_work_func); - drm_bridge_hpd_enable(dvi->next_bridge, tfp410_hpd_callback, + drm_bridge_hpd_enable(dvi->bridge.next_bridge, tfp410_hpd_callback, dvi); } =20 @@ -149,8 +148,8 @@ static int tfp410_attach(struct drm_bridge *bridge, &tfp410_con_helper_funcs); ret =3D drm_connector_init_with_ddc(bridge->dev, &dvi->connector, &tfp410_con_funcs, - dvi->next_bridge->type, - dvi->next_bridge->ddc); + dvi->bridge.next_bridge->type, + dvi->bridge.next_bridge->ddc); if (ret) { dev_err(dvi->dev, "drm_connector_init_with_ddc() failed: %d\n", ret); @@ -169,8 +168,8 @@ static void tfp410_detach(struct drm_bridge *bridge) { struct tfp410 *dvi =3D drm_bridge_to_tfp410(bridge); =20 - if (dvi->connector.dev && dvi->next_bridge->ops & DRM_BRIDGE_OP_HPD) { - drm_bridge_hpd_disable(dvi->next_bridge); + if (dvi->connector.dev && dvi->bridge.next_bridge->ops & DRM_BRIDGE_OP_HP= D) { + drm_bridge_hpd_disable(dvi->bridge.next_bridge); cancel_delayed_work_sync(&dvi->hpd_work); } } @@ -362,10 +361,10 @@ static int tfp410_init(struct device *dev, bool i2c) if (!node) return -ENODEV; =20 - dvi->next_bridge =3D of_drm_find_bridge(node); + dvi->bridge.next_bridge =3D of_drm_find_and_get_bridge(node); of_node_put(node); =20 - if (!dvi->next_bridge) + if (!dvi->bridge.next_bridge) return -EPROBE_DEFER; =20 /* Get the powerdown GPIO. */ --=20 2.52.0