Hi Lucas, On Wed, 2018-04-11 at 17:31 +0200, Lucas Stach wrote: > The LVDS signal integrity is only guaranteed when the correct enable > sequence (first IPU DI, then LDB) is used. If the LDB display output was > active before the imx-drm driver is loaded (like when a bootsplash was > active) the DI will be disabled by the full IPU reset we do when loading > the driver. The LDB control registers are not part of the IPU range and > thus will remain unchanged. > > This leads to the LDB still being active when the DI is getting enabled, > effectively reversing the required enable sequence. Fix this by also > disabling the LDB on driver bind. > > Signed-off-by: Lucas Stach <l.stach@xxxxxxxxxxxxxx> > --- > drivers/gpu/drm/imx/imx-ldb.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c > index 56dd7a9a8e25..17974c0b4be8 100644 > --- a/drivers/gpu/drm/imx/imx-ldb.c > +++ b/drivers/gpu/drm/imx/imx-ldb.c > @@ -612,6 +612,9 @@ static int imx_ldb_bind(struct device *dev, struct device *master, void *data) > return PTR_ERR(imx_ldb->regmap); > } > > + /* disable LDB by resetting the control register to POR default */ > + regmap_write(imx_ldb->regmap, IOMUXC_GPR2, 0); > + Both patches look good to me in principle, but wouldn't the correct place to do this be imx_ldb_encoder_funcs.reset: struct drm_encoder_funcs { /** * @reset: * * Reset encoder hardware and software state to off. This function isn't * called by the core directly, only through drm_mode_config_reset(). * It's not a helper hook only for historical reasons. */ void (*reset)(struct drm_encoder *encoder); [...] }; regards Philipp _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel