diff options
| author | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2019-03-05 00:10:28 +0200 | 
|---|---|---|
| committer | Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> | 2019-06-08 02:36:04 +0300 | 
| commit | 8e8fddab0d0acdefb1ad76852d954b2bbaa3896d (patch) | |
| tree | 32a59ff7187d1e53ae0f55339a5164383ebee646 | |
| parent | fa440d870358fd01eeedd212a1ad918a3b2771d5 (diff) | |
| download | blackbird-op-linux-8e8fddab0d0acdefb1ad76852d954b2bbaa3896d.tar.gz blackbird-op-linux-8e8fddab0d0acdefb1ad76852d954b2bbaa3896d.zip  | |
drm: rcar-du: Skip LVDS1 output on Gen3 when using dual-link LVDS mode
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 <laurent.pinchart+renesas@ideasonboard.com>
Reviewed-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
Tested-by: Jacopo Mondi <jacopo+renesas@jmondi.org>
Acked-by: Sam Ravnborg <sam@ravnborg.org>
Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
| -rw-r--r-- | drivers/gpu/drm/rcar-du/rcar_du_encoder.c | 12 | ||||
| -rw-r--r-- | drivers/gpu/drm/rcar-du/rcar_du_kms.c | 2 | 
2 files changed, 13 insertions, 1 deletions
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);  | 

