From: "Heiko Stübner" <heiko@sntech.de>
To: Vinod Koul <vkoul@kernel.org>,
Manivannan Sadhasivam <mani@kernel.org>,
Neil Armstrong <neil.armstrong@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Andrzej Hajda <andrzej.hajda@intel.com>,
Robert Foss <rfoss@kernel.org>,
Laurent Pinchart <Laurent.pinchart@ideasonboard.com>,
Jonas Karlman <jonas@kwiboo.se>,
Jernej Skrabec <jernej.skrabec@gmail.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Maxime Ripard <mripard@kernel.org>,
Thomas Zimmermann <tzimmermann@suse.de>,
Andy Yan <andy.yan@rock-chips.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
Emil Renner Berthing <kernel@esmil.dk>,
Hal Feng <hal.feng@starfivetech.com>,
Michael Turquette <mturquette@baylibre.com>,
Stephen Boyd <sboyd@kernel.org>, Paul Walmsley <pjw@kernel.org>,
Palmer Dabbelt <palmer@dabbelt.com>,
Albert Ou <aou@eecs.berkeley.edu>,
Alexandre Ghiti <alex@ghiti.fr>,
Dominique Belhachemi <db@domibel.de>,
Brian Masney <bmasney+clk@redhat.com>,
Jerome Brunet <jbrunet+clk@baylibre.com>,
Michal Wilczynski <m.wilczynski@samsung.com>
Cc: linux-phy@lists.infradead.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-clk@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-rockchip@lists.infradead.org,
linux-riscv@lists.infradead.org,
"Marek Szyprowski" <m.szyprowski@samsung.com>,
"Maud Spierings" <maud_spierings@murena.io>,
"Graham Markall" <hello@big-grey.co.uk>,
"Icenowy Zheng" <zhengxingda@iscas.ac.cn>,
"Chaoyi Chen" <chaoyi.chen@rock-chips.com>,
"Joshua Peisach" <jpeisach@ubuntu.com>,
"Uwe Kleine-König" <u.kleine-koenig@baylibre.com>,
"Michal Wilczynski" <m.wilczynski@samsung.com>
Subject: Re: [PATCH v5 08/21] drm/bridge: inno-hdmi: Split probe out of bind
Date: Wed, 30 Sep 2026 12:02:56 +0200 [thread overview]
Message-ID: <6535891.44csPzL39Z@diego> (raw)
In-Reply-To: <20260929-jh7110-clean-send-v5-8-82b4d8e3c6c7@samsung.com>
Am Dienstag, 29. September 2026, 12:31:05 Mitteleuropäische Sommerzeit schrieb Michal Wilczynski:
> inno_hdmi_bind() both sets up the bridge and attaches it to a DRM
> encoder. A platform whose HDMI controller is a child of a larger device
> needs the first half without the second, since it registers as its own
> platform driver and lets the DRM core bind the bridge later.
>
> Move the setup into a new exported inno_hdmi_probe(), and reduce
> inno_hdmi_bind() to a wrapper around it.
>
> No functional change intended.
>
> Reviewed-by: Joshua Peisach <jpeisach@ubuntu.com>
> Signed-off-by: Michal Wilczynski <m.wilczynski@samsung.com>
> ---
> drivers/gpu/drm/bridge/inno-hdmi.c | 49 +++++++++++++++++++++++++++++++++-----
> include/drm/bridge/inno_hdmi.h | 4 ++++
> 2 files changed, 47 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/bridge/inno-hdmi.c b/drivers/gpu/drm/bridge/inno-hdmi.c
> index d7c33b92e2ddf4ced84d17304463f44be52270b8..7a9f54dce2647f0320d77629a28154eade14385f 100644
> --- a/drivers/gpu/drm/bridge/inno-hdmi.c
> +++ b/drivers/gpu/drm/bridge/inno-hdmi.c
> @@ -929,7 +929,14 @@ static irqreturn_t inno_hdmi_irq(int irq, void *dev_id)
> {
> struct inno_hdmi *hdmi = dev_id;
>
> - drm_helper_hpd_irq_event(hdmi->bridge.dev);
> + /*
> + * The interrupt is requested in probe, but bridge.dev is only set once
> + * the DRM master binds and attaches the bridge, which may never happen.
> + * Drop hotplug events that arrive before then rather than dereference a
> + * NULL drm_device.
> + */
> + if (hdmi->bridge.dev)
> + drm_helper_hpd_irq_event(hdmi->bridge.dev);
This is not part of the commit description and while true, should likely
be its own patch with its own description.
>
> return IRQ_HANDLED;
> }
> @@ -1061,11 +1068,24 @@ static struct i2c_adapter *inno_hdmi_i2c_adapter(struct inno_hdmi *hdmi)
> return adap;
> }
>
> -struct inno_hdmi *inno_hdmi_bind(struct device *dev,
> - struct drm_encoder *encoder,
> - const struct inno_hdmi_plat_data *plat_data)
> +/**
> + * inno_hdmi_probe - Internal helper to perform common setup
> + * @pdev: platform device
> + * @plat_data: SoC-specific platform data
> + *
> + * This function handles all the common hardware setup: allocating the main
> + * struct, mapping registers, getting clocks, initializing the hardware,
> + * setting up the IRQ, and initializing the DDC adapter and bridge struct.
> + * It returns a pointer to the inno_hdmi struct on success, or an ERR_PTR
> + * on failure.
> + *
> + * This function is used by modern, decoupled MFD/glue drivers. It registers
> + * the bridge but does not attach it.
> + */
> +struct inno_hdmi *inno_hdmi_probe(struct platform_device *pdev,
> + const struct inno_hdmi_plat_data *plat_data)
> {
> - struct platform_device *pdev = to_platform_device(dev);
> + struct device *dev = &pdev->dev;
> struct inno_hdmi *hdmi;
> int irq;
> int ret;
> @@ -1128,7 +1148,24 @@ struct inno_hdmi *inno_hdmi_bind(struct device *dev,
> if (ret)
> return ERR_PTR(ret);
>
> - ret = drm_bridge_attach(encoder, &hdmi->bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
> + return hdmi;
> +}
> +EXPORT_SYMBOL_GPL(inno_hdmi_probe);
> +
> +struct inno_hdmi *inno_hdmi_bind(struct device *dev,
> + struct drm_encoder *encoder,
> + const struct inno_hdmi_plat_data *plat_data)
> +{
> + struct platform_device *pdev = to_platform_device(dev);
> + struct inno_hdmi *hdmi;
> + int ret;
> +
> + hdmi = inno_hdmi_probe(pdev, plat_data);
> + if (IS_ERR(hdmi))
> + return hdmi;
> +
> + ret = drm_bridge_attach(encoder, &hdmi->bridge, NULL,
> + DRM_BRIDGE_ATTACH_NO_CONNECTOR);
> if (ret)
> return ERR_PTR(ret);
This clutters up the structure even more than it is right now. From "bind"
back to "probe" and "dev" back to "pdev" and calling a function called
"probe" from the bind callback.
You are right, that all the resource allocation can (and probably should)
live in the drivers probe-path, but then please call that probe function
from the actual probe path.
For example you could look at how all the Synopsys bridges do that.
Thanks
Heiko
next prev parent reply other threads:[~2026-09-30 10:03 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20260929103200eucas1p17af134cc3b93c242227964f574f13aa5@eucas1p1.samsung.com>
2026-09-29 10:30 ` [PATCH v5 00/21] drm: starfive: jh7110: Enable display subsystem Michal Wilczynski
[not found] ` <CGME20260929103203eucas1p14cb6262ba2c7bbaf36856f24f7bdc9e7@eucas1p1.samsung.com>
2026-09-29 10:30 ` [PATCH v5 01/21] drm/bridge: inno-hdmi: fix swapped HSYNC and VSYNC polarity Michal Wilczynski
[not found] ` <CGME20260929103205eucas1p202b12d36f2ec9378ceb6dba29ee4ef32@eucas1p2.samsung.com>
2026-09-29 10:30 ` [PATCH v5 02/21] dt-bindings: phy: Add starfive,jh7110-inno-hdmi-phy Michal Wilczynski
2026-09-29 20:52 ` Rob Herring (Arm)
[not found] ` <CGME20260929103207eucas1p26e12772a3af606f651f1bb396686e8f8@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 03/21] dt-bindings: display: bridge: Add starfive,jh7110-inno-hdmi-controller Michal Wilczynski
2026-09-29 21:00 ` Rob Herring (Arm)
[not found] ` <CGME20260929103210eucas1p2d7e77f1147a03dac0536f6069505ea51@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 04/21] dt-bindings: soc: starfive: Add starfive,jh7110-hdmi-subsystem Michal Wilczynski
2026-09-29 21:31 ` Rob Herring
[not found] ` <CGME20260929103212eucas1p26bca549b6b306e920b033ba7b43ae085@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 05/21] dt-bindings: soc: starfive: Add starfive,jh7110-vout-syscon Michal Wilczynski
[not found] ` <CGME20260929103214eucas1p20a39791b0286596d4c33c2e459030943@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 06/21] dt-bindings: display: verisilicon: Add starfive,jh7110-dc8200 Michal Wilczynski
2026-09-29 21:33 ` Rob Herring
[not found] ` <CGME20260929103218eucas1p29a67719fcf7d0b05e0a985f11e47ac42@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 07/21] dt-bindings: soc: starfive: Add starfive,jh7110-vout-subsystem Michal Wilczynski
[not found] ` <CGME20260929103221eucas1p264107850882dde96fcda4772332d4f41@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 08/21] drm/bridge: inno-hdmi: Split probe out of bind Michal Wilczynski
2026-09-30 10:02 ` Heiko Stübner [this message]
[not found] ` <CGME20260929103224eucas1p2eef35cb6546321736b4475b851467e6d@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 09/21] drm/bridge: inno-hdmi: Allow the register map to come from a parent Michal Wilczynski
[not found] ` <CGME20260929103227eucas1p1a8ef8d6ebb77a6f2cca192e8bc0b4e1c@eucas1p1.samsung.com>
2026-09-29 10:31 ` [PATCH v5 10/21] drm/bridge: inno-hdmi: Add .disable platform operation Michal Wilczynski
2026-09-30 10:07 ` Heiko Stübner
[not found] ` <CGME20260929103229eucas1p2e440f2ec00fdf7986eed7597674bf6a9@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 11/21] drm/bridge: inno-hdmi: Add .mode_valid " Michal Wilczynski
2026-09-30 10:19 ` Heiko Stübner
[not found] ` <CGME20260929103231eucas1p1e7b7a409de871be517c6efad3bf06881@eucas1p1.samsung.com>
2026-09-29 10:31 ` [PATCH v5 12/21] drm/bridge: inno-hdmi: Make the PHY configuration table optional Michal Wilczynski
[not found] ` <CGME20260929103233eucas1p1bc0682334aad710c3894271f46ba1f47@eucas1p1.samsung.com>
2026-09-29 10:31 ` [PATCH v5 13/21] drm/bridge: inno-hdmi: Make the register clock source selectable Michal Wilczynski
[not found] ` <CGME20260929103235eucas1p21a40b512088347e51cc4bfdbc642461e@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 14/21] soc: starfive: Add jh7110-hdmi-subsystem driver Michal Wilczynski
[not found] ` <CGME20260929103237eucas1p1d03d1d342a01af15d22a95a72244903b@eucas1p1.samsung.com>
2026-09-29 10:31 ` [PATCH v5 15/21] soc: starfive: Add jh7110-vout-subsystem driver Michal Wilczynski
[not found] ` <CGME20260929103239eucas1p1247f818ec4a8480b353ecf6209486753@eucas1p1.samsung.com>
2026-09-29 10:31 ` [PATCH v5 16/21] drm/bridge: starfive: Add JH7110 HDMI controller driver Michal Wilczynski
[not found] ` <CGME20260929103241eucas1p27d80c31d14062ea876a2c16ddbd71e3a@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 17/21] phy: Add common Innosilicon HDMI PHY helpers Michal Wilczynski
2026-09-30 10:11 ` Heiko Stübner
[not found] ` <CGME20260929103243eucas1p25abf97a357cfae14640092e35fe479fc@eucas1p2.samsung.com>
2026-09-29 10:31 ` [PATCH v5 18/21] phy: rockchip: inno-hdmi: Use the common Innosilicon " Michal Wilczynski
2026-09-30 10:14 ` Heiko Stübner
[not found] ` <CGME20260929103245eucas1p1349d00810646fbf0149f1361534c23ac@eucas1p1.samsung.com>
2026-09-29 10:31 ` [PATCH v5 19/21] phy: starfive: Add jh7110-inno-hdmi-phy driver Michal Wilczynski
[not found] ` <CGME20260929103247eucas1p1529006bbbd9223bd9bdef287763dc4d7@eucas1p1.samsung.com>
2026-09-29 10:31 ` [PATCH v5 20/21] riscv: dts: starfive: jh7110: Update DT for display subsystem Michal Wilczynski
[not found] ` <CGME20260929103250eucas1p1ea04d70d2cc6c4ddfe11e596ea9814a1@eucas1p1.samsung.com>
2026-09-29 10:31 ` [PATCH v5 21/21] MAINTAINERS: Add StarFive JH7110 display subsystem entry Michal Wilczynski
2026-09-29 14:54 ` [PATCH v5 00/21] drm: starfive: jh7110: Enable display subsystem Icenowy Zheng
2026-09-29 15:02 ` Icenowy Zheng
2026-09-30 0:20 ` Byron Stanoszek
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=6535891.44csPzL39Z@diego \
--to=heiko@sntech.de \
--cc=Laurent.pinchart@ideasonboard.com \
--cc=alex@ghiti.fr \
--cc=andrzej.hajda@intel.com \
--cc=andy.yan@rock-chips.com \
--cc=aou@eecs.berkeley.edu \
--cc=bmasney+clk@redhat.com \
--cc=chaoyi.chen@rock-chips.com \
--cc=conor+dt@kernel.org \
--cc=db@domibel.de \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=hal.feng@starfivetech.com \
--cc=hello@big-grey.co.uk \
--cc=jbrunet+clk@baylibre.com \
--cc=jernej.skrabec@gmail.com \
--cc=jonas@kwiboo.se \
--cc=jpeisach@ubuntu.com \
--cc=kernel@esmil.dk \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-clk@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-phy@lists.infradead.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-rockchip@lists.infradead.org \
--cc=luca.ceresoli@bootlin.com \
--cc=m.szyprowski@samsung.com \
--cc=m.wilczynski@samsung.com \
--cc=maarten.lankhorst@linux.intel.com \
--cc=mani@kernel.org \
--cc=maud_spierings@murena.io \
--cc=mripard@kernel.org \
--cc=mturquette@baylibre.com \
--cc=neil.armstrong@linaro.org \
--cc=p.zabel@pengutronix.de \
--cc=palmer@dabbelt.com \
--cc=pjw@kernel.org \
--cc=rfoss@kernel.org \
--cc=robh@kernel.org \
--cc=sboyd@kernel.org \
--cc=tzimmermann@suse.de \
--cc=u.kleine-koenig@baylibre.com \
--cc=vkoul@kernel.org \
--cc=zhengxingda@iscas.ac.cn \
/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
all inboxes | Powered by JetHome®