diff options
author | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2021-12-20 19:11:11 +0100 |
---|---|---|
committer | Marcel Ziswiler <marcel.ziswiler@toradex.com> | 2021-12-21 00:15:04 +0100 |
commit | 5a3492a7008609e9b45c0081145324a08dbda882 (patch) | |
tree | b2eff18e01905c919dd4fbeb34c3ebd6036e5e35 | |
parent | a0eda828e6253600e2adf7a5ea9e465a038fe0df (diff) |
drm: imx: sec-dsim: fix probe deferral
Fix probe deferral not continuously re-trying but rather giving other
components a chance to successfully be bound.
Signed-off-by: Marcel Ziswiler <marcel.ziswiler@toradex.com>
-rw-r--r-- | drivers/gpu/drm/imx/sec_mipi_dsim-imx.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/gpu/drm/imx/sec_mipi_dsim-imx.c b/drivers/gpu/drm/imx/sec_mipi_dsim-imx.c index 9bd9b2c6b9f5..b58589e4959b 100644 --- a/drivers/gpu/drm/imx/sec_mipi_dsim-imx.c +++ b/drivers/gpu/drm/imx/sec_mipi_dsim-imx.c @@ -286,6 +286,7 @@ static int imx_sec_dsim_bind(struct device *dev, struct device *master, dev); const struct sec_mipi_dsim_plat_data *pdata; struct drm_encoder *encoder; + static int retry = 0; dev_dbg(dev, "%s: dsim bind begin\n", __func__); @@ -329,7 +330,7 @@ static int imx_sec_dsim_bind(struct device *dev, struct device *master, /* bind sec dsim bridge */ ret = sec_mipi_dsim_bind(dev, master, data, encoder, res, irq, pdata); if (ret) { - dev_err(dev, "failed to bind sec dsim bridge: %d\n", ret); + dev_err(dev, "failed to bind sec dsim bridge: %d, retry %d\n", ret, retry); pm_runtime_disable(dev); drm_encoder_cleanup(encoder); sec_dsim_of_put_resets(dsim_dev); @@ -341,7 +342,7 @@ static int imx_sec_dsim_bind(struct device *dev, struct device *master, * it follows 'one fails, all fail'. It is useful * when there exists multiple heads display. */ - if (ret == -ENODEV) + if ((ret == -ENODEV) || ((retry++ >= 3) && (ret == -EPROBE_DEFER))) return 0; return ret; |