summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Ziswiler <marcel.ziswiler@toradex.com>2021-12-20 19:11:11 +0100
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2021-12-21 00:15:04 +0100
commit5a3492a7008609e9b45c0081145324a08dbda882 (patch)
treeb2eff18e01905c919dd4fbeb34c3ebd6036e5e35
parenta0eda828e6253600e2adf7a5ea9e465a038fe0df (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.c5
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;