This is an automatic generated email to let you know that the following patch 
were queued:

Subject: media: camss: csid: allow csid to work without a regulator
Author:  Jonathan Marek <[email protected]>
Date:    Wed Dec 22 01:37:42 2021 +0100

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 <[email protected]>
Reviewed-by: Robert Foss <[email protected]>
Tested-by: Julian Grahsl <[email protected]>
Tested-by: Bryan O'Donoghue <[email protected]>
Signed-off-by: Bryan O'Donoghue <[email protected]>
Signed-off-by: Hans Verkuil <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>

 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 a1637b78568b..1226913c623b 100644
--- a/drivers/media/platform/qcom/camss/camss-csid.c
+++ b/drivers/media/platform/qcom/camss/camss-csid.c
@@ -160,7 +160,7 @@ static int csid_set_power(struct v4l2_subdev *sd, int on)
                if (ret < 0)
                        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;
@@ -168,14 +168,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;
                }
@@ -186,7 +188,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;
                }
@@ -195,7 +198,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);
        }
 
@@ -631,7 +634,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);

_______________________________________________
linuxtv-commits mailing list
[email protected]
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to