From ba2d3e6709681b6c16ba8d65a23d72c706d82b5c Mon Sep 17 00:00:00 2001 From: Sui Jingfeng Date: Sun, 17 Mar 2024 00:05:36 +0800 Subject: drm/bridge: ite66121: Register HPD interrupt handler only when 'client->irq > 0' If a specific design doesn't wire IT66121's interrupt signal output pin up to the display controller side, then we should not register the interrupt handler. Such a decision is valid usage, as we can fall back to polling mode. So, don't make the assumption that a specific board always supports HPD. Carry out a sanity check on 'client->irq' before using it, fall back to polling mode if client->irq < 0 is true. Such a design increases the overall flexibility. Signed-off-by: Sui Jingfeng Reviewed-by: Dmitry Baryshkov Link: https://lore.kernel.org/r/20240316160536.1051513-1-sui.jingfeng@linux.dev Signed-off-by: Neil Armstrong Link: https://patchwork.freedesktop.org/patch/msgid/20240316160536.1051513-1-sui.jingfeng@linux.dev --- drivers/gpu/drm/bridge/ite-it66121.c | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'drivers/gpu/drm/bridge/ite-it66121.c') diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/ite-it66121.c index 1c3433b5e366..052884058644 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -1586,13 +1586,18 @@ static int it66121_probe(struct i2c_client *client) ctx->bridge.funcs = &it66121_bridge_funcs; ctx->bridge.of_node = dev->of_node; ctx->bridge.type = DRM_MODE_CONNECTOR_HDMIA; - ctx->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID | DRM_BRIDGE_OP_HPD; - - ret = devm_request_threaded_irq(dev, client->irq, NULL, it66121_irq_threaded_handler, - IRQF_ONESHOT, dev_name(dev), ctx); - if (ret < 0) { - dev_err(dev, "Failed to request irq %d:%d\n", client->irq, ret); - return ret; + ctx->bridge.ops = DRM_BRIDGE_OP_DETECT | DRM_BRIDGE_OP_EDID; + if (client->irq > 0) { + ctx->bridge.ops |= DRM_BRIDGE_OP_HPD; + + ret = devm_request_threaded_irq(dev, client->irq, NULL, + it66121_irq_threaded_handler, + IRQF_ONESHOT, dev_name(dev), + ctx); + if (ret < 0) { + dev_err(dev, "Failed to request irq %d:%d\n", client->irq, ret); + return ret; + } } it66121_audio_codec_init(ctx, dev); -- cgit v1.2.3-59-g8ed1b From 2c7d26555845ca5fb70353b4b77d8f6c4e32e54c Mon Sep 17 00:00:00 2001 From: Sui Jingfeng Date: Sun, 17 Mar 2024 01:44:19 +0800 Subject: drm/bridge: it66121: Remove a duplicated invoke of of_device_is_available() The calling of of_device_is_available() in it66121_probe() is duplicated, as the of_graph_get_remote_node() has already do the check for us. There is no need to call it again, thus delete the later one. Signed-off-by: Sui Jingfeng Reviewed-by: Dmitry Baryshkov Link: https://lore.kernel.org/r/20240316174419.1170460-1-sui.jingfeng@linux.dev Signed-off-by: Neil Armstrong Link: https://patchwork.freedesktop.org/patch/msgid/20240316174419.1170460-1-sui.jingfeng@linux.dev --- drivers/gpu/drm/bridge/ite-it66121.c | 6 ------ 1 file changed, 6 deletions(-) (limited to 'drivers/gpu/drm/bridge/ite-it66121.c') diff --git a/drivers/gpu/drm/bridge/ite-it66121.c b/drivers/gpu/drm/bridge/ite-it66121.c index 052884058644..925e42f46cd8 100644 --- a/drivers/gpu/drm/bridge/ite-it66121.c +++ b/drivers/gpu/drm/bridge/ite-it66121.c @@ -1540,12 +1540,6 @@ static int it66121_probe(struct i2c_client *client) return -EINVAL; } - if (!of_device_is_available(ep)) { - of_node_put(ep); - dev_err(ctx->dev, "The remote device is disabled\n"); - return -ENODEV; - } - ctx->next_bridge = of_drm_find_bridge(ep); of_node_put(ep); if (!ctx->next_bridge) { -- cgit v1.2.3-59-g8ed1b