diff options
author | Daniel Solomon <daniels@nvidia.com> | 2014-03-13 15:14:36 -0700 |
---|---|---|
committer | Animesh Kishore <ankishore@nvidia.com> | 2014-03-27 01:26:46 -0700 |
commit | 5a03b6f2f40e28d4d7d2fbb78f70cdcd677f6d36 (patch) | |
tree | 7b7d3ca6f81f51cb78e53b833ec71c01280d35cf /drivers/video/tegra/dc/dc.c | |
parent | 2b71353873a28d92ca19d777f6f6cea39d567c33 (diff) |
video: tegra: dp: update link enable/disable
Update SOR attach sequence and implement SOR detach
sequence according to recommended guidelines.
Change-Id: Id0d2395508a6e61847e1890ea85d4025300691eb
Signed-off-by: Daniel Solomon <daniels@nvidia.com>
Reviewed-on: http://git-master/r/381762
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Animesh Kishore <ankishore@nvidia.com>
Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>
Diffstat (limited to 'drivers/video/tegra/dc/dc.c')
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index c2f9dd37bb7f..f2098a1fa147 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -935,6 +935,25 @@ static inline void tegra_dc_create_debugfs(struct tegra_dc *dc) { }; static inline void tegra_dc_remove_debugfs(struct tegra_dc *dc) { }; #endif /* CONFIG_DEBUGFS */ +unsigned long tegra_dc_poll_register(struct tegra_dc *dc, u32 reg, u32 mask, + u32 exp_val, u32 poll_interval_us, u32 timeout_ms) +{ + unsigned long timeout_jf = jiffies + msecs_to_jiffies(timeout_ms); + u32 reg_val = 0; + + do { + usleep_range(poll_interval_us, poll_interval_us << 1); + reg_val = tegra_dc_readl(dc, reg); + } while (((reg_val & mask) != exp_val) && + time_after(timeout_jf, jiffies)); + + if ((reg_val & mask) == exp_val) + return 0; /* success */ + dev_err(&dc->ndev->dev, + "dc_poll_register 0x%x: timeout\n", reg); + return jiffies - timeout_jf + 1; +} + static int tegra_dc_set(struct tegra_dc *dc, int index) { int ret = 0; |