Hi Laurent,

On 28/05/2019 15:12, Laurent Pinchart wrote:
> In dual-link LVDS mode, the LVDS1 encoder is used as a companion for
> LVDS0, and both encoders transmit data from DU0. The LVDS1 output of DU1
> can't be used in that case, don't create an encoder and connector for
> it.
> 
> Signed-off-by: Laurent Pinchart <[email protected]>
> Reviewed-by: Jacopo Mondi <[email protected]>
> Tested-by: Jacopo Mondi <[email protected]>

And finally, Last one...

Reviewed-by: Kieran Bingham <[email protected]>

> ---
> Changess since v2:
> 
> - Remove unneeded bridge NULL check
> ---
>  drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 12 ++++++++++++
>  drivers/gpu/drm/rcar-du/rcar_du_kms.c     |  2 +-
>  2 files changed, 13 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c 
> b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> index 6c91753af7bc..0f00bdfe2366 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_encoder.c
> @@ -16,6 +16,7 @@
>  #include "rcar_du_drv.h"
>  #include "rcar_du_encoder.h"
>  #include "rcar_du_kms.h"
> +#include "rcar_lvds.h"
>  
>  /* 
> -----------------------------------------------------------------------------
>   * Encoder
> @@ -97,6 +98,17 @@ int rcar_du_encoder_init(struct rcar_du_device *rcdu,
>               }
>       }
>  
> +     /*
> +      * On Gen3 skip the LVDS1 output if the LVDS1 encoder is used as a
> +      * companion for LVDS0 in dual-link mode.
> +      */
> +     if (rcdu->info->gen >= 3 && output == RCAR_DU_OUTPUT_LVDS1) {
> +             if (rcar_lvds_dual_link(bridge)) {
> +                     ret = -ENOLINK;
> +                     goto done;
> +             }
> +     }
> +
>       ret = drm_encoder_init(rcdu->ddev, encoder, &encoder_funcs,
>                              DRM_MODE_ENCODER_NONE, NULL);
>       if (ret < 0)
> diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c 
> b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> index f8f7fff34dff..95c81e59e2f1 100644
> --- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> +++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
> @@ -378,7 +378,7 @@ static int rcar_du_encoders_init_one(struct 
> rcar_du_device *rcdu,
>       }
>  
>       ret = rcar_du_encoder_init(rcdu, output, entity);
> -     if (ret && ret != -EPROBE_DEFER)
> +     if (ret && ret != -EPROBE_DEFER && ret != -ENOLINK)
>               dev_warn(rcdu->dev,
>                        "failed to initialize encoder %pOF on output %u (%d), 
> skipping\n",
>                        entity, output, ret);
> 

-- 
Regards
--
Kieran

Reply via email to