From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: "Neil Armstrong" <neil.armstrong@linaro.org>,
"Robert Foss" <rfoss@kernel.org>,
"Aradhya Bhatia" <a-bhatia1@ti.com>,
"Jonas Karlman" <jonas@kwiboo.se>,
"Tomi Valkeinen" <tomi.valkeinen@ideasonboard.com>,
linux-kernel@vger.kernel.org,
"Jernej Skrabec" <jernej.skrabec@gmail.com>,
"Péter Ujfalusi" <peter.ujfalusi@gmail.com>,
"Thierry Reding" <thierry.reding@gmail.com>,
dri-devel@lists.freedesktop.org,
"Andrzej Hajda" <andrzej.hajda@intel.com>,
"Maxim Schwalm" <maxim.schwalm@gmail.com>,
"Dmitry Osipenko" <digetx@gmail.com>,
"Francesco Dolcini" <francesco@dolcini.it>
Subject: Re: [PATCH 11/11] drm/bridge: tc358768: Add DRM_BRIDGE_ATTACH_NO_CONNECTOR support
Date: Mon, 14 Aug 2023 13:17:50 +0300 [thread overview]
Message-ID: <20230814101750.GA5723@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20230814101041.GA277347@ravnborg.org>
On Mon, Aug 14, 2023 at 12:10:41PM +0200, Sam Ravnborg wrote:
> > From c13c691bd8826b978325575be9a87f577b83b86b Mon Sep 17 00:00:00 2001
> > From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> > Date: Mon, 14 Aug 2023 13:02:23 +0300
> > Subject: [PATCH] drm/bridge: tc358768: fix 'Add DRM_BRIDGE_ATTACH_NO_CONNECTOR
> > support'
> >
> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> > ---
> > drivers/gpu/drm/bridge/tc358768.c | 56 +++++++++++++------------------
> > 1 file changed, 24 insertions(+), 32 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c
> > index 82ea4d9a814a..9705ce1bd028 100644
> > --- a/drivers/gpu/drm/bridge/tc358768.c
> > +++ b/drivers/gpu/drm/bridge/tc358768.c
> > @@ -455,8 +455,6 @@ static int tc358768_dsi_host_detach(struct mipi_dsi_host *host,
> > struct tc358768_priv *priv = dsi_host_to_tc358768(host);
> >
> > drm_bridge_remove(&priv->bridge);
> > - if (priv->output.panel)
> > - drm_panel_bridge_remove(priv->output.next_bridge);
> >
> > return 0;
> > }
> > @@ -531,49 +529,42 @@ static int tc358768_bridge_attach(struct drm_bridge *bridge,
> > enum drm_bridge_attach_flags flags)
> > {
> > struct tc358768_priv *priv = bridge_to_tc358768(bridge);
> > + struct drm_bridge *next_bridge;
> > + struct drm_panel *panel;
> > + int ret;
> >
> > if (!drm_core_check_feature(bridge->dev, DRIVER_ATOMIC)) {
> > dev_err(priv->dev, "needs atomic updates support\n");
> > return -ENOTSUPP;
> > }
> >
> > - if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
> > - struct device_node *node;
> > -
> > - /* Get the next bridge, connected to port@1. */
> > - node = of_graph_get_remote_node(priv->dev->of_node, 1, -1);
> > - if (!node)
> > - return -ENODEV;
> > -
> > - priv->output.next_bridge = of_drm_find_bridge(node);
> > - of_node_put(node);
> > - if (!priv->output.next_bridge)
> > - return -EPROBE_DEFER;
> > - } else {
> > - struct drm_bridge *bridge;
> > - struct drm_panel *panel;
> > - int ret;
> > -
> > - ret = drm_of_find_panel_or_bridge(priv->dev->of_node, 1, 0,
> > - &panel, &bridge);
> > - if (ret)
> > - return ret;
> > -
> > - if (panel) {
> > - bridge = drm_panel_bridge_add_typed(panel,
> > - DRM_MODE_CONNECTOR_DSI);
> > - if (IS_ERR(bridge))
> > - return PTR_ERR(bridge);
> > - }
> > + ret = drm_of_find_panel_or_bridge(priv->dev->of_node, 1, -1, &panel,
> > + &next_bridge);
>
> I think the right way is to wrap the panel in a bridge,
> so something like:
>
> next_bridge = devm_drm_of_get_bridge(dev, priv->dev->of_node, 1, -1)
>
> if (IS_ERR(next_bridge))
> return ...
> priv->output.next_bridge = next_bridge;
Should we at some point bite the bullet and wrap panels in bridges
directly in drm_panel.c ? That would simplify all the consumers.
> > + if (ret)
> > + return ret;
> >
> > - priv->output.next_bridge = bridge;
> > - priv->output.panel = panel;
> > + if (panel) {
> > + next_bridge = drm_panel_bridge_add_typed(panel,
> > + DRM_MODE_CONNECTOR_DSI);
> > + if (IS_ERR(next_bridge))
> > + return PTR_ERR(next_bridge);
> > }
> >
> > + priv->output.next_bridge = next_bridge;
> > + priv->output.panel = panel;
> > +
> > return drm_bridge_attach(bridge->encoder, priv->output.next_bridge, bridge,
> > flags);
> > }
> >
> > +void tc358768_bridge_detach(struct drm_bridge *bridge)
> > +{
> > + struct tc358768_priv *priv = bridge_to_tc358768(bridge);
> > +
> > + if (priv->output.panel)
> > + drm_panel_bridge_remove(priv->output.next_bridge);
> > +}
> > +
> > static enum drm_mode_status
> > tc358768_bridge_mode_valid(struct drm_bridge *bridge,
> > const struct drm_display_info *info,
> > @@ -1156,6 +1147,7 @@ tc358768_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
> >
> > static const struct drm_bridge_funcs tc358768_bridge_funcs = {
> > .attach = tc358768_bridge_attach,
> > + .detach = tc358768_bridge_detach,
> > .mode_valid = tc358768_bridge_mode_valid,
> > .pre_enable = tc358768_bridge_pre_enable,
> > .enable = tc358768_bridge_enable,
--
Regards,
Laurent Pinchart
WARNING: multiple messages have this Message-ID (diff)
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: Sam Ravnborg <sam@ravnborg.org>
Cc: "Tomi Valkeinen" <tomi.valkeinen@ideasonboard.com>,
"Maxim Schwalm" <maxim.schwalm@gmail.com>,
"Andrzej Hajda" <andrzej.hajda@intel.com>,
"Neil Armstrong" <neil.armstrong@linaro.org>,
"Robert Foss" <rfoss@kernel.org>,
"Jonas Karlman" <jonas@kwiboo.se>,
"Jernej Skrabec" <jernej.skrabec@gmail.com>,
"David Airlie" <airlied@gmail.com>,
"Daniel Vetter" <daniel@ffwll.ch>,
"Péter Ujfalusi" <peter.ujfalusi@gmail.com>,
"Francesco Dolcini" <francesco@dolcini.it>,
"Dmitry Osipenko" <digetx@gmail.com>,
"Thierry Reding" <thierry.reding@gmail.com>,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
"Aradhya Bhatia" <a-bhatia1@ti.com>
Subject: Re: [PATCH 11/11] drm/bridge: tc358768: Add DRM_BRIDGE_ATTACH_NO_CONNECTOR support
Date: Mon, 14 Aug 2023 13:17:50 +0300 [thread overview]
Message-ID: <20230814101750.GA5723@pendragon.ideasonboard.com> (raw)
In-Reply-To: <20230814101041.GA277347@ravnborg.org>
On Mon, Aug 14, 2023 at 12:10:41PM +0200, Sam Ravnborg wrote:
> > From c13c691bd8826b978325575be9a87f577b83b86b Mon Sep 17 00:00:00 2001
> > From: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> > Date: Mon, 14 Aug 2023 13:02:23 +0300
> > Subject: [PATCH] drm/bridge: tc358768: fix 'Add DRM_BRIDGE_ATTACH_NO_CONNECTOR
> > support'
> >
> > Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>
> > ---
> > drivers/gpu/drm/bridge/tc358768.c | 56 +++++++++++++------------------
> > 1 file changed, 24 insertions(+), 32 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/bridge/tc358768.c b/drivers/gpu/drm/bridge/tc358768.c
> > index 82ea4d9a814a..9705ce1bd028 100644
> > --- a/drivers/gpu/drm/bridge/tc358768.c
> > +++ b/drivers/gpu/drm/bridge/tc358768.c
> > @@ -455,8 +455,6 @@ static int tc358768_dsi_host_detach(struct mipi_dsi_host *host,
> > struct tc358768_priv *priv = dsi_host_to_tc358768(host);
> >
> > drm_bridge_remove(&priv->bridge);
> > - if (priv->output.panel)
> > - drm_panel_bridge_remove(priv->output.next_bridge);
> >
> > return 0;
> > }
> > @@ -531,49 +529,42 @@ static int tc358768_bridge_attach(struct drm_bridge *bridge,
> > enum drm_bridge_attach_flags flags)
> > {
> > struct tc358768_priv *priv = bridge_to_tc358768(bridge);
> > + struct drm_bridge *next_bridge;
> > + struct drm_panel *panel;
> > + int ret;
> >
> > if (!drm_core_check_feature(bridge->dev, DRIVER_ATOMIC)) {
> > dev_err(priv->dev, "needs atomic updates support\n");
> > return -ENOTSUPP;
> > }
> >
> > - if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
> > - struct device_node *node;
> > -
> > - /* Get the next bridge, connected to port@1. */
> > - node = of_graph_get_remote_node(priv->dev->of_node, 1, -1);
> > - if (!node)
> > - return -ENODEV;
> > -
> > - priv->output.next_bridge = of_drm_find_bridge(node);
> > - of_node_put(node);
> > - if (!priv->output.next_bridge)
> > - return -EPROBE_DEFER;
> > - } else {
> > - struct drm_bridge *bridge;
> > - struct drm_panel *panel;
> > - int ret;
> > -
> > - ret = drm_of_find_panel_or_bridge(priv->dev->of_node, 1, 0,
> > - &panel, &bridge);
> > - if (ret)
> > - return ret;
> > -
> > - if (panel) {
> > - bridge = drm_panel_bridge_add_typed(panel,
> > - DRM_MODE_CONNECTOR_DSI);
> > - if (IS_ERR(bridge))
> > - return PTR_ERR(bridge);
> > - }
> > + ret = drm_of_find_panel_or_bridge(priv->dev->of_node, 1, -1, &panel,
> > + &next_bridge);
>
> I think the right way is to wrap the panel in a bridge,
> so something like:
>
> next_bridge = devm_drm_of_get_bridge(dev, priv->dev->of_node, 1, -1)
>
> if (IS_ERR(next_bridge))
> return ...
> priv->output.next_bridge = next_bridge;
Should we at some point bite the bullet and wrap panels in bridges
directly in drm_panel.c ? That would simplify all the consumers.
> > + if (ret)
> > + return ret;
> >
> > - priv->output.next_bridge = bridge;
> > - priv->output.panel = panel;
> > + if (panel) {
> > + next_bridge = drm_panel_bridge_add_typed(panel,
> > + DRM_MODE_CONNECTOR_DSI);
> > + if (IS_ERR(next_bridge))
> > + return PTR_ERR(next_bridge);
> > }
> >
> > + priv->output.next_bridge = next_bridge;
> > + priv->output.panel = panel;
> > +
> > return drm_bridge_attach(bridge->encoder, priv->output.next_bridge, bridge,
> > flags);
> > }
> >
> > +void tc358768_bridge_detach(struct drm_bridge *bridge)
> > +{
> > + struct tc358768_priv *priv = bridge_to_tc358768(bridge);
> > +
> > + if (priv->output.panel)
> > + drm_panel_bridge_remove(priv->output.next_bridge);
> > +}
> > +
> > static enum drm_mode_status
> > tc358768_bridge_mode_valid(struct drm_bridge *bridge,
> > const struct drm_display_info *info,
> > @@ -1156,6 +1147,7 @@ tc358768_atomic_get_input_bus_fmts(struct drm_bridge *bridge,
> >
> > static const struct drm_bridge_funcs tc358768_bridge_funcs = {
> > .attach = tc358768_bridge_attach,
> > + .detach = tc358768_bridge_detach,
> > .mode_valid = tc358768_bridge_mode_valid,
> > .pre_enable = tc358768_bridge_pre_enable,
> > .enable = tc358768_bridge_enable,
--
Regards,
Laurent Pinchart
next prev parent reply other threads:[~2023-08-14 10:17 UTC|newest]
Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-04 10:44 [PATCH 00/11] drm/bridge: tc358768: Fixes and timings improvements Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-04 10:44 ` [PATCH 01/11] drm/bridge: tc358768: Fix use of uninitialized variable Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:19 ` Péter Ujfalusi
2023-08-11 16:19 ` Péter Ujfalusi
2023-08-04 10:44 ` [PATCH 02/11] drm/bridge: tc358768: Fix bit updates Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:23 ` Péter Ujfalusi
2023-08-11 16:23 ` Péter Ujfalusi
2023-08-11 17:02 ` Tomi Valkeinen
2023-08-11 17:02 ` Tomi Valkeinen
2023-08-13 0:23 ` Maxim Schwalm
2023-08-14 6:34 ` Tomi Valkeinen
2023-08-15 17:21 ` Maxim Schwalm
2023-08-15 17:21 ` Maxim Schwalm
2023-08-16 8:14 ` Tomi Valkeinen
2023-08-16 8:14 ` Tomi Valkeinen
2023-08-16 8:21 ` Tomi Valkeinen
2023-08-16 8:21 ` Tomi Valkeinen
2023-08-04 10:44 ` [PATCH 03/11] drm/bridge: tc358768: Cleanup PLL calculations Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:25 ` Péter Ujfalusi
2023-08-11 16:25 ` Péter Ujfalusi
2023-08-04 10:44 ` [PATCH 04/11] drm/bridge: tc358768: Use struct videomode Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:26 ` Péter Ujfalusi
2023-08-11 16:26 ` Péter Ujfalusi
2023-08-04 10:44 ` [PATCH 05/11] drm/bridge: tc358768: Print logical values, not raw register values Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:31 ` Péter Ujfalusi
2023-08-11 16:31 ` Péter Ujfalusi
2023-08-11 17:05 ` Tomi Valkeinen
2023-08-11 17:05 ` Tomi Valkeinen
2023-08-04 10:44 ` [PATCH 06/11] drm/bridge: tc358768: Use dev for dbg prints, not priv->dev Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:32 ` Péter Ujfalusi
2023-08-11 16:32 ` Péter Ujfalusi
2023-08-04 10:44 ` [PATCH 07/11] drm/bridge: tc358768: Rename dsibclk to hsbyteclk Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:33 ` Péter Ujfalusi
2023-08-11 16:33 ` Péter Ujfalusi
2023-08-04 10:44 ` [PATCH 08/11] drm/bridge: tc358768: Clean up clock period code Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:34 ` Péter Ujfalusi
2023-08-11 16:34 ` Péter Ujfalusi
2023-08-04 10:44 ` [PATCH 09/11] drm/bridge: tc358768: Fix tc358768_ns_to_cnt() Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:35 ` Péter Ujfalusi
2023-08-11 16:35 ` Péter Ujfalusi
2023-08-04 10:44 ` [PATCH 10/11] drm/bridge: tc358768: Attempt to fix DSI horizontal timings Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:39 ` Péter Ujfalusi
2023-08-11 16:39 ` Péter Ujfalusi
2023-08-04 10:44 ` [PATCH 11/11] drm/bridge: tc358768: Add DRM_BRIDGE_ATTACH_NO_CONNECTOR support Tomi Valkeinen
2023-08-04 10:44 ` Tomi Valkeinen
2023-08-11 16:44 ` Péter Ujfalusi
2023-08-11 16:44 ` Péter Ujfalusi
2023-08-11 16:58 ` Tomi Valkeinen
2023-08-11 16:58 ` Tomi Valkeinen
2023-08-13 17:11 ` Maxim Schwalm
2023-08-13 17:11 ` Maxim Schwalm
2023-08-14 7:31 ` Tomi Valkeinen
2023-08-14 7:31 ` Tomi Valkeinen
2023-08-14 10:04 ` Tomi Valkeinen
2023-08-14 10:04 ` Tomi Valkeinen
2023-08-14 10:10 ` Sam Ravnborg
2023-08-14 10:10 ` Sam Ravnborg
2023-08-14 10:17 ` Laurent Pinchart [this message]
2023-08-14 10:17 ` Laurent Pinchart
2023-08-14 13:29 ` Tomi Valkeinen
2023-08-14 13:29 ` Tomi Valkeinen
2023-08-15 17:44 ` Maxim Schwalm
2023-08-15 17:44 ` Maxim Schwalm
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=20230814101750.GA5723@pendragon.ideasonboard.com \
--to=laurent.pinchart@ideasonboard.com \
--cc=a-bhatia1@ti.com \
--cc=andrzej.hajda@intel.com \
--cc=digetx@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=francesco@dolcini.it \
--cc=jernej.skrabec@gmail.com \
--cc=jonas@kwiboo.se \
--cc=linux-kernel@vger.kernel.org \
--cc=maxim.schwalm@gmail.com \
--cc=neil.armstrong@linaro.org \
--cc=peter.ujfalusi@gmail.com \
--cc=rfoss@kernel.org \
--cc=sam@ravnborg.org \
--cc=thierry.reding@gmail.com \
--cc=tomi.valkeinen@ideasonboard.com \
/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.