The avdd-dsi-csi-supply is CSI power supply not VI, hence move it to
proper place.
Signed-off-by: Svyatoslav Ryhel <clamor95@gmail.com>
---
drivers/staging/media/tegra-video/csi.c | 19 ++++++++++++++++++-
drivers/staging/media/tegra-video/vi.c | 23 ++---------------------
drivers/staging/media/tegra-video/vi.h | 2 --
include/linux/tegra-csi.h | 2 ++
4 files changed, 22 insertions(+), 24 deletions(-)
diff --git a/drivers/staging/media/tegra-video/csi.c b/drivers/staging/media/tegra-video/csi.c
index c848e4ab51ac..1677eb51ec21 100644
--- a/drivers/staging/media/tegra-video/csi.c
+++ b/drivers/staging/media/tegra-video/csi.c
@@ -710,6 +710,8 @@ static int __maybe_unused csi_runtime_suspend(struct device *dev)
clk_bulk_disable_unprepare(csi->soc->num_clks, csi->clks);
+ regulator_disable(csi->vdd);
+
return 0;
}
@@ -718,13 +720,23 @@ static int __maybe_unused csi_runtime_resume(struct device *dev)
struct tegra_csi *csi = dev_get_drvdata(dev);
int ret;
+ ret = regulator_enable(csi->vdd);
+ if (ret) {
+ dev_err(dev, "failed to enable VDD supply: %d\n", ret);
+ return ret;
+ }
+
ret = clk_bulk_prepare_enable(csi->soc->num_clks, csi->clks);
if (ret < 0) {
dev_err(csi->dev, "failed to enable clocks: %d\n", ret);
- return ret;
+ goto disable_vdd;
}
return 0;
+
+disable_vdd:
+ regulator_disable(csi->vdd);
+ return ret;
}
static int tegra_csi_init(struct host1x_client *client)
@@ -802,6 +814,11 @@ static int tegra_csi_probe(struct platform_device *pdev)
return ret;
}
+ csi->vdd = devm_regulator_get(&pdev->dev, "avdd-dsi-csi");
+ if (IS_ERR(csi->vdd))
+ return dev_err_probe(&pdev->dev, PTR_ERR(csi->vdd),
+ "failed to get VDD supply");
+
if (!pdev->dev.pm_domain) {
ret = -ENOENT;
dev_warn(&pdev->dev, "PM domain is not attached: %d\n", ret);
diff --git a/drivers/staging/media/tegra-video/vi.c b/drivers/staging/media/tegra-video/vi.c
index 2deb615547be..05af718b3cdf 100644
--- a/drivers/staging/media/tegra-video/vi.c
+++ b/drivers/staging/media/tegra-video/vi.c
@@ -1405,29 +1405,19 @@ static int __maybe_unused vi_runtime_resume(struct device *dev)
struct tegra_vi *vi = dev_get_drvdata(dev);
int ret;
- ret = regulator_enable(vi->vdd);
- if (ret) {
- dev_err(dev, "failed to enable VDD supply: %d\n", ret);
- return ret;
- }
-
ret = clk_set_rate(vi->clk, vi->soc->vi_max_clk_hz);
if (ret) {
dev_err(dev, "failed to set vi clock rate: %d\n", ret);
- goto disable_vdd;
+ return ret;
}
ret = clk_prepare_enable(vi->clk);
if (ret) {
dev_err(dev, "failed to enable vi clock: %d\n", ret);
- goto disable_vdd;
+ return ret;
}
return 0;
-
-disable_vdd:
- regulator_disable(vi->vdd);
- return ret;
}
static int __maybe_unused vi_runtime_suspend(struct device *dev)
@@ -1436,8 +1426,6 @@ static int __maybe_unused vi_runtime_suspend(struct device *dev)
clk_disable_unprepare(vi->clk);
- regulator_disable(vi->vdd);
-
return 0;
}
@@ -1882,13 +1870,6 @@ static int tegra_vi_probe(struct platform_device *pdev)
return ret;
}
- vi->vdd = devm_regulator_get(&pdev->dev, "avdd-dsi-csi");
- if (IS_ERR(vi->vdd)) {
- ret = PTR_ERR(vi->vdd);
- dev_err(&pdev->dev, "failed to get VDD supply: %d\n", ret);
- return ret;
- }
-
if (!pdev->dev.pm_domain) {
ret = -ENOENT;
dev_warn(&pdev->dev, "PM domain is not attached: %d\n", ret);
diff --git a/drivers/staging/media/tegra-video/vi.h b/drivers/staging/media/tegra-video/vi.h
index 64655ac1b41f..367667adf745 100644
--- a/drivers/staging/media/tegra-video/vi.h
+++ b/drivers/staging/media/tegra-video/vi.h
@@ -93,7 +93,6 @@ struct tegra_vi_soc {
* @client: host1x_client struct
* @iomem: register base
* @clk: main clock for VI block
- * @vdd: vdd regulator for VI hardware, normally it is avdd_dsi_csi
* @soc: pointer to SoC data structure
* @ops: vi operations
* @vi_chans: list head for VI channels
@@ -103,7 +102,6 @@ struct tegra_vi {
struct host1x_client client;
void __iomem *iomem;
struct clk *clk;
- struct regulator *vdd;
const struct tegra_vi_soc *soc;
const struct tegra_vi_ops *ops;
struct list_head vi_chans;
diff --git a/include/linux/tegra-csi.h b/include/linux/tegra-csi.h
index b47f48ef7115..85c74e22a0cb 100644
--- a/include/linux/tegra-csi.h
+++ b/include/linux/tegra-csi.h
@@ -139,6 +139,7 @@ struct tegra_csi_soc {
* @client: host1x_client struct
* @iomem: register base
* @clks: clock for CSI and CIL
+ * @vdd: vdd regulator for CSI hardware, usually avdd_dsi_csi
* @soc: pointer to SoC data structure
* @ops: csi operations
* @mipi_ops: MIPI calibration operations
@@ -150,6 +151,7 @@ struct tegra_csi {
struct host1x_client client;
void __iomem *iomem;
struct clk_bulk_data *clks;
+ struct regulator *vdd;
const struct tegra_csi_soc *soc;
const struct tegra_csi_ops *ops;
const struct tegra_mipi_ops *mipi_ops;
--
2.48.1