dri-devel.lists.freedesktop.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 0/4] drm: tc358764: support drm bridge connector helper
@ 2020-04-14  8:47 Sam Ravnborg
  2020-04-14  8:47 ` [PATCH v1 1/4] drm/panel: add connector type to boe, hv070wsa-100 panel Sam Ravnborg
                   ` (3 more replies)
  0 siblings, 4 replies; 11+ messages in thread
From: Sam Ravnborg @ 2020-04-14  8:47 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart, Inki Dae
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, Andrzej Hajda,
	Thierry Reding, Sam Ravnborg

Somehow Laurent tricked me into updating a bridge driver.
In reality, having updated a driver yourself makes for much
better understanding of what is going on.
So in order to provide proper review feedback I deciced to give
it a spin. tc358764 was selected as it is a simple bridge driver,
so a good driver to start out with.

We are moving to a model where the panel tell what connector
it uses - so this patch assumes this model is in place.

The only device tree in the kernel that uses tc358764
use the boe,hv070wsa-100 panel, so update this panel to report
the correct connector type to support the model described above.

The "drop drm_connector_(un)register" patch drops some
unnessesary calls related to drm_connector.

Next update tc358764 to use drm_panel_bridge - which was a
nice simplification of the driver.

The last patch to support optional connector creation was
then simple to implement.

The patchset has not seen any run-time test.
So testing feedback is appreciated. The only in-kernel
user seems to be: exynos5250-arndale

Review feedback is likewise appreciated/expected - bridge
drivers is not my expertise area.

	Sam


Sam Ravnborg (4):
      drm/panel: add connector type to boe,hv070wsa-100 panel
      drm/bridge: tc358764: drop drm_connector_(un)register
      drm/bridge: tc358764: add drm_panel_bridge support
      drm/bridge: tc358764: make connector creation optional

 drivers/gpu/drm/bridge/tc358764.c    | 68 ++++++++++--------------------------
 drivers/gpu/drm/panel/panel-simple.c |  1 +
 2 files changed, 19 insertions(+), 50 deletions(-)


_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v1 1/4] drm/panel: add connector type to boe, hv070wsa-100 panel
  2020-04-14  8:47 [PATCH v1 0/4] drm: tc358764: support drm bridge connector helper Sam Ravnborg
@ 2020-04-14  8:47 ` Sam Ravnborg
  2020-04-14  9:32   ` Laurent Pinchart
  2020-04-14  8:47 ` [PATCH v1 2/4] drm/bridge: tc358764: drop drm_connector_(un)register Sam Ravnborg
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 11+ messages in thread
From: Sam Ravnborg @ 2020-04-14  8:47 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart, Inki Dae
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, Andrzej Hajda,
	Thierry Reding, Sam Ravnborg

The boe,hv070wsa-100 panel is a LVDS panel.
Fix connector type to reflect this.

With this change users of this panel do not have to specify the
connector type.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
---
 drivers/gpu/drm/panel/panel-simple.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
index 44a1f5dfb571..749115c98ee2 100644
--- a/drivers/gpu/drm/panel/panel-simple.c
+++ b/drivers/gpu/drm/panel/panel-simple.c
@@ -1059,6 +1059,7 @@ static const struct panel_desc boe_hv070wsa = {
 		.width = 154,
 		.height = 90,
 	},
+	.connector_type = DRM_MODE_CONNECTOR_LVDS,
 };
 
 static const struct drm_display_mode boe_nv101wxmn51_modes[] = {
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v1 2/4] drm/bridge: tc358764: drop drm_connector_(un)register
  2020-04-14  8:47 [PATCH v1 0/4] drm: tc358764: support drm bridge connector helper Sam Ravnborg
  2020-04-14  8:47 ` [PATCH v1 1/4] drm/panel: add connector type to boe, hv070wsa-100 panel Sam Ravnborg
@ 2020-04-14  8:47 ` Sam Ravnborg
  2020-04-14  9:33   ` Laurent Pinchart
  2020-04-14  8:47 ` [PATCH v1 3/4] drm/bridge: tc358764: add drm_panel_bridge support Sam Ravnborg
  2020-04-14  8:47 ` [PATCH v1 4/4] drm/bridge: tc358764: make connector creation optional Sam Ravnborg
  3 siblings, 1 reply; 11+ messages in thread
From: Sam Ravnborg @ 2020-04-14  8:47 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart, Inki Dae
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, Andrzej Hajda,
	Thierry Reding, Sam Ravnborg

Drop drm_connector handling that is not needed:

- drm_dev_register() in the display controlelr driver takes
  care of registering connectors.
  So the call to drm_connector_register() call is not needed in the bridge
  driver.

- Use of drm_connector_unregister() is only required for drivers that
  explicit have called drm_dev_register.

- The reference counting using drm_connector_put() is likewise not needed.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@siol.net>
---
 drivers/gpu/drm/bridge/tc358764.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
index 5ac1430fab04..a277739fab58 100644
--- a/drivers/gpu/drm/bridge/tc358764.c
+++ b/drivers/gpu/drm/bridge/tc358764.c
@@ -375,7 +375,6 @@ static int tc358764_attach(struct drm_bridge *bridge,
 	drm_connector_attach_encoder(&ctx->connector, bridge->encoder);
 	drm_panel_attach(ctx->panel, &ctx->connector);
 	ctx->connector.funcs->reset(&ctx->connector);
-	drm_connector_register(&ctx->connector);
 
 	return 0;
 }
@@ -384,10 +383,8 @@ static void tc358764_detach(struct drm_bridge *bridge)
 {
 	struct tc358764 *ctx = bridge_to_tc358764(bridge);
 
-	drm_connector_unregister(&ctx->connector);
 	drm_panel_detach(ctx->panel);
 	ctx->panel = NULL;
-	drm_connector_put(&ctx->connector);
 }
 
 static const struct drm_bridge_funcs tc358764_bridge_funcs = {
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v1 3/4] drm/bridge: tc358764: add drm_panel_bridge support
  2020-04-14  8:47 [PATCH v1 0/4] drm: tc358764: support drm bridge connector helper Sam Ravnborg
  2020-04-14  8:47 ` [PATCH v1 1/4] drm/panel: add connector type to boe, hv070wsa-100 panel Sam Ravnborg
  2020-04-14  8:47 ` [PATCH v1 2/4] drm/bridge: tc358764: drop drm_connector_(un)register Sam Ravnborg
@ 2020-04-14  8:47 ` Sam Ravnborg
  2020-04-14  9:35   ` Laurent Pinchart
  2020-04-14  8:47 ` [PATCH v1 4/4] drm/bridge: tc358764: make connector creation optional Sam Ravnborg
  3 siblings, 1 reply; 11+ messages in thread
From: Sam Ravnborg @ 2020-04-14  8:47 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart, Inki Dae
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, Andrzej Hajda,
	Thierry Reding, Sam Ravnborg

Prepare the bridge driver for use in a chained setup by
replacing direct use of drm_panel with drm_panel_bridge support.

Note that this change requires that the panel reports the correct
type of connector.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@siol.net>
---
 drivers/gpu/drm/bridge/tc358764.c | 59 +++++++++----------------------
 1 file changed, 16 insertions(+), 43 deletions(-)

diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
index a277739fab58..a5abf15e5c7f 100644
--- a/drivers/gpu/drm/bridge/tc358764.c
+++ b/drivers/gpu/drm/bridge/tc358764.c
@@ -156,7 +156,7 @@ struct tc358764 {
 	struct drm_connector connector;
 	struct regulator_bulk_data supplies[ARRAY_SIZE(tc358764_supplies)];
 	struct gpio_desc *gpio_reset;
-	struct drm_panel *panel;
+	struct drm_bridge *panel_bridge;
 	int error;
 };
 
@@ -282,7 +282,7 @@ static int tc358764_get_modes(struct drm_connector *connector)
 {
 	struct tc358764 *ctx = connector_to_tc358764(connector);
 
-	return drm_panel_get_modes(ctx->panel, connector);
+	return drm_bridge_get_modes(ctx->panel_bridge, connector);
 }
 
 static const
@@ -298,23 +298,11 @@ static const struct drm_connector_funcs tc358764_connector_funcs = {
 	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
 };
 
-static void tc358764_disable(struct drm_bridge *bridge)
-{
-	struct tc358764 *ctx = bridge_to_tc358764(bridge);
-	int ret = drm_panel_disable(bridge_to_tc358764(bridge)->panel);
-
-	if (ret < 0)
-		dev_err(ctx->dev, "error disabling panel (%d)\n", ret);
-}
-
 static void tc358764_post_disable(struct drm_bridge *bridge)
 {
 	struct tc358764 *ctx = bridge_to_tc358764(bridge);
 	int ret;
 
-	ret = drm_panel_unprepare(ctx->panel);
-	if (ret < 0)
-		dev_err(ctx->dev, "error unpreparing panel (%d)\n", ret);
 	tc358764_reset(ctx);
 	usleep_range(10000, 15000);
 	ret = regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
@@ -335,18 +323,6 @@ static void tc358764_pre_enable(struct drm_bridge *bridge)
 	ret = tc358764_init(ctx);
 	if (ret < 0)
 		dev_err(ctx->dev, "error initializing bridge (%d)\n", ret);
-	ret = drm_panel_prepare(ctx->panel);
-	if (ret < 0)
-		dev_err(ctx->dev, "error preparing panel (%d)\n", ret);
-}
-
-static void tc358764_enable(struct drm_bridge *bridge)
-{
-	struct tc358764 *ctx = bridge_to_tc358764(bridge);
-	int ret = drm_panel_enable(ctx->panel);
-
-	if (ret < 0)
-		dev_err(ctx->dev, "error enabling panel (%d)\n", ret);
 }
 
 static int tc358764_attach(struct drm_bridge *bridge,
@@ -356,6 +332,11 @@ static int tc358764_attach(struct drm_bridge *bridge,
 	struct drm_device *drm = bridge->dev;
 	int ret;
 
+	ret = drm_bridge_attach(bridge->encoder, ctx->panel_bridge,
+				bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
+	if (ret < 0)
+		return ret;
+
 	if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
 		DRM_ERROR("Fix bridge driver to make connector optional!");
 		return -EINVAL;
@@ -373,32 +354,21 @@ static int tc358764_attach(struct drm_bridge *bridge,
 	drm_connector_helper_add(&ctx->connector,
 				 &tc358764_connector_helper_funcs);
 	drm_connector_attach_encoder(&ctx->connector, bridge->encoder);
-	drm_panel_attach(ctx->panel, &ctx->connector);
 	ctx->connector.funcs->reset(&ctx->connector);
 
 	return 0;
 }
 
-static void tc358764_detach(struct drm_bridge *bridge)
-{
-	struct tc358764 *ctx = bridge_to_tc358764(bridge);
-
-	drm_panel_detach(ctx->panel);
-	ctx->panel = NULL;
-}
-
 static const struct drm_bridge_funcs tc358764_bridge_funcs = {
-	.disable = tc358764_disable,
 	.post_disable = tc358764_post_disable,
-	.enable = tc358764_enable,
 	.pre_enable = tc358764_pre_enable,
 	.attach = tc358764_attach,
-	.detach = tc358764_detach,
 };
 
 static int tc358764_parse_dt(struct tc358764 *ctx)
 {
 	struct device *dev = ctx->dev;
+	struct drm_panel *panel;
 	int ret;
 
 	ctx->gpio_reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
@@ -407,12 +377,15 @@ static int tc358764_parse_dt(struct tc358764 *ctx)
 		return PTR_ERR(ctx->gpio_reset);
 	}
 
-	ret = drm_of_find_panel_or_bridge(ctx->dev->of_node, 1, 0, &ctx->panel,
-					  NULL);
-	if (ret && ret != -EPROBE_DEFER)
-		dev_err(dev, "cannot find panel (%d)\n", ret);
+	ret = drm_of_find_panel_or_bridge(dev->of_node, 1, 0, &panel, NULL);
+	if (ret)
+		return ret;
 
-	return ret;
+	ctx->panel_bridge = devm_drm_panel_bridge_add(dev, panel);
+	if (IS_ERR(ctx->panel_bridge))
+		return PTR_ERR(ctx->panel_bridge);
+
+	return 0;
 }
 
 static int tc358764_configure_regulators(struct tc358764 *ctx)
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v1 4/4] drm/bridge: tc358764: make connector creation optional
  2020-04-14  8:47 [PATCH v1 0/4] drm: tc358764: support drm bridge connector helper Sam Ravnborg
                   ` (2 preceding siblings ...)
  2020-04-14  8:47 ` [PATCH v1 3/4] drm/bridge: tc358764: add drm_panel_bridge support Sam Ravnborg
@ 2020-04-14  8:47 ` Sam Ravnborg
  2020-04-14  9:38   ` Laurent Pinchart
  3 siblings, 1 reply; 11+ messages in thread
From: Sam Ravnborg @ 2020-04-14  8:47 UTC (permalink / raw)
  To: dri-devel, Laurent Pinchart, Inki Dae
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, Andrzej Hajda,
	Thierry Reding, Sam Ravnborg

Make the connector creation optional to enable usage of the
tc358764 bridge with the DRM bridge connector helper.

Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
Cc: Andrzej Hajda <a.hajda@samsung.com>
Cc: Neil Armstrong <narmstrong@baylibre.com>
Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
Cc: Jonas Karlman <jonas@kwiboo.se>
Cc: Jernej Skrabec <jernej.skrabec@siol.net>
---
 drivers/gpu/drm/bridge/tc358764.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
index a5abf15e5c7f..4ebabea86040 100644
--- a/drivers/gpu/drm/bridge/tc358764.c
+++ b/drivers/gpu/drm/bridge/tc358764.c
@@ -337,10 +337,8 @@ static int tc358764_attach(struct drm_bridge *bridge,
 	if (ret < 0)
 		return ret;
 
-	if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
-		DRM_ERROR("Fix bridge driver to make connector optional!");
-		return -EINVAL;
-	}
+	if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
+		return 0;
 
 	ctx->connector.polled = DRM_CONNECTOR_POLL_HPD;
 	ret = drm_connector_init(drm, &ctx->connector,
-- 
2.20.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 1/4] drm/panel: add connector type to boe, hv070wsa-100 panel
  2020-04-14  8:47 ` [PATCH v1 1/4] drm/panel: add connector type to boe, hv070wsa-100 panel Sam Ravnborg
@ 2020-04-14  9:32   ` Laurent Pinchart
  0 siblings, 0 replies; 11+ messages in thread
From: Laurent Pinchart @ 2020-04-14  9:32 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, dri-devel,
	Andrzej Hajda, Thierry Reding

Hi Sam,

Thank you for the patch.

On Tue, Apr 14, 2020 at 10:47:24AM +0200, Sam Ravnborg wrote:
> The boe,hv070wsa-100 panel is a LVDS panel.
> Fix connector type to reflect this.
> 
> With this change users of this panel do not have to specify the
> connector type.
> 
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Thierry Reding <thierry.reding@gmail.com>
> Cc: Sam Ravnborg <sam@ravnborg.org>
> ---
>  drivers/gpu/drm/panel/panel-simple.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/gpu/drm/panel/panel-simple.c b/drivers/gpu/drm/panel/panel-simple.c
> index 44a1f5dfb571..749115c98ee2 100644
> --- a/drivers/gpu/drm/panel/panel-simple.c
> +++ b/drivers/gpu/drm/panel/panel-simple.c
> @@ -1059,6 +1059,7 @@ static const struct panel_desc boe_hv070wsa = {
>  		.width = 154,
>  		.height = 90,
>  	},
> +	.connector_type = DRM_MODE_CONNECTOR_LVDS,

While at it, could you set .bus_format too ? It's particularly important
for LVDS panels.

>  };
>  
>  static const struct drm_display_mode boe_nv101wxmn51_modes[] = {

-- 
Regards,

Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 2/4] drm/bridge: tc358764: drop drm_connector_(un)register
  2020-04-14  8:47 ` [PATCH v1 2/4] drm/bridge: tc358764: drop drm_connector_(un)register Sam Ravnborg
@ 2020-04-14  9:33   ` Laurent Pinchart
  0 siblings, 0 replies; 11+ messages in thread
From: Laurent Pinchart @ 2020-04-14  9:33 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, dri-devel,
	Andrzej Hajda, Thierry Reding

Hi Sam,

Thank you for the patch.

On Tue, Apr 14, 2020 at 10:47:25AM +0200, Sam Ravnborg wrote:
> Drop drm_connector handling that is not needed:
> 
> - drm_dev_register() in the display controlelr driver takes

s/controlelr/controller/

>   care of registering connectors.
>   So the call to drm_connector_register() call is not needed in the bridge
>   driver.
> 
> - Use of drm_connector_unregister() is only required for drivers that
>   explicit have called drm_dev_register.
> 
> - The reference counting using drm_connector_put() is likewise not needed.
> 
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Andrzej Hajda <a.hajda@samsung.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@siol.net>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> ---
>  drivers/gpu/drm/bridge/tc358764.c | 3 ---
>  1 file changed, 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
> index 5ac1430fab04..a277739fab58 100644
> --- a/drivers/gpu/drm/bridge/tc358764.c
> +++ b/drivers/gpu/drm/bridge/tc358764.c
> @@ -375,7 +375,6 @@ static int tc358764_attach(struct drm_bridge *bridge,
>  	drm_connector_attach_encoder(&ctx->connector, bridge->encoder);
>  	drm_panel_attach(ctx->panel, &ctx->connector);
>  	ctx->connector.funcs->reset(&ctx->connector);
> -	drm_connector_register(&ctx->connector);
>  
>  	return 0;
>  }
> @@ -384,10 +383,8 @@ static void tc358764_detach(struct drm_bridge *bridge)
>  {
>  	struct tc358764 *ctx = bridge_to_tc358764(bridge);
>  
> -	drm_connector_unregister(&ctx->connector);
>  	drm_panel_detach(ctx->panel);
>  	ctx->panel = NULL;
> -	drm_connector_put(&ctx->connector);
>  }
>  
>  static const struct drm_bridge_funcs tc358764_bridge_funcs = {

-- 
Regards,

Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 3/4] drm/bridge: tc358764: add drm_panel_bridge support
  2020-04-14  8:47 ` [PATCH v1 3/4] drm/bridge: tc358764: add drm_panel_bridge support Sam Ravnborg
@ 2020-04-14  9:35   ` Laurent Pinchart
  0 siblings, 0 replies; 11+ messages in thread
From: Laurent Pinchart @ 2020-04-14  9:35 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, dri-devel,
	Andrzej Hajda, Thierry Reding

Hi Sam,

Thank you for the patch.

On Tue, Apr 14, 2020 at 10:47:26AM +0200, Sam Ravnborg wrote:
> Prepare the bridge driver for use in a chained setup by
> replacing direct use of drm_panel with drm_panel_bridge support.
> 
> Note that this change requires that the panel reports the correct
> type of connector.
> 
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Andrzej Hajda <a.hajda@samsung.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@siol.net>
> ---
>  drivers/gpu/drm/bridge/tc358764.c | 59 +++++++++----------------------
>  1 file changed, 16 insertions(+), 43 deletions(-)

I like the diffstat :-)

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

> 
> diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
> index a277739fab58..a5abf15e5c7f 100644
> --- a/drivers/gpu/drm/bridge/tc358764.c
> +++ b/drivers/gpu/drm/bridge/tc358764.c
> @@ -156,7 +156,7 @@ struct tc358764 {
>  	struct drm_connector connector;
>  	struct regulator_bulk_data supplies[ARRAY_SIZE(tc358764_supplies)];
>  	struct gpio_desc *gpio_reset;
> -	struct drm_panel *panel;
> +	struct drm_bridge *panel_bridge;
>  	int error;
>  };
>  
> @@ -282,7 +282,7 @@ static int tc358764_get_modes(struct drm_connector *connector)
>  {
>  	struct tc358764 *ctx = connector_to_tc358764(connector);
>  
> -	return drm_panel_get_modes(ctx->panel, connector);
> +	return drm_bridge_get_modes(ctx->panel_bridge, connector);
>  }
>  
>  static const
> @@ -298,23 +298,11 @@ static const struct drm_connector_funcs tc358764_connector_funcs = {
>  	.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
>  };
>  
> -static void tc358764_disable(struct drm_bridge *bridge)
> -{
> -	struct tc358764 *ctx = bridge_to_tc358764(bridge);
> -	int ret = drm_panel_disable(bridge_to_tc358764(bridge)->panel);
> -
> -	if (ret < 0)
> -		dev_err(ctx->dev, "error disabling panel (%d)\n", ret);
> -}
> -
>  static void tc358764_post_disable(struct drm_bridge *bridge)
>  {
>  	struct tc358764 *ctx = bridge_to_tc358764(bridge);
>  	int ret;
>  
> -	ret = drm_panel_unprepare(ctx->panel);
> -	if (ret < 0)
> -		dev_err(ctx->dev, "error unpreparing panel (%d)\n", ret);
>  	tc358764_reset(ctx);
>  	usleep_range(10000, 15000);
>  	ret = regulator_bulk_disable(ARRAY_SIZE(ctx->supplies), ctx->supplies);
> @@ -335,18 +323,6 @@ static void tc358764_pre_enable(struct drm_bridge *bridge)
>  	ret = tc358764_init(ctx);
>  	if (ret < 0)
>  		dev_err(ctx->dev, "error initializing bridge (%d)\n", ret);
> -	ret = drm_panel_prepare(ctx->panel);
> -	if (ret < 0)
> -		dev_err(ctx->dev, "error preparing panel (%d)\n", ret);
> -}
> -
> -static void tc358764_enable(struct drm_bridge *bridge)
> -{
> -	struct tc358764 *ctx = bridge_to_tc358764(bridge);
> -	int ret = drm_panel_enable(ctx->panel);
> -
> -	if (ret < 0)
> -		dev_err(ctx->dev, "error enabling panel (%d)\n", ret);
>  }
>  
>  static int tc358764_attach(struct drm_bridge *bridge,
> @@ -356,6 +332,11 @@ static int tc358764_attach(struct drm_bridge *bridge,
>  	struct drm_device *drm = bridge->dev;
>  	int ret;
>  
> +	ret = drm_bridge_attach(bridge->encoder, ctx->panel_bridge,
> +				bridge, DRM_BRIDGE_ATTACH_NO_CONNECTOR);
> +	if (ret < 0)
> +		return ret;
> +
>  	if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
>  		DRM_ERROR("Fix bridge driver to make connector optional!");
>  		return -EINVAL;
> @@ -373,32 +354,21 @@ static int tc358764_attach(struct drm_bridge *bridge,
>  	drm_connector_helper_add(&ctx->connector,
>  				 &tc358764_connector_helper_funcs);
>  	drm_connector_attach_encoder(&ctx->connector, bridge->encoder);
> -	drm_panel_attach(ctx->panel, &ctx->connector);
>  	ctx->connector.funcs->reset(&ctx->connector);
>  
>  	return 0;
>  }
>  
> -static void tc358764_detach(struct drm_bridge *bridge)
> -{
> -	struct tc358764 *ctx = bridge_to_tc358764(bridge);
> -
> -	drm_panel_detach(ctx->panel);
> -	ctx->panel = NULL;
> -}
> -
>  static const struct drm_bridge_funcs tc358764_bridge_funcs = {
> -	.disable = tc358764_disable,
>  	.post_disable = tc358764_post_disable,
> -	.enable = tc358764_enable,
>  	.pre_enable = tc358764_pre_enable,
>  	.attach = tc358764_attach,
> -	.detach = tc358764_detach,
>  };
>  
>  static int tc358764_parse_dt(struct tc358764 *ctx)
>  {
>  	struct device *dev = ctx->dev;
> +	struct drm_panel *panel;
>  	int ret;
>  
>  	ctx->gpio_reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
> @@ -407,12 +377,15 @@ static int tc358764_parse_dt(struct tc358764 *ctx)
>  		return PTR_ERR(ctx->gpio_reset);
>  	}
>  
> -	ret = drm_of_find_panel_or_bridge(ctx->dev->of_node, 1, 0, &ctx->panel,
> -					  NULL);
> -	if (ret && ret != -EPROBE_DEFER)
> -		dev_err(dev, "cannot find panel (%d)\n", ret);
> +	ret = drm_of_find_panel_or_bridge(dev->of_node, 1, 0, &panel, NULL);
> +	if (ret)
> +		return ret;
>  
> -	return ret;
> +	ctx->panel_bridge = devm_drm_panel_bridge_add(dev, panel);
> +	if (IS_ERR(ctx->panel_bridge))
> +		return PTR_ERR(ctx->panel_bridge);
> +
> +	return 0;
>  }
>  
>  static int tc358764_configure_regulators(struct tc358764 *ctx)

-- 
Regards,

Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 4/4] drm/bridge: tc358764: make connector creation optional
  2020-04-14  8:47 ` [PATCH v1 4/4] drm/bridge: tc358764: make connector creation optional Sam Ravnborg
@ 2020-04-14  9:38   ` Laurent Pinchart
  2020-04-14 13:36     ` Sam Ravnborg
  0 siblings, 1 reply; 11+ messages in thread
From: Laurent Pinchart @ 2020-04-14  9:38 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, dri-devel,
	Andrzej Hajda, Thierry Reding

Hi Sam,

Thank you for the patch.

On Tue, Apr 14, 2020 at 10:47:27AM +0200, Sam Ravnborg wrote:
> Make the connector creation optional to enable usage of the
> tc358764 bridge with the DRM bridge connector helper.
> 
> Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> Cc: Andrzej Hajda <a.hajda@samsung.com>
> Cc: Neil Armstrong <narmstrong@baylibre.com>
> Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> Cc: Jonas Karlman <jonas@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skrabec@siol.net>

Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Thank you for the conversion. "Just a few" more bridge drivers to go,
and then there will be no more excuse not to use the DRM bridge
connector helper :-)

> ---
>  drivers/gpu/drm/bridge/tc358764.c | 6 ++----
>  1 file changed, 2 insertions(+), 4 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/tc358764.c b/drivers/gpu/drm/bridge/tc358764.c
> index a5abf15e5c7f..4ebabea86040 100644
> --- a/drivers/gpu/drm/bridge/tc358764.c
> +++ b/drivers/gpu/drm/bridge/tc358764.c
> @@ -337,10 +337,8 @@ static int tc358764_attach(struct drm_bridge *bridge,
>  	if (ret < 0)
>  		return ret;
>  
> -	if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
> -		DRM_ERROR("Fix bridge driver to make connector optional!");
> -		return -EINVAL;
> -	}
> +	if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR)
> +		return 0;
>  
>  	ctx->connector.polled = DRM_CONNECTOR_POLL_HPD;
>  	ret = drm_connector_init(drm, &ctx->connector,

-- 
Regards,

Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 4/4] drm/bridge: tc358764: make connector creation optional
  2020-04-14  9:38   ` Laurent Pinchart
@ 2020-04-14 13:36     ` Sam Ravnborg
  2020-04-14 13:41       ` Laurent Pinchart
  0 siblings, 1 reply; 11+ messages in thread
From: Sam Ravnborg @ 2020-04-14 13:36 UTC (permalink / raw)
  To: Laurent Pinchart
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, dri-devel,
	Andrzej Hajda, Thierry Reding

On Tue, Apr 14, 2020 at 12:38:16PM +0300, Laurent Pinchart wrote:
> Hi Sam,
> 
> Thank you for the patch.
> 
> On Tue, Apr 14, 2020 at 10:47:27AM +0200, Sam Ravnborg wrote:
> > Make the connector creation optional to enable usage of the
> > tc358764 bridge with the DRM bridge connector helper.
> > 
> > Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> > Cc: Andrzej Hajda <a.hajda@samsung.com>
> > Cc: Neil Armstrong <narmstrong@baylibre.com>
> > Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> > Cc: Jonas Karlman <jonas@kwiboo.se>
> > Cc: Jernej Skrabec <jernej.skrabec@siol.net>
> 
> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>

Thanks. I will wait a few days for more feedback before applying.
 
> Thank you for the conversion. "Just a few" more bridge drivers to go,
> and then there will be no more excuse not to use the DRM bridge
> connector helper :-)

A quick grep for ATTACH and drm_bridge_attach_flags gave me following list:

adv7511				ongoing, Laurent
analogix/analogix-anx6345	todo
analogix/analogix-anx78xx	todo
analogix/analogix_dp_core	todo
cdns-dsi			done?
display-connector.c		done
lvds-codec			done?
megachips-stdpxxxx-ge-b850v3-fw	todo
nwl-dsi				(ongoing), Guido
nxp-ptn3460			todo
panel.c				done
parade-ps8622			todo
parade-ps8640			done?
sii902x				todo
sil-sii8620			done?
simple-bridge			ongoing, Laurent
synopsys/dw-hdmi		todo
synopsys/dw-mipi-dsi		done?
tc358764			ongoing, Sam
tc358767			todo
tc358768			done?
thc63lvd1024			done?
ti-sn65dsi86			todo
ti-tfp410			done
ti-tpd12s015			todo

3	done
7	done?
4	ongoing
11	todo

Maybe a little simplistic - but gives some kind of overview.

Drivers marked with "Done?" do not have any hits for ATTACH,
dunno if they need more attantion.

I will try to take a look at a few of the trivial conversions
later this week.

	Sam
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v1 4/4] drm/bridge: tc358764: make connector creation optional
  2020-04-14 13:36     ` Sam Ravnborg
@ 2020-04-14 13:41       ` Laurent Pinchart
  0 siblings, 0 replies; 11+ messages in thread
From: Laurent Pinchart @ 2020-04-14 13:41 UTC (permalink / raw)
  To: Sam Ravnborg
  Cc: Jernej Skrabec, Neil Armstrong, Jonas Karlman, dri-devel,
	Andrzej Hajda, Thierry Reding

Hi Sam,

On Tue, Apr 14, 2020 at 03:36:26PM +0200, Sam Ravnborg wrote:
> On Tue, Apr 14, 2020 at 12:38:16PM +0300, Laurent Pinchart wrote:
> > On Tue, Apr 14, 2020 at 10:47:27AM +0200, Sam Ravnborg wrote:
> > > Make the connector creation optional to enable usage of the
> > > tc358764 bridge with the DRM bridge connector helper.
> > > 
> > > Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
> > > Cc: Andrzej Hajda <a.hajda@samsung.com>
> > > Cc: Neil Armstrong <narmstrong@baylibre.com>
> > > Cc: Laurent Pinchart <Laurent.pinchart@ideasonboard.com>
> > > Cc: Jonas Karlman <jonas@kwiboo.se>
> > > Cc: Jernej Skrabec <jernej.skrabec@siol.net>
> > 
> > Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
> 
> Thanks. I will wait a few days for more feedback before applying.
>  
> > Thank you for the conversion. "Just a few" more bridge drivers to go,
> > and then there will be no more excuse not to use the DRM bridge
> > connector helper :-)
> 
> A quick grep for ATTACH and drm_bridge_attach_flags gave me following list:
> 
> adv7511				ongoing, Laurent
> analogix/analogix-anx6345	todo
> analogix/analogix-anx78xx	todo
> analogix/analogix_dp_core	todo
> cdns-dsi			done?
> display-connector.c		done
> lvds-codec			done?
> megachips-stdpxxxx-ge-b850v3-fw	todo
> nwl-dsi				(ongoing), Guido
> nxp-ptn3460			todo
> panel.c				done
> parade-ps8622			todo
> parade-ps8640			done?
> sii902x				todo
> sil-sii8620			done?
> simple-bridge			ongoing, Laurent
> synopsys/dw-hdmi		todo
> synopsys/dw-mipi-dsi		done?
> tc358764			ongoing, Sam
> tc358767			todo
> tc358768			done?
> thc63lvd1024			done?
> ti-sn65dsi86			todo
> ti-tfp410			done
> ti-tpd12s015			todo
> 
> 3	done
> 7	done?
> 4	ongoing
> 11	todo
> 
> Maybe a little simplistic - but gives some kind of overview.

Please note there are also bridge drivers in individual drivers
directories. For instance I'll convert rcar-du/rcar-lvds.

> Drivers marked with "Done?" do not have any hits for ATTACH,
> dunno if they need more attantion.

No, those drivers never had connector support in the first place, so as
far as I can tell they're good. I haven't checked if some of them need
to move to the DRM bridge panel helper, but if they don't create a
connector in the first place, they should already be using it.

> I will try to take a look at a few of the trivial conversions
> later this week.

Thanks a lot for that !

-- 
Regards,

Laurent Pinchart
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2020-04-14 13:41 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-14  8:47 [PATCH v1 0/4] drm: tc358764: support drm bridge connector helper Sam Ravnborg
2020-04-14  8:47 ` [PATCH v1 1/4] drm/panel: add connector type to boe, hv070wsa-100 panel Sam Ravnborg
2020-04-14  9:32   ` Laurent Pinchart
2020-04-14  8:47 ` [PATCH v1 2/4] drm/bridge: tc358764: drop drm_connector_(un)register Sam Ravnborg
2020-04-14  9:33   ` Laurent Pinchart
2020-04-14  8:47 ` [PATCH v1 3/4] drm/bridge: tc358764: add drm_panel_bridge support Sam Ravnborg
2020-04-14  9:35   ` Laurent Pinchart
2020-04-14  8:47 ` [PATCH v1 4/4] drm/bridge: tc358764: make connector creation optional Sam Ravnborg
2020-04-14  9:38   ` Laurent Pinchart
2020-04-14 13:36     ` Sam Ravnborg
2020-04-14 13:41       ` Laurent Pinchart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).