From d9ecb9be27bb10535159ebb43ca3fa515edfc13b Mon Sep 17 00:00:00 2001 From: Nitin Kumbhar Date: Fri, 27 Jan 2012 11:13:21 +0530 Subject: video: tegra: dc: in continuous mode mask VBLANK after first frame A V_BLANK interrupt for each frame does not allow long lp2 idle intervals. If all windows are clean, mask V_BLANK interrupt after processing it for updating smart dimmer. It's unmasked again when a new window update is performed. This will schedule a work for updating smart dimmer for the new frame. Bug 920110 Signed-off-by: Nitin Kumbhar Reviewed-on: http://git-master/r/85137 (cherry picked from commit 68398090aee22cf02069e5767c3e9a062b0fc2f6) Change-Id: I588328bfd0d6036febed236dc07f441878aa81d1 Signed-off-by: Nitin Kumbhar Reviewed-on: http://git-master/r/85166 Reviewed-by: Lokesh Pathak Tested-by: Lokesh Pathak --- drivers/video/tegra/dc/dc.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'drivers') diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index e64b935e4c12..2ee5860f0f91 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -2090,6 +2090,18 @@ static void tegra_dc_underflow_handler(struct tegra_dc *dc) } #ifndef CONFIG_TEGRA_FPGA_PLATFORM +static bool tegra_dc_windows_are_dirty(struct tegra_dc *dc) +{ +#ifndef CONFIG_TEGRA_SIMULATION_PLATFORM + u32 val; + + val = tegra_dc_readl(dc, DC_CMD_STATE_CONTROL); + if (val & (WIN_A_UPDATE | WIN_B_UPDATE | WIN_C_UPDATE)) + return true; +#endif + return false; +} + static void tegra_dc_trigger_windows(struct tegra_dc *dc) { u32 val, i; @@ -2157,6 +2169,15 @@ static void tegra_dc_continuous_irq(struct tegra_dc *dc, unsigned long status) if (status & V_BLANK_INT) { /* Schedule any additional bottom-half vblank actvities. */ schedule_work(&dc->vblank_work); + + /* All windows updated. Mask subsequent V_BLANK interrupts */ + if (!tegra_dc_windows_are_dirty(dc)) { + u32 val; + + val = tegra_dc_readl(dc, DC_CMD_INT_MASK); + val &= ~V_BLANK_INT; + tegra_dc_writel(dc, val, DC_CMD_INT_MASK); + } } if (status & FRAME_END_INT) { -- cgit v1.2.3