Hi Niklas, Em Tue, 27 Apr 2021 22:12:30 +0200 Niklas Söderlund <niklas.soderlund@xxxxxxxxxxxx> escreveu: > Hi Mauro, > > On 2021-04-27 12:27:08 +0200, Mauro Carvalho Chehab wrote: > > Commit dd8088d5a896 ("PM: runtime: Add pm_runtime_resume_and_get to deal with usage counter") > > added pm_runtime_resume_and_get() in order to automatically handle > > dev->power.usage_count decrement on errors. > > > > Use the new API, in order to cleanup the error check logic. > > > > Reviewed-by: Niklas Söderlund <niklas.soderlund+renesas@xxxxxxxxxxxx> > > Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@xxxxxxxxxx> > > --- > > drivers/media/platform/rcar-vin/rcar-csi2.c | 6 ++++++ > > drivers/media/platform/rcar-vin/rcar-dma.c | 6 ++---- > > drivers/media/platform/rcar-vin/rcar-v4l2.c | 6 ++---- > > 3 files changed, 10 insertions(+), 8 deletions(-) > > > > diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c b/drivers/media/platform/rcar-vin/rcar-csi2.c > > index e06cd512aba2..ce8e84f9e3d9 100644 > > --- a/drivers/media/platform/rcar-vin/rcar-csi2.c > > +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c > > @@ -408,6 +408,12 @@ static void rcsi2_enter_standby(struct rcar_csi2 *priv) > > > > static void rcsi2_exit_standby(struct rcar_csi2 *priv) > > { > > + /* > > + * The code at rcsi2_enter_standby() assumes > > + * inconditionally that PM runtime usage count was > > + * incremented. So, it shouldn't use pm_runtime_resume_and_get() > > + * here. > > + */ > > pm_runtime_get_sync(priv->dev); > > I think this comment is a bit much. I won't object if you really want to > keep it but my preference would be to drop it. Hmm... I guess we could do this, instead: diff --git a/drivers/media/platform/rcar-vin/rcar-csi2.c b/drivers/media/platform/rcar-vin/rcar-csi2.c index e06cd512aba2..1fc2e6f4b607 100644 --- a/drivers/media/platform/rcar-vin/rcar-csi2.c +++ b/drivers/media/platform/rcar-vin/rcar-csi2.c @@ -406,9 +406,14 @@ static void rcsi2_enter_standby(struct rcar_csi2 *priv) pm_runtime_put(priv->dev); } -static void rcsi2_exit_standby(struct rcar_csi2 *priv) +static int rcsi2_exit_standby(struct rcar_csi2 *priv) { - pm_runtime_get_sync(priv->dev); + int ret; + + ret = pm_runtime_resume_and_get(priv->dev); + if (ret < 0) + return ret; + reset_control_deassert(priv->rstc); } @@ -657,7 +662,9 @@ static int rcsi2_start(struct rcar_csi2 *priv) { int ret; - rcsi2_exit_standby(priv); + ret = rcsi2_exit_standby(priv); + if (ret < 0) + return ret; ret = rcsi2_start_receiver(priv); if (ret) { Thanks, Mauro