From 62e31fd34f183787e4d4625cf54bb8b654ded2c9 Mon Sep 17 00:00:00 2001 From: Guochun Huang Date: Sat, 6 Aug 2022 01:37:09 +0000 Subject: [PATCH] drm/bridge: maxim-max96755f: Fix possible irq unbalanced Change-Id: Id1295c0eec38526215ac104706e435c3cf94faae Signed-off-by: Guochun Huang --- drivers/gpu/drm/bridge/maxim-max96755f.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/bridge/maxim-max96755f.c b/drivers/gpu/drm/bridge/maxim-max96755f.c index 8fb5fb2ddd95..b2d50ad400c7 100644 --- a/drivers/gpu/drm/bridge/maxim-max96755f.c +++ b/drivers/gpu/drm/bridge/maxim-max96755f.c @@ -42,6 +42,7 @@ struct max96755f_bridge { struct { struct gpio_desc *gpio; int irq; + bool irq_enabled; atomic_t triggered; } lock; }; @@ -166,6 +167,7 @@ static int max96755f_bridge_attach(struct drm_bridge *bridge, if (max96755f_bridge_link_locked(ser)) { connector->status = connector_status_connected; enable_irq(ser->lock.irq); + ser->lock.irq_enabled = true; } else { connector->status = connector_status_disconnected; } @@ -317,14 +319,20 @@ static void max96755f_bridge_enable(struct drm_bridge *bridge) if (ser->panel) drm_panel_enable(ser->panel); - enable_irq(ser->lock.irq); + if (!ser->lock.irq_enabled) { + enable_irq(ser->lock.irq); + ser->lock.irq_enabled = true; + } } static void max96755f_bridge_disable(struct drm_bridge *bridge) { struct max96755f_bridge *ser = to_max96755f_bridge(bridge); - disable_irq(ser->lock.irq); + if (ser->lock.irq_enabled) { + disable_irq(ser->lock.irq); + ser->lock.irq_enabled = false; + } if (ser->panel) drm_panel_disable(ser->panel);