From: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
To: Biju <biju.das.au@gmail.com>
Cc: Andrzej Hajda <andrzej.hajda@intel.com>,
Neil Armstrong <neil.armstrong@linaro.org>,
Robert Foss <rfoss@kernel.org>,
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>,
Biju Das <biju.das.jz@bp.renesas.com>,
Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
Jonas Karlman <jonas@kwiboo.se>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>,
Andy Yan <andy.yan@rock-chips.com>,
Douglas Anderson <dianders@chromium.org>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Jesse Van Gavere <jesseevg@gmail.com>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
Geert Uytterhoeven <geert+renesas@glider.be>,
Prabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@bp.renesas.com>,
linux-renesas-soc@vger.kernel.org
Subject: Re: [PATCH] drm/bridge: adv7511: Clear HPD IRQ before powering on device during resume()
Date: Mon, 12 Jan 2026 09:15:45 +0100 [thread overview]
Message-ID: <aWStnNK4dubLsMZl@tom-desktop> (raw)
In-Reply-To: <20251219104659.114032-1-biju.das.jz@bp.renesas.com>
Hi Biju,
Thanks for your patch!
On Fri, Dec 19, 2025 at 10:46:53AM +0000, Biju wrote:
> From: Biju Das <biju.das.jz@bp.renesas.com>
>
> On RZ/G3E SMARC EVK using PSCI, s2ram powers down the SoC. Testing ADV7535
> IRQ configured as edge-triggered interrupt on RZ/G3E SMARC EVK shows that
> it is missing HPD IRQ during system resume, as the status change occurs
> before the IRQ/pincontrol resume. Once the status bit is set, there won't
> be any further IRQ unless the status bit is cleared.
>
> Clear any pending HPD IRQs before powering on the ADV7535 device to
> deliver HPD interrupts after resume().
>
Tested-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Reviewed-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
> Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
> ---
> drivers/gpu/drm/bridge/adv7511/adv7511.h | 1 +
> drivers/gpu/drm/bridge/adv7511/adv7511_drv.c | 32 ++++++++++++++++++++
> 2 files changed, 33 insertions(+)
>
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511.h b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> index 8be7266fd4f4..03aa23836ca4 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511.h
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511.h
> @@ -393,6 +393,7 @@ struct adv7511 {
> bool cec_enabled_adap;
> struct clk *cec_clk;
> u32 cec_clk_freq;
> + bool suspended;
> };
>
> static inline struct adv7511 *bridge_to_adv7511(struct drm_bridge *bridge)
> diff --git a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> index b9be86541307..8d9467187d7c 100644
> --- a/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> +++ b/drivers/gpu/drm/bridge/adv7511/adv7511_drv.c
> @@ -790,6 +790,25 @@ static void adv7511_bridge_atomic_enable(struct drm_bridge *bridge,
> struct drm_connector_state *conn_state;
> struct drm_crtc_state *crtc_state;
>
> + if (adv->i2c_main->irq && adv->suspended) {
> + unsigned int irq;
> +
> + /*
> + * If ADV7511 IRQ is configured as edge triggered interrupt, it
> + * will miss the IRQ during system resume as the status change
> + * occurs before IRQ/pincontrol resume. Once the status bit is
> + * set there won't be any further IRQ unless the status bit is
> + * cleared. So, clear the IRQ status bit for further delivery
> + * of HPD IRQ.
> + */
> + regmap_read(adv->regmap, ADV7511_REG_INT(0), &irq);
> + if (irq & ADV7511_INT0_HPD)
> + regmap_write(adv->regmap, ADV7511_REG_INT(0),
> + ADV7511_INT0_HPD);
> +
> + adv->suspended = false;
> + }
> +
> adv7511_power_on(adv);
>
> connector = drm_atomic_get_new_connector_for_encoder(state, bridge->encoder);
> @@ -1407,6 +1426,16 @@ static void adv7511_remove(struct i2c_client *i2c)
> i2c_unregister_device(adv7511->i2c_edid);
> }
>
> +static int adv7511_suspend(struct device *dev)
> +{
> + struct i2c_client *i2c = to_i2c_client(dev);
> + struct adv7511 *adv7511 = i2c_get_clientdata(i2c);
> +
> + adv7511->suspended = true;
> +
> + return 0;
> +}
> +
> static const struct adv7511_chip_info adv7511_chip_info = {
> .type = ADV7511,
> .name = "ADV7511",
> @@ -1439,6 +1468,8 @@ static const struct adv7511_chip_info adv7535_chip_info = {
> .hpd_override_enable = true,
> };
>
> +static DEFINE_SIMPLE_DEV_PM_OPS(adv7511_pm_ops, adv7511_suspend, NULL);
> +
> static const struct i2c_device_id adv7511_i2c_ids[] = {
> { "adv7511", (kernel_ulong_t)&adv7511_chip_info },
> { "adv7511w", (kernel_ulong_t)&adv7511_chip_info },
> @@ -1467,6 +1498,7 @@ static struct i2c_driver adv7511_driver = {
> .driver = {
> .name = "adv7511",
> .of_match_table = adv7511_of_ids,
> + .pm = pm_sleep_ptr(&adv7511_pm_ops),
> },
> .id_table = adv7511_i2c_ids,
> .probe = adv7511_probe,
> --
> 2.43.0
>
Kind Regards,
Tommaso
next prev parent reply other threads:[~2026-01-12 8:16 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-19 10:46 [PATCH] drm/bridge: adv7511: Clear HPD IRQ before powering on device during resume() Biju
2026-01-12 8:15 ` Tommaso Merciai [this message]
2026-03-16 10:40 ` Biju Das
2026-03-16 11:22 ` Luca Ceresoli
2026-03-16 14:02 ` Laurent Pinchart
2026-03-16 17:59 ` Biju Das
2026-03-17 23:29 ` Laurent Pinchart
2026-03-18 6:57 ` Biju Das
2026-04-22 11:02 ` Biju Das
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=aWStnNK4dubLsMZl@tom-desktop \
--to=tommaso.merciai.xr@bp.renesas.com \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=airlied@gmail.com \
--cc=andrzej.hajda@intel.com \
--cc=andy.yan@rock-chips.com \
--cc=biju.das.au@gmail.com \
--cc=biju.das.jz@bp.renesas.com \
--cc=dianders@chromium.org \
--cc=dmitry.baryshkov@oss.qualcomm.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=geert+renesas@glider.be \
--cc=jernej.skrabec@gmail.com \
--cc=jesseevg@gmail.com \
--cc=jonas@kwiboo.se \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-renesas-soc@vger.kernel.org \
--cc=luca.ceresoli@bootlin.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mripard@kernel.org \
--cc=neil.armstrong@linaro.org \
--cc=prabhakar.mahadev-lad.rj@bp.renesas.com \
--cc=rfoss@kernel.org \
--cc=simona@ffwll.ch \
--cc=tzimmermann@suse.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.