From: Jonas Karlman <jonas@kwiboo.se>
To: Andrzej Hajda <andrzej.hajda@intel.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Robert Foss <rfoss@kernel.org>, Heiko Stuebner <heiko@sntech.de>,
Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
Jonas Karlman <jonas@kwiboo.se>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
David Airlie <airlied@gmail.com>, Simona Vetter <simona@ffwll.ch>
Cc: Liu Ying <victor.liu@nxp.com>, Sandy Huang <hjc@rock-chips.com>,
Andy Yan <andy.yan@rock-chips.com>,
Chen-Yu Tsai <wens@kernel.org>,
Christian Hewitt <christianshewitt@gmail.com>,
Diederik de Haas <diederik@cknow-tech.com>,
Nicolas Frattaroli <nicolas.frattaroli@collabora.com>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
dri-devel@lists.freedesktop.org,
linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org,
linux-amlogic@lists.infradead.org, linux-sunxi@lists.linux.dev,
imx@lists.linux.dev, linux-kernel@vger.kernel.org
Subject: [PATCH v4 17/17] drm: bridge: dw_hdmi: Merge top and bottom half IRQ handlers
Date: Mon, 4 May 2026 19:10:54 +0000 [thread overview]
Message-ID: <20260504191059.275928-18-jonas@kwiboo.se> (raw)
In-Reply-To: <20260504191059.275928-1-jonas@kwiboo.se>
The bottom half IRQ handler only modify delay of or queue a delayed work
used for HPD handling. The mod_delayed_work() called is documented as
being safe to call from any context including IRQ handler.
Merge top and bottom half IRQ handlers to simplify IRQ handling now that
HPD event is handled using a delayed work.
Signed-off-by: Jonas Karlman <jonas@kwiboo.se>
---
v4: New patch
---
drivers/gpu/drm/bridge/synopsys/dw-hdmi.c | 32 +++++++----------------
1 file changed, 10 insertions(+), 22 deletions(-)
diff --git a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
index c0ed067154c7..a42c45ff0ade 100644
--- a/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
+++ b/drivers/gpu/drm/bridge/synopsys/dw-hdmi.c
@@ -2971,24 +2971,12 @@ static irqreturn_t dw_hdmi_hardirq(int irq, void *dev_id)
if (hdmi->i2c)
ret = dw_hdmi_i2c_irq(hdmi);
- intr_stat = hdmi_readb(hdmi, HDMI_IH_PHY_STAT0);
+ intr_stat = hdmi_readb(hdmi, HDMI_IH_PHY_STAT0) & HDMI_IH_PHY_STAT0_HPD;
if (intr_stat) {
- hdmi_writeb(hdmi, ~0, HDMI_IH_MUTE_PHY_STAT0);
- return IRQ_WAKE_THREAD;
- }
-
- return ret;
-}
-
-static irqreturn_t dw_hdmi_irq(int irq, void *dev_id)
-{
- struct dw_hdmi *hdmi = dev_id;
- u8 intr_stat;
-
- intr_stat = hdmi_readb(hdmi, HDMI_IH_PHY_STAT0);
- if (intr_stat & HDMI_IH_PHY_STAT0_HPD) {
enum drm_connector_status status;
+ hdmi_writeb(hdmi, ~0, HDMI_IH_MUTE_PHY_STAT0);
+
/* Set HPD interrupt polarity based on current HPD status. */
status = dw_hdmi_phy_read_hpd(hdmi, hdmi->phy.data);
hdmi_modb(hdmi, status == connector_status_connected ?
@@ -3000,12 +2988,13 @@ static irqreturn_t dw_hdmi_irq(int irq, void *dev_id)
mod_delayed_work(system_percpu_wq, &hdmi->hpd_work,
msecs_to_jiffies(HOTPLUG_DEBOUNCE_MS));
- }
- hdmi_writeb(hdmi, intr_stat, HDMI_IH_PHY_STAT0);
- hdmi_writeb(hdmi, ~HDMI_IH_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
+ hdmi_writeb(hdmi, intr_stat, HDMI_IH_PHY_STAT0);
+ hdmi_writeb(hdmi, ~HDMI_IH_PHY_STAT0_HPD, HDMI_IH_MUTE_PHY_STAT0);
+ ret = IRQ_HANDLED;
+ }
- return IRQ_HANDLED;
+ return ret;
}
static void dw_hdmi_hpd_work(struct work_struct *work)
@@ -3305,9 +3294,8 @@ struct dw_hdmi *dw_hdmi_probe(struct platform_device *pdev,
INIT_DELAYED_WORK(&hdmi->hpd_work, dw_hdmi_hpd_work);
disable_delayed_work(&hdmi->hpd_work);
- ret = devm_request_threaded_irq(dev, irq, dw_hdmi_hardirq,
- dw_hdmi_irq, IRQF_SHARED,
- dev_name(dev), hdmi);
+ ret = devm_request_irq(dev, irq, dw_hdmi_hardirq, IRQF_SHARED,
+ dev_name(dev), hdmi);
if (ret)
goto err_res;
--
2.54.0
prev parent reply other threads:[~2026-05-04 19:12 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-04 19:10 [PATCH v4 00/17] drm: bridge: dw_hdmi: Misc enable/disable, CEC and EDID cleanup Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 01/17] drm: bridge: dw_hdmi: Disable scrambler feature when not supported Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 02/17] drm: bridge: dw_hdmi: Only notify connected status on HPD interrupt Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 03/17] drm: bridge: dw_hdmi: Call poweron/poweroff from atomic enable/disable Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 04/17] drm: bridge: dw_hdmi: Use passed mode instead of stored previous_mode Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 05/17] drm: bridge: dw_hdmi: Fold poweron and setup functions Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 06/17] drm: bridge: dw_hdmi: Remove previous_mode and mode_set Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 07/17] drm: bridge: dw_hdmi: Invalidate CEC phys addr from connector detect Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 08/17] drm: bridge: dw_hdmi: Remove cec_notifier_mutex Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 09/17] drm: bridge: dw_hdmi: Extract dw_hdmi_connector_status_update() Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 10/17] drm: bridge: dw_hdmi: Use dw_hdmi_connector_status_update() Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 11/17] drm: bridge: dw_hdmi: Use display_info is_hdmi and has_audio Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 12/17] drm: bridge: dw_hdmi: Use generic CEC notifier helpers Jonas Karlman
2026-05-04 21:21 ` Neil Armstrong
2026-05-04 19:10 ` [PATCH v4 13/17] drm: bridge: dw_hdmi: Use delayed_work to debounce hotplug event Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 14/17] drm: bridge: dw_hdmi: Rework HDP and RXSENSE interrupt handling Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 15/17] drm: bridge: dw_hdmi: Remove the empty dw_hdmi_setup_rx_sense() Jonas Karlman
2026-05-04 19:10 ` [PATCH v4 16/17] drm: bridge: dw_hdmi: Remove the empty dw_hdmi_phy_update_hpd() Jonas Karlman
2026-05-04 19:10 ` Jonas Karlman [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260504191059.275928-18-jonas@kwiboo.se \
--to=jonas@kwiboo.se \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=andy.yan@rock-chips.com \
--cc=christianshewitt@gmail.com \
--cc=diederik@cknow-tech.com \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=heiko@sntech.de \
--cc=hjc@rock-chips.com \
--cc=imx@lists.linux.dev \
--cc=jernej.skrabec@gmail.com \
--cc=linux-amlogic@lists.infradead.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=linux-sunxi@lists.linux.dev \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=nicolas.frattaroli@collabora.com \
--cc=rfoss@kernel.org \
--cc=simona@ffwll.ch \
--cc=tzimmermann@suse.de \
--cc=victor.liu@nxp.com \
--cc=wens@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox