From: "Kory Maincent (TI.com)" <kory.maincent@bootlin.com>
To: Jyri Sarha <jyri.sarha@iki.fi>,
Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>,
Simona Vetter <simona@ffwll.ch>, Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Russell King <linux@armlinux.org.uk>,
Bartosz Golaszewski <brgl@bgdev.pl>,
Tony Lindgren <tony@atomide.com>,
Andrzej Hajda <andrzej.hajda@intel.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Robert Foss <rfoss@kernel.org>,
Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
Jonas Karlman <jonas@kwiboo.se>,
Jernej Skrabec <jernej.skrabec@gmail.com>
Cc: Markus Schneider-Pargmann <msp@baylibre.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Louis Chauvet <louis.chauvet@bootlin.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
Miguel Gazquez <miguel.gazquez@bootlin.com>,
dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-omap@vger.kernel.org,
"Kory Maincent (TI.com)" <kory.maincent@bootlin.com>
Subject: [PATCH 18/21] drm/bridge: tda998x: Move tda998x_create/destroy into probe and remove
Date: Wed, 26 Nov 2025 18:36:00 +0100 [thread overview]
Message-ID: <20251126-feature_tilcdc-v1-18-49b9ef2e3aa0@bootlin.com> (raw)
In-Reply-To: <20251126-feature_tilcdc-v1-0-49b9ef2e3aa0@bootlin.com>
Now that tda998x_create and tda998x_destroy are called only in the probe
function, there is no need for separate functions.
Move the code into the tda998x_probe and tda998x_remove functions.
Rewrite the cleanup path using goto calls in probe and reorder it in the
remove function.
Signed-off-by: Kory Maincent (TI.com) <kory.maincent@bootlin.com>
---
drivers/gpu/drm/bridge/tda998x_drv.c | 99 +++++++++++++++++++-----------------
1 file changed, 51 insertions(+), 48 deletions(-)
diff --git a/drivers/gpu/drm/bridge/tda998x_drv.c b/drivers/gpu/drm/bridge/tda998x_drv.c
index 865285ba2bd8c..4be49dd5bfc01 100644
--- a/drivers/gpu/drm/bridge/tda998x_drv.c
+++ b/drivers/gpu/drm/bridge/tda998x_drv.c
@@ -1748,38 +1748,20 @@ static int tda998x_get_audio_ports(struct tda998x_priv *priv,
return 0;
}
-static void tda998x_destroy(struct device *dev)
-{
- struct tda998x_priv *priv = dev_get_drvdata(dev);
-
- drm_bridge_remove(&priv->bridge);
-
- /* disable all IRQs and free the IRQ handler */
- cec_write(priv, REG_CEC_RXSHPDINTENA, 0);
- reg_clear(priv, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD);
-
- if (priv->audio_pdev)
- platform_device_unregister(priv->audio_pdev);
-
- if (priv->hdmi->irq)
- free_irq(priv->hdmi->irq, priv);
-
- timer_delete_sync(&priv->edid_delay_timer);
- cancel_work_sync(&priv->detect_work);
-
- i2c_unregister_device(priv->cec);
-
- cec_notifier_conn_unregister(priv->cec_notify);
-}
-
-static int tda998x_create(struct device *dev)
+static int
+tda998x_probe(struct i2c_client *client)
{
- struct i2c_client *client = to_i2c_client(dev);
struct device_node *np = client->dev.of_node;
+ struct device *dev = &client->dev;
struct i2c_board_info cec_info;
struct tda998x_priv *priv;
- u32 video;
int rev_lo, rev_hi, ret;
+ u32 video;
+
+ if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
+ dev_warn(&client->dev, "adapter does not support I2C\n");
+ return -EIO;
+ }
priv = devm_drm_bridge_alloc(dev, struct tda998x_priv, bridge, &tda998x_bridge_funcs);
if (IS_ERR(priv))
@@ -1814,13 +1796,15 @@ static int tda998x_create(struct device *dev)
rev_lo = reg_read(priv, REG_VERSION_LSB);
if (rev_lo < 0) {
dev_err(dev, "failed to read version: %d\n", rev_lo);
- return rev_lo;
+ ret = rev_lo;
+ goto cancel_work;
}
rev_hi = reg_read(priv, REG_VERSION_MSB);
if (rev_hi < 0) {
dev_err(dev, "failed to read version: %d\n", rev_hi);
- return rev_hi;
+ ret = rev_hi;
+ goto cancel_work;
}
priv->rev = rev_lo | rev_hi << 8;
@@ -1843,7 +1827,8 @@ static int tda998x_create(struct device *dev)
break;
default:
dev_err(dev, "found unsupported device: %04x\n", priv->rev);
- return -ENXIO;
+ ret = -ENXIO;
+ goto cancel_work;
}
/* after reset, enable DDC: */
@@ -1887,7 +1872,7 @@ static int tda998x_create(struct device *dev)
if (ret) {
dev_err(dev, "failed to request IRQ#%u: %d\n",
client->irq, ret);
- goto err_irq;
+ goto cancel_work;
}
/* enable HPD irq */
@@ -1897,7 +1882,7 @@ static int tda998x_create(struct device *dev)
priv->cec_notify = cec_notifier_conn_register(dev, NULL, NULL);
if (!priv->cec_notify) {
ret = -ENOMEM;
- goto fail;
+ goto free_irq;
}
priv->cec_glue.parent = dev;
@@ -1924,7 +1909,7 @@ static int tda998x_create(struct device *dev)
priv->cec = i2c_new_client_device(client->adapter, &cec_info);
if (IS_ERR(priv->cec)) {
ret = PTR_ERR(priv->cec);
- goto fail;
+ goto notifier_conn_unregister;
}
/* enable EDID read irq: */
@@ -1941,7 +1926,7 @@ static int tda998x_create(struct device *dev)
ret = tda998x_get_audio_ports(priv, np);
if (ret)
- goto fail;
+ goto unregister_dev;
if (priv->audio_port_enable[AUDIO_ROUTE_I2S] ||
priv->audio_port_enable[AUDIO_ROUTE_SPDIF])
@@ -1956,26 +1941,44 @@ static int tda998x_create(struct device *dev)
return 0;
-fail:
- tda998x_destroy(dev);
-err_irq:
+unregister_dev:
+ i2c_unregister_device(priv->cec);
+notifier_conn_unregister:
+ cec_notifier_conn_unregister(priv->cec_notify);
+free_irq:
+ if (client->irq) {
+ free_irq(client->irq, priv);
+ cec_write(priv, REG_CEC_RXSHPDINTENA, 0);
+ reg_clear(priv, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD);
+ }
+cancel_work:
+ timer_delete_sync(&priv->edid_delay_timer);
+ cancel_work_sync(&priv->detect_work);
return ret;
}
-static int
-tda998x_probe(struct i2c_client *client)
+static void tda998x_remove(struct i2c_client *client)
{
- if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {
- dev_warn(&client->dev, "adapter does not support I2C\n");
- return -EIO;
- }
+ struct tda998x_priv *priv = dev_get_drvdata(&client->dev);
- return tda998x_create(&client->dev);
-}
+ drm_bridge_remove(&priv->bridge);
-static void tda998x_remove(struct i2c_client *client)
-{
- tda998x_destroy(&client->dev);
+ if (priv->audio_pdev)
+ platform_device_unregister(priv->audio_pdev);
+
+ i2c_unregister_device(priv->cec);
+
+ cec_notifier_conn_unregister(priv->cec_notify);
+
+ /* disable all IRQs and free the IRQ handler */
+ if (client->irq) {
+ cec_write(priv, REG_CEC_RXSHPDINTENA, 0);
+ reg_clear(priv, REG_INT_FLAGS_2, INT_FLAGS_2_EDID_BLK_RD);
+ free_irq(priv->hdmi->irq, priv);
+ }
+
+ timer_delete_sync(&priv->edid_delay_timer);
+ cancel_work_sync(&priv->detect_work);
}
#ifdef CONFIG_OF
--
2.43.0
next prev parent reply other threads:[~2025-11-26 17:38 UTC|newest]
Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-26 17:35 [PATCH 00/21] Clean and update tilcdc driver to support DRM_BRIDGE_ATTACH_NO_CONNECTOR Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 01/21] dt-bindings: display: tilcdc: Convert to DT schema Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 02/21] dt-bindings: display: tilcdc: Add fifo-threshold property Kory Maincent (TI.com)
2025-11-27 8:22 ` Krzysztof Kozlowski
2025-11-27 9:37 ` Kory Maincent
2025-11-26 17:35 ` [PATCH 03/21] drm/tilcdc: Remove simulate_vesa_sync flag Kory Maincent (TI.com)
2025-12-10 18:10 ` Luca Ceresoli
2025-12-11 9:40 ` Kory Maincent
2025-12-11 9:47 ` Luca Ceresoli
2025-11-26 17:35 ` [PATCH 04/21] drm/tilcdc: Add support for DRM bus flags and simplify panel config Kory Maincent (TI.com)
2025-12-10 18:13 ` Luca Ceresoli
2025-11-26 17:35 ` [PATCH 05/21] ARM: dts: omap: Bind panel to panel-dpi instead of ti,tilcdc,panel driver Kory Maincent (TI.com)
2025-12-01 14:13 ` Tomi Valkeinen
2025-12-01 21:46 ` Krzysztof Kozlowski
2025-12-02 9:42 ` Kory Maincent
2025-12-02 10:28 ` Krzysztof Kozlowski
2025-12-02 10:44 ` Kory Maincent
2025-12-02 10:47 ` Krzysztof Kozlowski
2025-12-02 11:18 ` Kory Maincent
2025-12-02 11:51 ` Tomi Valkeinen
2025-12-02 12:20 ` Krzysztof Kozlowski
2025-12-02 12:56 ` Kory Maincent
2025-12-03 8:30 ` Krzysztof Kozlowski
2025-12-02 12:19 ` Krzysztof Kozlowski
2025-11-26 17:35 ` [PATCH 06/21] dt-bindings: display: tilcdc: Remove panel binding Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 07/21] drm/tilcdc: Remove tilcdc panel driver Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 08/21] drm/tilcdc: Remove component framework support Kory Maincent (TI.com)
2025-12-11 9:42 ` Luca Ceresoli
2025-11-26 17:35 ` [PATCH 09/21] drm/tilcdc: Remove tilcdc_panel_info structure Kory Maincent (TI.com)
2025-12-11 9:44 ` Luca Ceresoli
2025-11-26 17:35 ` [PATCH 10/21] drm/tilcdc: Remove redundant #endif/#ifdef in debugfs code Kory Maincent (TI.com)
2025-12-10 18:22 ` Luca Ceresoli
2025-11-26 17:35 ` [PATCH 11/21] drm/tilcdc: Remove unused encoder and connector tracking arrays Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 12/21] drm/tilcdc: Rename external_encoder and external_connector to encoder and connector Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 13/21] drm/tilcdc: Rename tilcdc_external to tilcdc_encoder Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 14/21] drm/tilcdc: Remove the useless module list support Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 15/21] drm/tilcdc: Modernize driver initialization and cleanup paths Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 16/21] drm/tilcdc: Remove the use of drm_device private_data Kory Maincent (TI.com)
2025-11-26 17:35 ` [PATCH 17/21] drm/bridge: tda998x: Remove component support Kory Maincent (TI.com)
2025-11-26 17:36 ` Kory Maincent (TI.com) [this message]
2025-11-26 17:36 ` [PATCH 19/21] drm/bridge: tda998x: Remove useless tda998x_connector_destroy wrapper Kory Maincent (TI.com)
2025-11-26 17:36 ` [PATCH 20/21] drm/bridge: tda998x: Add support for DRM_BRIDGE_ATTACH_NO_CONNECTOR Kory Maincent (TI.com)
2025-11-26 17:36 ` [PATCH 21/21] drm/tilcdc: " Kory Maincent (TI.com)
2025-12-02 12:25 ` [PATCH 00/21] Clean and update tilcdc driver to support DRM_BRIDGE_ATTACH_NO_CONNECTOR Swamil Jain
2025-12-03 10:49 ` Kory Maincent
2025-12-03 12:13 ` Swamil Jain
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251126-feature_tilcdc-v1-18-49b9ef2e3aa0@bootlin.com \
--to=kory.maincent@bootlin.com \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=brgl@bgdev.pl \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=jernej.skrabec@gmail.com \
--cc=jonas@kwiboo.se \
--cc=jyri.sarha@iki.fi \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=louis.chauvet@bootlin.com \
--cc=luca.ceresoli@bootlin.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=miguel.gazquez@bootlin.com \
--cc=mripard@kernel.org \
--cc=msp@baylibre.com \
--cc=neil.armstrong@linaro.org \
--cc=rfoss@kernel.org \
--cc=robh@kernel.org \
--cc=simona@ffwll.ch \
--cc=thomas.petazzoni@bootlin.com \
--cc=tomi.valkeinen@ideasonboard.com \
--cc=tony@atomide.com \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).