On Wed, 28 Apr 2021 16:51:30 +0200 Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> wrote: > Calling pm_runtime_get_sync() is bad, since even when it > returns an error, pm_runtime_put*() should be called. > So, use instead pm_runtime_resume_and_get(). > > While here, ensure that the error condition will be checked > during clock enable an media open() calls. > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> Reviewed-by: Jonathan Cameron <Jonathan.Cameron@xxxxxxxxxx> > --- > drivers/media/platform/marvell-ccic/mcam-core.c | 9 +++++++-- > 1 file changed, 7 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/platform/marvell-ccic/mcam-core.c b/drivers/media/platform/marvell-ccic/mcam-core.c > index 141bf5d97a04..ea87110d9073 100644 > --- a/drivers/media/platform/marvell-ccic/mcam-core.c > +++ b/drivers/media/platform/marvell-ccic/mcam-core.c > @@ -918,6 +918,7 @@ static int mclk_enable(struct clk_hw *hw) > struct mcam_camera *cam = container_of(hw, struct mcam_camera, mclk_hw); > int mclk_src; > int mclk_div; > + int ret; > > /* > * Clock the sensor appropriately. Controller clock should > @@ -931,7 +932,9 @@ static int mclk_enable(struct clk_hw *hw) > mclk_div = 2; > } > > - pm_runtime_get_sync(cam->dev); > + ret = pm_runtime_resume_and_get(cam->dev); > + if (ret < 0) > + return ret; > clk_enable(cam->clk[0]); > mcam_reg_write(cam, REG_CLKCTRL, (mclk_src << 29) | mclk_div); > mcam_ctlr_power_up(cam); > @@ -1611,7 +1614,9 @@ static int mcam_v4l_open(struct file *filp) > ret = sensor_call(cam, core, s_power, 1); > if (ret) > goto out; > - pm_runtime_get_sync(cam->dev); > + ret = pm_runtime_resume_and_get(cam->dev); > + if (ret < 0) > + goto out; > __mcam_cam_reset(cam); > mcam_set_config_needed(cam, 1); > }