Message ID | 20210608223513.23193-10-jonathan@marek.ca |
---|---|
State | New |
Headers | show |
Series | None | expand |
Hey Jonathan, On Wed, 9 Jun 2021 at 00:37, Jonathan Marek <jonathan@marek.ca> wrote: > > At least for titan HW, CSID don't have an associated regulator. This change > is necessary to be able to model this in the CSID resources. > > Signed-off-by: Jonathan Marek <jonathan@marek.ca> > Reviewed-by: Robert Foss <robert.foss@linaro.org> > --- > drivers/media/platform/qcom/camss/camss-csid.c | 17 +++++++++++------ > 1 file changed, 11 insertions(+), 6 deletions(-) > > diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c > index cc11fbfdae132..528674dea06ca 100644 > --- a/drivers/media/platform/qcom/camss/camss-csid.c > +++ b/drivers/media/platform/qcom/camss/camss-csid.c > @@ -162,7 +162,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int on) > return ret; > } > > - ret = regulator_enable(csid->vdda); > + ret = csid->vdda ? regulator_enable(csid->vdda) : 0; > if (ret < 0) { > pm_runtime_put_sync(dev); > return ret; > @@ -170,14 +170,16 @@ static int csid_set_power(struct v4l2_subdev *sd, int on) > > ret = csid_set_clock_rates(csid); > if (ret < 0) { > - regulator_disable(csid->vdda); > + if (csid->vdda) > + regulator_disable(csid->vdda); > pm_runtime_put_sync(dev); > return ret; > } > > ret = camss_enable_clocks(csid->nclocks, csid->clock, dev); > if (ret < 0) { > - regulator_disable(csid->vdda); > + if (csid->vdda) > + regulator_disable(csid->vdda); > pm_runtime_put_sync(dev); > return ret; > } > @@ -188,7 +190,8 @@ static int csid_set_power(struct v4l2_subdev *sd, int on) > if (ret < 0) { > disable_irq(csid->irq); > camss_disable_clocks(csid->nclocks, csid->clock); > - regulator_disable(csid->vdda); > + if (csid->vdda) > + regulator_disable(csid->vdda); > pm_runtime_put_sync(dev); > return ret; > } > @@ -197,7 +200,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int on) > } else { > disable_irq(csid->irq); > camss_disable_clocks(csid->nclocks, csid->clock); > - ret = regulator_disable(csid->vdda); > + ret = csid->vdda ? regulator_disable(csid->vdda) : 0; > pm_runtime_put_sync(dev); > } > > @@ -634,7 +637,9 @@ int msm_csid_subdev_init(struct camss *camss, struct csid_device *csid, > > /* Regulator */ > > - csid->vdda = devm_regulator_get(dev, res->regulator[0]); > + csid->vdda = NULL; > + if (res->regulator[0]) > + csid->vdda = devm_regulator_get(dev, res->regulator[0]); > if (IS_ERR(csid->vdda)) { > dev_err(dev, "could not get regulator\n"); > return PTR_ERR(csid->vdda); > -- > 2.26.1 > This patch does not seem to apply on upstream-media/master.
diff --git a/drivers/media/platform/qcom/camss/camss-csid.c b/drivers/media/platform/qcom/camss/camss-csid.c index cc11fbfdae132..528674dea06ca 100644 --- a/drivers/media/platform/qcom/camss/camss-csid.c +++ b/drivers/media/platform/qcom/camss/camss-csid.c @@ -162,7 +162,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int on) return ret; } - ret = regulator_enable(csid->vdda); + ret = csid->vdda ? regulator_enable(csid->vdda) : 0; if (ret < 0) { pm_runtime_put_sync(dev); return ret; @@ -170,14 +170,16 @@ static int csid_set_power(struct v4l2_subdev *sd, int on) ret = csid_set_clock_rates(csid); if (ret < 0) { - regulator_disable(csid->vdda); + if (csid->vdda) + regulator_disable(csid->vdda); pm_runtime_put_sync(dev); return ret; } ret = camss_enable_clocks(csid->nclocks, csid->clock, dev); if (ret < 0) { - regulator_disable(csid->vdda); + if (csid->vdda) + regulator_disable(csid->vdda); pm_runtime_put_sync(dev); return ret; } @@ -188,7 +190,8 @@ static int csid_set_power(struct v4l2_subdev *sd, int on) if (ret < 0) { disable_irq(csid->irq); camss_disable_clocks(csid->nclocks, csid->clock); - regulator_disable(csid->vdda); + if (csid->vdda) + regulator_disable(csid->vdda); pm_runtime_put_sync(dev); return ret; } @@ -197,7 +200,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int on) } else { disable_irq(csid->irq); camss_disable_clocks(csid->nclocks, csid->clock); - ret = regulator_disable(csid->vdda); + ret = csid->vdda ? regulator_disable(csid->vdda) : 0; pm_runtime_put_sync(dev); } @@ -634,7 +637,9 @@ int msm_csid_subdev_init(struct camss *camss, struct csid_device *csid, /* Regulator */ - csid->vdda = devm_regulator_get(dev, res->regulator[0]); + csid->vdda = NULL; + if (res->regulator[0]) + csid->vdda = devm_regulator_get(dev, res->regulator[0]); if (IS_ERR(csid->vdda)) { dev_err(dev, "could not get regulator\n"); return PTR_ERR(csid->vdda);