From 99b1947ba2f82b30c0a4ef3e457eacc31d1b0220 Mon Sep 17 00:00:00 2001 From: Johan Hovold Date: Thu, 16 Jul 2026 15:18:02 +0200 Subject: [PATCH] drm/exynos: hdmi: take i2c adapter module reference The i2c subsystem currently blocks during adapter deregistration whenever there are consumers holding a reference. Switch to using of_get_i2c_adapter_by_node() which also takes a reference to the adapter module so that an attempt to unload the module while in use fails gracefully instead of blocking uninterruptibly. Signed-off-by: Johan Hovold Signed-off-by: Inki Dae --- drivers/gpu/drm/exynos/exynos_hdmi.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index 3d609f6744ab..d4fce39c2b61 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c @@ -1923,7 +1923,7 @@ static int hdmi_get_ddc_adapter(struct hdmi_context *hdata) return -ENODEV; } - adpt = of_find_i2c_adapter_by_node(np); + adpt = of_get_i2c_adapter_by_node(np); of_node_put(np); if (!adpt) { @@ -2079,7 +2079,7 @@ static int hdmi_probe(struct platform_device *pdev) if (hdata->regs_hdmiphy) iounmap(hdata->regs_hdmiphy); err_ddc: - put_device(&hdata->ddc_adpt->dev); + i2c_put_adapter(hdata->ddc_adpt); return ret; } @@ -2104,7 +2104,7 @@ static void hdmi_remove(struct platform_device *pdev) if (hdata->regs_hdmiphy) iounmap(hdata->regs_hdmiphy); - put_device(&hdata->ddc_adpt->dev); + i2c_put_adapter(hdata->ddc_adpt); drm_bridge_put(hdata->bridge);