media: omap3isp: Return -EPROBE_DEFER if the required regulators can't be obtained
authorPavel Machek <pavel@ucw.cz>
Thu, 2 Mar 2017 12:45:32 +0000 (07:45 -0500)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 19 Jul 2017 19:49:45 +0000 (15:49 -0400)
If regulator returns -EPROBE_DEFER, we need to return it too, so that
omap3isp will be re-probed when regulator is ready.

Signed-off-by: Pavel Machek <pavel@ucw.cz>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Sakari Ailus <sakari.ailus@linux.intel.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/platform/omap3isp/isp.c
drivers/media/platform/omap3isp/ispccp2.c

index db2cccb..dbaede0 100644 (file)
@@ -1880,7 +1880,8 @@ static int isp_initialize_modules(struct isp_device *isp)
 
        ret = omap3isp_ccp2_init(isp);
        if (ret < 0) {
-               dev_err(isp->dev, "CCP2 initialization failed\n");
+               if (ret != -EPROBE_DEFER)
+                       dev_err(isp->dev, "CCP2 initialization failed\n");
                goto error_ccp2;
        }
 
index 588f67a..8b6f7d2 100644 (file)
@@ -1137,6 +1137,11 @@ int omap3isp_ccp2_init(struct isp_device *isp)
        if (isp->revision == ISP_REVISION_2_0) {
                ccp2->vdds_csib = devm_regulator_get(isp->dev, "vdds_csib");
                if (IS_ERR(ccp2->vdds_csib)) {
+                       if (PTR_ERR(ccp2->vdds_csib) == -EPROBE_DEFER) {
+                               dev_dbg(isp->dev,
+                                       "Can't get regulator vdds_csib, deferring probing\n");
+                               return -EPROBE_DEFER;
+                       }
                        dev_dbg(isp->dev,
                                "Could not get regulator vdds_csib\n");
                        ccp2->vdds_csib = NULL;