summaryrefslogtreecommitdiff
path: root/drivers/video/tegra/dc/mipi_cal.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/video/tegra/dc/mipi_cal.c')
-rw-r--r--drivers/video/tegra/dc/mipi_cal.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/drivers/video/tegra/dc/mipi_cal.c b/drivers/video/tegra/dc/mipi_cal.c
index ccd54e637f0f..6d8e33d74376 100644
--- a/drivers/video/tegra/dc/mipi_cal.c
+++ b/drivers/video/tegra/dc/mipi_cal.c
@@ -1,7 +1,7 @@
/*
* drivers/video/tegra/dc/mipi_cal.c
*
- * Copyright (c) 2012, NVIDIA CORPORATION, All rights reserved.
+ * Copyright (c) 2012-2013, NVIDIA CORPORATION, All rights reserved.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
@@ -28,12 +28,31 @@ int tegra_mipi_cal_init_hw(struct tegra_mipi_cal *mipi_cal)
BUG_ON(IS_ERR_OR_NULL(mipi_cal));
mutex_lock(&mipi_cal->lock);
- clk_prepare_enable(mipi_cal->clk);
+
+ tegra_mipi_cal_clk_enable(mipi_cal);
for (; cnt <= MIPI_CAL_MIPI_BIAS_PAD_CFG2_0; cnt += 4)
tegra_mipi_cal_write(mipi_cal, 0, cnt);
- clk_disable_unprepare(mipi_cal->clk);
+ /* Clear MIPI cal status register */
+ tegra_mipi_cal_write(mipi_cal,
+ MIPI_AUTO_CAL_DONE_DSID(0x1) |
+ MIPI_AUTO_CAL_DONE_DSIC(0x1) |
+ MIPI_AUTO_CAL_DONE_DSIB(0x1) |
+ MIPI_AUTO_CAL_DONE_DSIA(0x1) |
+ MIPI_AUTO_CAL_DONE_CSIE(0x1) |
+ MIPI_AUTO_CAL_DONE_CSID(0x1) |
+ MIPI_AUTO_CAL_DONE_CSIC(0x1) |
+ MIPI_AUTO_CAL_DONE_CSIB(0x1) |
+ MIPI_AUTO_CAL_DONE_CSIA(0x1) |
+ MIPI_AUTO_CAL_DONE(0x1) |
+ MIPI_CAL_DRIV_DN_ADJ(0x0) |
+ MIPI_CAL_DRIV_UP_ADJ(0x0) |
+ MIPI_CAL_TERMADJ(0x0) |
+ MIPI_CAL_ACTIVE(0x0),
+ MIPI_CAL_CIL_MIPI_CAL_STATUS_0);
+
+ tegra_mipi_cal_clk_disable(mipi_cal);
mutex_unlock(&mipi_cal->lock);
return 0;
@@ -45,6 +64,7 @@ struct tegra_mipi_cal *tegra_mipi_cal_init_sw(struct tegra_dc *dc)
struct tegra_mipi_cal *mipi_cal;
struct resource *res;
struct clk *clk;
+ struct clk *fixed_clk;
void __iomem *base;
int err = 0;
@@ -76,12 +96,19 @@ struct tegra_mipi_cal *tegra_mipi_cal_init_sw(struct tegra_dc *dc)
err = PTR_ERR(clk);
goto fail_free_map;
}
+ fixed_clk = clk_get_sys("mipi-cal-fixed", NULL);
+ if (IS_ERR_OR_NULL(fixed_clk)) {
+ dev_err(&dc->ndev->dev, "mipi_cal: fixed clk get failed\n");
+ err = PTR_ERR(fixed_clk);
+ goto fail_free_map;
+ }
mutex_init(&mipi_cal->lock);
mipi_cal->dc = dc;
mipi_cal->res = res;
mipi_cal->base = base;
mipi_cal->clk = clk;
+ mipi_cal->fixed_clk = fixed_clk;
return mipi_cal;