lxfb/gxfb: when blanking with FB_BLANK_POWERDOWN, also turn off the CRT
authorAndres Salomon <dilinger@queued.net>
Mon, 28 Apr 2008 09:15:29 +0000 (02:15 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 28 Apr 2008 15:58:40 +0000 (08:58 -0700)
The Display Control's CRT_EN can be shut off when we enter FB_BLANK_POWERDOWN
in an attempt to save additional power.

Signed-off-by: Andres Salomon <dilinger@debian.org>
Cc: Jordan Crouse <jordan.crouse@amd.com>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/video/geode/lxfb_ops.c
drivers/video/geode/video_gx.c

index 7abc439..531fcdc 100644 (file)
@@ -524,37 +524,40 @@ int lx_blank_display(struct fb_info *info, int blank_mode)
 {
        struct lxfb_par *par = info->par;
        u32 dcfg, fp_pm;
-       int blank, hsync, vsync;
+       int blank, hsync, vsync, crt;
 
        /* CRT power saving modes. */
        switch (blank_mode) {
        case FB_BLANK_UNBLANK:
-               blank = 0; hsync = 1; vsync = 1;
+               blank = 0; hsync = 1; vsync = 1; crt = 1;
                break;
        case FB_BLANK_NORMAL:
-               blank = 1; hsync = 1; vsync = 1;
+               blank = 1; hsync = 1; vsync = 1; crt = 1;
                break;
        case FB_BLANK_VSYNC_SUSPEND:
-               blank = 1; hsync = 1; vsync = 0;
+               blank = 1; hsync = 1; vsync = 0; crt = 1;
                break;
        case FB_BLANK_HSYNC_SUSPEND:
-               blank = 1; hsync = 0; vsync = 1;
+               blank = 1; hsync = 0; vsync = 1; crt = 1;
                break;
        case FB_BLANK_POWERDOWN:
-               blank = 1; hsync = 0; vsync = 0;
+               blank = 1; hsync = 0; vsync = 0; crt = 0;
                break;
        default:
                return -EINVAL;
        }
 
        dcfg = read_vp(par, VP_DCFG);
-       dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN);
+       dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN |
+                       VP_DCFG_CRT_EN);
        if (!blank)
                dcfg |= VP_DCFG_DAC_BL_EN;
        if (hsync)
                dcfg |= VP_DCFG_HSYNC_EN;
        if (vsync)
                dcfg |= VP_DCFG_VSYNC_EN;
+       if (crt)
+               dcfg |= VP_DCFG_CRT_EN;
        write_vp(par, VP_DCFG, dcfg);
 
        /* Power on/off flat panel */
index 0072d9e..b8d52a8 100644 (file)
@@ -299,37 +299,39 @@ int gx_blank_display(struct fb_info *info, int blank_mode)
 {
        struct gxfb_par *par = info->par;
        u32 dcfg, fp_pm;
-       int blank, hsync, vsync;
+       int blank, hsync, vsync, crt;
 
        /* CRT power saving modes. */
        switch (blank_mode) {
        case FB_BLANK_UNBLANK:
-               blank = 0; hsync = 1; vsync = 1;
+               blank = 0; hsync = 1; vsync = 1; crt = 1;
                break;
        case FB_BLANK_NORMAL:
-               blank = 1; hsync = 1; vsync = 1;
+               blank = 1; hsync = 1; vsync = 1; crt = 1;
                break;
        case FB_BLANK_VSYNC_SUSPEND:
-               blank = 1; hsync = 1; vsync = 0;
+               blank = 1; hsync = 1; vsync = 0; crt = 1;
                break;
        case FB_BLANK_HSYNC_SUSPEND:
-               blank = 1; hsync = 0; vsync = 1;
+               blank = 1; hsync = 0; vsync = 1; crt = 1;
                break;
        case FB_BLANK_POWERDOWN:
-               blank = 1; hsync = 0; vsync = 0;
+               blank = 1; hsync = 0; vsync = 0; crt = 0;
                break;
        default:
                return -EINVAL;
        }
        dcfg = read_vp(par, VP_DCFG);
-       dcfg &= ~(VP_DCFG_DAC_BL_EN
-                 | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN);
+       dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN |
+                       VP_DCFG_CRT_EN);
        if (!blank)
                dcfg |= VP_DCFG_DAC_BL_EN;
        if (hsync)
                dcfg |= VP_DCFG_HSYNC_EN;
        if (vsync)
                dcfg |= VP_DCFG_VSYNC_EN;
+       if (crt)
+               dcfg |= VP_DCFG_CRT_EN;
        write_vp(par, VP_DCFG, dcfg);
 
        /* Power on/off flat panel. */