On Tue, 20 Aug 2019 04:16:46 +0300
Laurent Pinchart <laurent.pinch...@ideasonboard.com> wrote:

> Now that a driver is available for display connectors, replace the
> manual connector handling code with usage of the DRM bridge API. The
> tfp410 driver doesn't deal with the display connector directly anymore,
> but still delegates drm_connector operations to the next bridge. This
> brings us one step closer to having the tfp410 driver handling the
> TFP410 only.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> ---
>  drivers/gpu/drm/bridge/ti-tfp410.c | 195 ++++++++++-------------------
>  1 file changed, 68 insertions(+), 127 deletions(-)
> 
> diff --git a/drivers/gpu/drm/bridge/ti-tfp410.c 
> b/drivers/gpu/drm/bridge/ti-tfp410.c
> index 4a468f44ef69..65651ae6c553 100644
> --- a/drivers/gpu/drm/bridge/ti-tfp410.c
> +++ b/drivers/gpu/drm/bridge/ti-tfp410.c
> @@ -4,14 +4,12 @@
>   * Author: Jyri Sarha <jsa...@ti.com>
>   */
>  
> -#include <linux/delay.h>
> -#include <linux/fwnode.h>
>  #include <linux/gpio/consumer.h>
>  #include <linux/i2c.h>
> -#include <linux/irq.h>
>  #include <linux/module.h>
>  #include <linux/of_graph.h>
>  #include <linux/platform_device.h>
> +#include <linux/workqueue.h>
>  
>  #include <drm/drm_atomic_helper.h>
>  #include <drm/drm_bridge.h>
> @@ -24,16 +22,13 @@
>  struct tfp410 {
>       struct drm_bridge       bridge;
>       struct drm_connector    connector;
> -     unsigned int            connector_type;
>  
>       u32                     bus_format;
> -     struct i2c_adapter      *ddc;
> -     struct gpio_desc        *hpd;
> -     int                     hpd_irq;
>       struct delayed_work     hpd_work;
>       struct gpio_desc        *powerdown;
>  
>       struct drm_bridge_timings timings;
> +     struct drm_bridge       *next_bridge;
>  
>       struct device *dev;
>  };
> @@ -56,10 +51,10 @@ static int tfp410_get_modes(struct drm_connector 
> *connector)
>       struct edid *edid;
>       int ret;
>  
> -     if (!dvi->ddc)
> +     if (!(dvi->next_bridge->ops & DRM_BRIDGE_OP_EDID))
>               goto fallback;
>  
> -     edid = drm_get_edid(connector, dvi->ddc);
> +     edid = dvi->next_bridge->funcs->get_edid(dvi->next_bridge, connector);

Can we create a drm_bridge_get_edid() wrapper for that?
Something like:

int drm_bridge_get_edid(struct drm_bridge *bridge,
                        struct drm_connector *conn)
{
        if (!(dvi->next_bridge->ops & DRM_BRIDGE_OP_EDID))
                return -ENOTSUPP;

        return bridge->funcs->get_edid(bridge, connector);
}

>       if (!edid) {
>               dev_info(dvi->dev,
>                        "EDID read failed. Fallback to standard modes\n");
> @@ -93,21 +88,10 @@ tfp410_connector_detect(struct drm_connector *connector, 
> bool force)
>  {
>       struct tfp410 *dvi = drm_connector_to_tfp410(connector);
>  
> -     if (dvi->hpd) {
> -             if (gpiod_get_value_cansleep(dvi->hpd))
> -                     return connector_status_connected;
> -             else
> -                     return connector_status_disconnected;
> -     }
> +     if (!(dvi->next_bridge->ops & DRM_BRIDGE_OP_DETECT))
> +             return connector_status_unknown;
>  
> -     if (dvi->ddc) {
> -             if (drm_probe_ddc(dvi->ddc))
> -                     return connector_status_connected;
> -             else
> -                     return connector_status_disconnected;
> -     }
> -
> -     return connector_status_unknown;
> +     return dvi->next_bridge->funcs->detect(dvi->next_bridge);

Same here for the detect hook.

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

Reply via email to