mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-01 08:04:22 +08:00
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@marek.ca> Reviewed-by: Robert Foss <robert.foss@linaro.org> Tested-by: Julian Grahsl <jgrahsl@snap.com> Tested-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
This commit is contained in:
parent
ee780cd7be
commit
e54ef952d5
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user