Hi Sam,

Thank you for the patch.

On Fri, Jul 03, 2020 at 09:24:14PM +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: the bridge panel will use the connector type from the panel.
> 
> Signed-off-by: Sam Ravnborg <s...@ravnborg.org>
> Cc: Andrzej Hajda <a.ha...@samsung.com>
> Cc: Neil Armstrong <narmstr...@baylibre.com>
> Cc: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> Cc: Jonas Karlman <jo...@kwiboo.se>
> Cc: Jernej Skrabec <jernej.skra...@siol.net>
> ---
>  drivers/gpu/drm/bridge/nxp-ptn3460.c | 51 ++++++++--------------------
>  1 file changed, 14 insertions(+), 37 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/nxp-ptn3460.c 
> b/drivers/gpu/drm/bridge/nxp-ptn3460.c
> index 438e566ce0a4..0bd9f0e451b3 100644
> --- a/drivers/gpu/drm/bridge/nxp-ptn3460.c
> +++ b/drivers/gpu/drm/bridge/nxp-ptn3460.c
> @@ -30,7 +30,7 @@ struct ptn3460_bridge {
>       struct i2c_client *client;
>       struct drm_bridge bridge;
>       struct edid *edid;
> -     struct drm_panel *panel;
> +     struct drm_bridge *panel_bridge;
>       struct gpio_desc *gpio_pd_n;
>       struct gpio_desc *gpio_rst_n;
>       u32 edid_emulation;
> @@ -127,11 +127,6 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge)
>       usleep_range(10, 20);
>       gpiod_set_value(ptn_bridge->gpio_rst_n, 1);
>  
> -     if (drm_panel_prepare(ptn_bridge->panel)) {
> -             DRM_ERROR("failed to prepare panel\n");
> -             return;
> -     }
> -
>       /*
>        * There's a bug in the PTN chip where it falsely asserts hotplug before
>        * it is fully functional. We're forced to wait for the maximum start up
> @@ -146,16 +141,6 @@ static void ptn3460_pre_enable(struct drm_bridge *bridge)
>       ptn_bridge->enabled = true;
>  }
>  
> -static void ptn3460_enable(struct drm_bridge *bridge)
> -{
> -     struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge);
> -
> -     if (drm_panel_enable(ptn_bridge->panel)) {
> -             DRM_ERROR("failed to enable panel\n");
> -             return;
> -     }
> -}
> -
>  static void ptn3460_disable(struct drm_bridge *bridge)
>  {
>       struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge);
> @@ -165,25 +150,10 @@ static void ptn3460_disable(struct drm_bridge *bridge)
>  
>       ptn_bridge->enabled = false;
>  
> -     if (drm_panel_disable(ptn_bridge->panel)) {
> -             DRM_ERROR("failed to disable panel\n");
> -             return;
> -     }
> -
>       gpiod_set_value(ptn_bridge->gpio_rst_n, 1);
>       gpiod_set_value(ptn_bridge->gpio_pd_n, 0);
>  }
>  
> -static void ptn3460_post_disable(struct drm_bridge *bridge)
> -{
> -     struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge);
> -
> -     if (drm_panel_unprepare(ptn_bridge->panel)) {
> -             DRM_ERROR("failed to unprepare panel\n");
> -             return;
> -     }
> -}
> -
>  static int ptn3460_get_modes(struct drm_connector *connector)
>  {
>       struct ptn3460_bridge *ptn_bridge;
> @@ -242,6 +212,11 @@ static int ptn3460_bridge_attach(struct drm_bridge 
> *bridge,
>       struct ptn3460_bridge *ptn_bridge = bridge_to_ptn3460(bridge);
>       int ret;
>  
> +     ret = drm_bridge_attach(bridge->encoder, ptn_bridge->panel_bridge,
> +                             bridge, flags);

Same as earlier in the series about the flags.

> +     if (ret < 0)
> +             return ret;
> +
>       if (flags & DRM_BRIDGE_ATTACH_NO_CONNECTOR) {
>               DRM_ERROR("Fix bridge driver to make connector optional!");
>               return -EINVAL;
> @@ -265,9 +240,6 @@ static int ptn3460_bridge_attach(struct drm_bridge 
> *bridge,
>       drm_connector_attach_encoder(&ptn_bridge->connector,
>                                                       bridge->encoder);
>  
> -     if (ptn_bridge->panel)
> -             drm_panel_attach(ptn_bridge->panel, &ptn_bridge->connector);
> -
>       drm_helper_hpd_irq_event(ptn_bridge->connector.dev);
>  
>       return ret;
> @@ -275,9 +247,7 @@ static int ptn3460_bridge_attach(struct drm_bridge 
> *bridge,
>  
>  static const struct drm_bridge_funcs ptn3460_bridge_funcs = {
>       .pre_enable = ptn3460_pre_enable,
> -     .enable = ptn3460_enable,
>       .disable = ptn3460_disable,
> -     .post_disable = ptn3460_post_disable,
>       .attach = ptn3460_bridge_attach,
>  };
>  
> @@ -286,6 +256,8 @@ static int ptn3460_probe(struct i2c_client *client,
>  {
>       struct device *dev = &client->dev;
>       struct ptn3460_bridge *ptn_bridge;
> +     struct drm_bridge *pbridge;
> +     struct drm_panel *panel;
>       int ret;
>  
>       ptn_bridge = devm_kzalloc(dev, sizeof(*ptn_bridge), GFP_KERNEL);
> @@ -293,10 +265,15 @@ static int ptn3460_probe(struct i2c_client *client,
>               return -ENOMEM;
>       }
>  
> -     ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0, 
> &ptn_bridge->panel, NULL);
> +     ret = drm_of_find_panel_or_bridge(dev->of_node, 0, 0, &panel, NULL);
>       if (ret)
>               return ret;
>  
> +     pbridge = devm_drm_panel_bridge_add(dev, panel);
> +     if (IS_ERR(pbridge))
> +             return PTR_ERR(pbridge);
> +
> +     ptn_bridge->panel_bridge = pbridge;
>       ptn_bridge->client = client;
>  
>       ptn_bridge->gpio_pd_n = devm_gpiod_get(&client->dev, "powerdown",

-- 
Regards,

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

Reply via email to