[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20210511180728.23781-10-jonathan@marek.ca>
Date: Tue, 11 May 2021 14:07:16 -0400
From: Jonathan Marek <jonathan@...ek.ca>
To: linux-arm-msm@...r.kernel.org
Cc: robert.foss@...aro.org, andrey.konovalov@...aro.org,
Todor Tomov <todor.too@...il.com>,
Andy Gross <agross@...nel.org>,
Bjorn Andersson <bjorn.andersson@...aro.org>,
Mauro Carvalho Chehab <mchehab@...nel.org>,
linux-media@...r.kernel.org (open list:QUALCOMM CAMERA SUBSYSTEM DRIVER),
linux-kernel@...r.kernel.org (open list)
Subject: [PATCH 09/17] media: camss: csid: allow csid to work without a regulator
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@...ek.ca>
---
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 cc11fbfdae13..528674dea06c 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
Powered by blists - more mailing lists