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>
This commit is contained in:
parent
fa440d8703
commit
8e8fddab0d
2 changed files with 13 additions and 1 deletions
|
@ -16,6 +16,7 @@
|
||||||
#include "rcar_du_drv.h"
|
#include "rcar_du_drv.h"
|
||||||
#include "rcar_du_encoder.h"
|
#include "rcar_du_encoder.h"
|
||||||
#include "rcar_du_kms.h"
|
#include "rcar_du_kms.h"
|
||||||
|
#include "rcar_lvds.h"
|
||||||
|
|
||||||
/* -----------------------------------------------------------------------------
|
/* -----------------------------------------------------------------------------
|
||||||
* Encoder
|
* 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,
|
ret = drm_encoder_init(rcdu->ddev, encoder, &encoder_funcs,
|
||||||
DRM_MODE_ENCODER_NONE, NULL);
|
DRM_MODE_ENCODER_NONE, NULL);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
|
|
|
@ -378,7 +378,7 @@ static int rcar_du_encoders_init_one(struct rcar_du_device *rcdu,
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = rcar_du_encoder_init(rcdu, output, entity);
|
ret = rcar_du_encoder_init(rcdu, output, entity);
|
||||||
if (ret && ret != -EPROBE_DEFER)
|
if (ret && ret != -EPROBE_DEFER && ret != -ENOLINK)
|
||||||
dev_warn(rcdu->dev,
|
dev_warn(rcdu->dev,
|
||||||
"failed to initialize encoder %pOF on output %u (%d), skipping\n",
|
"failed to initialize encoder %pOF on output %u (%d), skipping\n",
|
||||||
entity, output, ret);
|
entity, output, ret);
|
||||||
|
|
Loading…
Add table
Reference in a new issue