Hi,

On Tue, Jul 18, 2017 at 01:01:13AM +0300, Sakari Ailus wrote:
> From: Pavel Machek <pa...@ucw.cz>
> 
> 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 <pa...@ucw.cz>
> Reviewed-by: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
> Signed-off-by: Sakari Ailus <sakari.ai...@linux.intel.com>
> ---
>  drivers/media/platform/omap3isp/isp.c     | 3 ++-
>  drivers/media/platform/omap3isp/ispccp2.c | 5 +++++
>  2 files changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/platform/omap3isp/isp.c 
> b/drivers/media/platform/omap3isp/isp.c
> index 80ed5a5f862a..4e6ba7f90e35 100644
> --- a/drivers/media/platform/omap3isp/isp.c
> +++ b/drivers/media/platform/omap3isp/isp.c
> @@ -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;
>       }
>  
> diff --git a/drivers/media/platform/omap3isp/ispccp2.c 
> b/drivers/media/platform/omap3isp/ispccp2.c
> index 4f8fd0c00748..47210b102bcb 100644
> --- a/drivers/media/platform/omap3isp/ispccp2.c
> +++ b/drivers/media/platform/omap3isp/ispccp2.c
> @@ -1140,6 +1140,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;
> +                     }

I wonder if the right approach wouldn't be to always bail out for
errors. devm_regulator_get should provide a dummy regulator if
none is specified. If we get an error here it means something is
configured incorrectly or we have serious problems.

>                       dev_dbg(isp->dev,
>                               "Could not get regulator vdds_csib\n");
>                       ccp2->vdds_csib = NULL;

-- Sebastian

Attachment: signature.asc
Description: PGP signature

Reply via email to