struct mipi_dsi_host host;
 
        struct regulator *vdd;
+       bool enabled;
 };
 
 static inline struct tegra_dsi *
        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;
        value |= DSI_POWER_CONTROL_ENABLE;
        tegra_dsi_writel(dsi, value, DSI_POWER_CONTROL);
 
+       dsi->enabled = true;
+
        return 0;
 }
 
        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;
 
        clk_disable(dsi->clk);
 
+       dsi->enabled = false;
+
        return 0;
 }