From 234a39002a5a4daa364271ed357de14cff06f6a9 Mon Sep 17 00:00:00 2001 From: Jon Mayo Date: Tue, 20 Sep 2011 18:06:49 -0700 Subject: video: tegra: provide blank that clears screen Only clear the display when ioctl FBIOBLANK is FB_BLANK_NORMAL is used This indicates that display should still be powered on and is useful when HDMI audio needs to remain active but no content is displayed on screen. bug 857117 bug 868916 Change-Id: If9bd5616a02448a4c2859432b774afa793505447 Reviewed-on: http://git-master/r/53608 Reviewed-by: Kevin Huang (Eng-SW) Tested-by: Jon Mayo Reviewed-by: David Pu Tested-by: David Pu Reviewed-by: Jon Mayo --- arch/arm/mach-tegra/include/mach/dc.h | 2 ++ drivers/video/tegra/dc/dc.c | 15 +++++++++++++++ drivers/video/tegra/fb.c | 6 +++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-tegra/include/mach/dc.h b/arch/arm/mach-tegra/include/mach/dc.h index 11c206bfed57..1ac66a6f96b1 100644 --- a/arch/arm/mach-tegra/include/mach/dc.h +++ b/arch/arm/mach-tegra/include/mach/dc.h @@ -475,6 +475,8 @@ struct tegra_dc *tegra_dc_get_dc(unsigned idx); struct tegra_dc_win *tegra_dc_get_window(struct tegra_dc *dc, unsigned win); bool tegra_dc_get_connected(struct tegra_dc *); +void tegra_dc_blank(struct tegra_dc *dc); + void tegra_dc_enable(struct tegra_dc *dc); void tegra_dc_disable(struct tegra_dc *dc); diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c index 4b3bacc7be60..3e5e0b386918 100644 --- a/drivers/video/tegra/dc/dc.c +++ b/drivers/video/tegra/dc/dc.c @@ -2376,6 +2376,21 @@ bool tegra_dc_stats_get(struct tegra_dc *dc) return true; } +/* make the screen blank by disabling all windows */ +void tegra_dc_blank(struct tegra_dc *dc) +{ + struct tegra_dc_win *dcwins[DC_N_WINDOWS]; + unsigned i; + + for (i = 0; i < DC_N_WINDOWS; i++) { + dcwins[i] = tegra_dc_get_window(dc, i); + dcwins[i]->flags &= ~TEGRA_WIN_FLAG_ENABLED; + } + + tegra_dc_update_windows(dcwins, DC_N_WINDOWS); + tegra_dc_sync_windows(dcwins, DC_N_WINDOWS); +} + static void _tegra_dc_disable(struct tegra_dc *dc) { _tegra_dc_controller_disable(dc); diff --git a/drivers/video/tegra/fb.c b/drivers/video/tegra/fb.c index b170bcdcba2c..72176b7e99a5 100644 --- a/drivers/video/tegra/fb.c +++ b/drivers/video/tegra/fb.c @@ -182,10 +182,14 @@ static int tegra_fb_blank(int blank, struct fb_info *info) return 0; case FB_BLANK_NORMAL: + dev_dbg(&tegra_fb->ndev->dev, "blank - normal\n"); + tegra_dc_blank(tegra_fb->win->dc); + return 0; + case FB_BLANK_VSYNC_SUSPEND: case FB_BLANK_HSYNC_SUSPEND: case FB_BLANK_POWERDOWN: - dev_dbg(&tegra_fb->ndev->dev, "blank\n"); + dev_dbg(&tegra_fb->ndev->dev, "blank - powerdown\n"); tegra_dc_disable(tegra_fb->win->dc); return 0; -- cgit v1.2.3