summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/tegra
diff options
context:
space:
mode:
authorThierry Reding <treding@nvidia.com>2014-03-14 14:15:10 +0100
committerThierry Reding <treding@nvidia.com>2014-06-05 23:09:30 +0200
commit334ae6b5271b7ba306b867d1d2b1b00e4afd6eb5 (patch)
tree432c62d40d541023db09b100803f1f581724f358 /drivers/gpu/drm/tegra
parent17297a281368a60a12e18c325aae4fdc646ce756 (diff)
downloadop-kernel-dev-334ae6b5271b7ba306b867d1d2b1b00e4afd6eb5.zip
op-kernel-dev-334ae6b5271b7ba306b867d1d2b1b00e4afd6eb5.tar.gz
drm/tegra: dsi - Add enable guard
To prevent the enable or disable operations to potentially be run multiple times, add guards to return early when the output is already in the targetted state. Signed-off-by: Thierry Reding <treding@nvidia.com>
Diffstat (limited to 'drivers/gpu/drm/tegra')
-rw-r--r--drivers/gpu/drm/tegra/dsi.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c
index 5f0d780..4c35d9b 100644
--- a/drivers/gpu/drm/tegra/dsi.c
+++ b/drivers/gpu/drm/tegra/dsi.c
@@ -53,6 +53,7 @@ struct tegra_dsi {
struct mipi_dsi_host host;
struct regulator *vdd;
+ bool enabled;
};
static inline struct tegra_dsi *
@@ -436,6 +437,9 @@ static int tegra_output_dsi_enable(struct tegra_output *output)
const u32 *pkt_seq;
int err;
+ if (dsi->enabled)
+ return 0;
+
if (dsi->flags & MIPI_DSI_MODE_VIDEO_SYNC_PULSE) {
DRM_DEBUG_KMS("Non-burst video mode with sync pulses\n");
pkt_seq = pkt_seq_video_non_burst_sync_pulses;
@@ -530,6 +534,8 @@ static int tegra_output_dsi_enable(struct tegra_output *output)
value |= DSI_POWER_CONTROL_ENABLE;
tegra_dsi_writel(dsi, value, DSI_POWER_CONTROL);
+ dsi->enabled = true;
+
return 0;
}
@@ -539,6 +545,9 @@ static int tegra_output_dsi_disable(struct tegra_output *output)
struct tegra_dsi *dsi = to_dsi(output);
unsigned long value;
+ if (!dsi->enabled)
+ return 0;
+
/* disable DSI controller */
value = tegra_dsi_readl(dsi, DSI_POWER_CONTROL);
value &= DSI_POWER_CONTROL_ENABLE;
@@ -568,6 +577,8 @@ static int tegra_output_dsi_disable(struct tegra_output *output)
clk_disable(dsi->clk);
+ dsi->enabled = false;
+
return 0;
}
OpenPOWER on IntegriCloud