[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250902231821.2943-3-vovchkir@gmail.com>
Date: Wed, 3 Sep 2025 02:18:20 +0300
From: Vladimir Yakovlev <vovchkir@...il.com>
To: Andrzej Hajda <andrzej.hajda@...el.com>,
Neil Armstrong <neil.armstrong@...aro.org>,
Robert Foss <rfoss@...nel.org>,
Laurent Pinchart <Laurent.pinchart@...asonboard.com>,
Jonas Karlman <jonas@...boo.se>,
Jernej Skrabec <jernej.skrabec@...il.com>,
Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>,
Thomas Zimmermann <tzimmermann@...e.de>,
David Airlie <airlied@...il.com>,
Simona Vetter <simona@...ll.ch>,
dri-devel@...ts.freedesktop.org,
linux-kernel@...r.kernel.org
Cc: vovchkir@...il.com
Subject: [PATCH] drm/bridge: lontium-lt9611uxc: use irq as optional parameter
On some systems the interrupt pin may not be used.
In this case we exclude DRM_BRIDGE_OP_HPD from supported operations,
after which a polling thread is started to detect the connection.
(the default polling period for DRM is 10 seconds)
Signed-off-by: Vladimir Yakovlev <vovchkir@...il.com>
---
drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 25 ++++++++++++++--------
1 file changed, 16 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
index 1aeb5b29704b..b17483f1550c 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
@@ -854,12 +854,17 @@ static int lt9611uxc_probe(struct i2c_client *client)
init_waitqueue_head(<9611uxc->wq);
INIT_WORK(<9611uxc->work, lt9611uxc_hpd_work);
- ret = request_threaded_irq(client->irq, NULL,
- lt9611uxc_irq_thread_handler,
- IRQF_ONESHOT, "lt9611uxc", lt9611uxc);
- if (ret) {
- dev_err(dev, "failed to request irq\n");
- goto err_disable_regulators;
+ if (client->irq) {
+ ret = request_threaded_irq(client->irq, NULL,
+ lt9611uxc_irq_thread_handler,
+ IRQF_ONESHOT, "lt9611uxc", lt9611uxc);
+ if (ret) {
+ dev_err(dev, "failed to request irq\n");
+ goto err_disable_regulators;
+ }
+ dev_dbg(dev, "Uses IRQ\n");
+ } else {
+ dev_warn(dev, "Irq isn't present. Check Irq or use the polling!!\n");
}
i2c_set_clientdata(client, lt9611uxc);
@@ -867,7 +872,7 @@ static int lt9611uxc_probe(struct i2c_client *client)
lt9611uxc->bridge.funcs = <9611uxc_bridge_funcs;
lt9611uxc->bridge.of_node = client->dev.of_node;
lt9611uxc->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID;
- if (lt9611uxc->hpd_supported)
+ if (lt9611uxc->hpd_supported && client->irq)
lt9611uxc->bridge.ops |= DRM_BRIDGE_OP_HPD;
lt9611uxc->bridge.type = DRM_MODE_CONNECTOR_HDMIA;
@@ -896,7 +901,8 @@ static int lt9611uxc_probe(struct i2c_client *client)
return 0;
err_remove_bridge:
- free_irq(client->irq, lt9611uxc);
+ if (client->irq)
+ free_irq(client->irq, lt9611uxc);
cancel_work_sync(<9611uxc->work);
drm_bridge_remove(<9611uxc->bridge);
@@ -914,7 +920,8 @@ static void lt9611uxc_remove(struct i2c_client *client)
{
struct lt9611uxc *lt9611uxc = i2c_get_clientdata(client);
- free_irq(client->irq, lt9611uxc);
+ if (client->irq)
+ free_irq(client->irq, lt9611uxc);
cancel_work_sync(<9611uxc->work);
lt9611uxc_audio_exit(lt9611uxc);
drm_bridge_remove(<9611uxc->bridge);
--
2.34.1
Powered by blists - more mailing lists