Re: [PATCH 09/17] media: camss: csid: allow csid to work without a regulator

From: Robert Foss
Date: Thu Jun 10 2021 - 04:03:00 EST


Hey Jonathan,

On Wed, 9 Jun 2021 at 00:37, Jonathan Marek <jonathan@xxxxxxxx> 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@xxxxxxxx>
> Reviewed-by: Robert Foss <robert.foss@xxxxxxxxxx>
> ---
> 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.