* [PATCH] drm/bridge: lontium-lt9611uxc: disable audio capture for HDMI card
@ 2025-09-02 23:18 Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: start wake all thread when call detect() Vladimir Yakovlev
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Vladimir Yakovlev @ 2025-09-02 23:18 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel,
linux-kernel
Cc: vovchkir
The LT9611UXC only has an I2S input and therefore only an HDMI-TX
audio channel. In this case, the capture channel must be disabled
on the HDMI sound card.
Signed-off-by: Vladimir Yakovlev <vovchkir@gmail.com>
---
drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
index b17483f1550c..79feaec77afc 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
@@ -562,6 +562,7 @@ static int lt9611uxc_audio_init(struct device *dev, struct lt9611uxc *lt9611uxc)
struct hdmi_codec_pdata codec_data = {
.ops = <9611uxc_codec_ops,
.max_i2s_channels = 2,
+ .no_i2s_capture = 1,
.i2s = 1,
.data = lt9611uxc,
};
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] drm/bridge: lontium-lt9611uxc: start wake all thread when call detect()
2025-09-02 23:18 [PATCH] drm/bridge: lontium-lt9611uxc: disable audio capture for HDMI card Vladimir Yakovlev
@ 2025-09-02 23:18 ` Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: use irq as optional parameter Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: use reset_gpio " Vladimir Yakovlev
2 siblings, 0 replies; 4+ messages in thread
From: Vladimir Yakovlev @ 2025-09-02 23:18 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel,
linux-kernel
Cc: vovchkir
The chip does not receive an interrupt if the monitor was connected
before powering up.
Therefore, you need to wake up the task if the necessary bits are set
when calling bridge_detect() after DRM is started.
Signed-off-by: Vladimir Yakovlev <vovchkir@gmail.com>
---
drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
index 748bed8acd2d..5051cdfe2fee 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
@@ -358,17 +358,24 @@ static enum drm_connector_status lt9611uxc_bridge_detect(struct drm_bridge *brid
unsigned int reg_val = 0;
int ret;
bool connected = true;
+ bool edid_read = true;
lt9611uxc_lock(lt9611uxc);
if (lt9611uxc->hpd_supported) {
ret = regmap_read(lt9611uxc->regmap, 0xb023, ®_val);
- if (ret)
+ if (ret) {
dev_err(lt9611uxc->dev, "failed to read hpd status: %d\n", ret);
- else
+ } else {
+ dev_dbg(lt9611uxc->dev, "detect() reg[0xb023]=0x%02X\n", reg_val);
connected = reg_val & BIT(1);
+ edid_read = reg_val & BIT(0);
+ if (edid_read)
+ wake_up_all(<9611uxc->wq);
+ }
}
+ lt9611uxc->edid_read = edid_read;
lt9611uxc->hdmi_connected = connected;
lt9611uxc_unlock(lt9611uxc);
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] drm/bridge: lontium-lt9611uxc: use irq as optional parameter
2025-09-02 23:18 [PATCH] drm/bridge: lontium-lt9611uxc: disable audio capture for HDMI card Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: start wake all thread when call detect() Vladimir Yakovlev
@ 2025-09-02 23:18 ` Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: use reset_gpio " Vladimir Yakovlev
2 siblings, 0 replies; 4+ messages in thread
From: Vladimir Yakovlev @ 2025-09-02 23:18 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel,
linux-kernel
Cc: vovchkir
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@gmail.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
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH] drm/bridge: lontium-lt9611uxc: use reset_gpio as optional parameter
2025-09-02 23:18 [PATCH] drm/bridge: lontium-lt9611uxc: disable audio capture for HDMI card Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: start wake all thread when call detect() Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: use irq as optional parameter Vladimir Yakovlev
@ 2025-09-02 23:18 ` Vladimir Yakovlev
2 siblings, 0 replies; 4+ messages in thread
From: Vladimir Yakovlev @ 2025-09-02 23:18 UTC (permalink / raw)
To: Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Maarten Lankhorst, Maxime Ripard,
Thomas Zimmermann, David Airlie, Simona Vetter, dri-devel,
linux-kernel
Cc: vovchkir
On some systems the reset pin may not be used.
Signed-off-by: Vladimir Yakovlev <vovchkir@gmail.com>
---
drivers/gpu/drm/bridge/lontium-lt9611uxc.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
index 5051cdfe2fee..1aeb5b29704b 100644
--- a/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
+++ b/drivers/gpu/drm/bridge/lontium-lt9611uxc.c
@@ -179,6 +179,9 @@ static void lt9611uxc_hpd_work(struct work_struct *work)
static void lt9611uxc_reset(struct lt9611uxc *lt9611uxc)
{
+ if (!lt9611uxc->reset_gpio)
+ return;
+
gpiod_set_value_cansleep(lt9611uxc->reset_gpio, 1);
msleep(20);
@@ -460,7 +463,7 @@ static int lt9611uxc_gpio_init(struct lt9611uxc *lt9611uxc)
{
struct device *dev = lt9611uxc->dev;
- lt9611uxc->reset_gpio = devm_gpiod_get(dev, "reset", GPIOD_OUT_HIGH);
+ lt9611uxc->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
if (IS_ERR(lt9611uxc->reset_gpio)) {
dev_err(dev, "failed to acquire reset gpio\n");
return PTR_ERR(lt9611uxc->reset_gpio);
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-09-02 23:18 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-09-02 23:18 [PATCH] drm/bridge: lontium-lt9611uxc: disable audio capture for HDMI card Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: start wake all thread when call detect() Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: use irq as optional parameter Vladimir Yakovlev
2025-09-02 23:18 ` [PATCH] drm/bridge: lontium-lt9611uxc: use reset_gpio " Vladimir Yakovlev
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).