Commit 4537f93a authored by Andres Salomon's avatar Andres Salomon Committed by Linus Torvalds

lxfb/gxfb: when blanking with FB_BLANK_POWERDOWN, also turn off the CRT

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: default avatarAndres Salomon <dilinger@debian.org>
Cc: Jordan Crouse <jordan.crouse@amd.com>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 564820d4
...@@ -524,37 +524,40 @@ int lx_blank_display(struct fb_info *info, int blank_mode) ...@@ -524,37 +524,40 @@ int lx_blank_display(struct fb_info *info, int blank_mode)
{ {
struct lxfb_par *par = info->par; struct lxfb_par *par = info->par;
u32 dcfg, fp_pm; u32 dcfg, fp_pm;
int blank, hsync, vsync; int blank, hsync, vsync, crt;
/* CRT power saving modes. */ /* CRT power saving modes. */
switch (blank_mode) { switch (blank_mode) {
case FB_BLANK_UNBLANK: case FB_BLANK_UNBLANK:
blank = 0; hsync = 1; vsync = 1; blank = 0; hsync = 1; vsync = 1; crt = 1;
break; break;
case FB_BLANK_NORMAL: case FB_BLANK_NORMAL:
blank = 1; hsync = 1; vsync = 1; blank = 1; hsync = 1; vsync = 1; crt = 1;
break; break;
case FB_BLANK_VSYNC_SUSPEND: case FB_BLANK_VSYNC_SUSPEND:
blank = 1; hsync = 1; vsync = 0; blank = 1; hsync = 1; vsync = 0; crt = 1;
break; break;
case FB_BLANK_HSYNC_SUSPEND: case FB_BLANK_HSYNC_SUSPEND:
blank = 1; hsync = 0; vsync = 1; blank = 1; hsync = 0; vsync = 1; crt = 1;
break; break;
case FB_BLANK_POWERDOWN: case FB_BLANK_POWERDOWN:
blank = 1; hsync = 0; vsync = 0; blank = 1; hsync = 0; vsync = 0; crt = 0;
break; break;
default: default:
return -EINVAL; return -EINVAL;
} }
dcfg = read_vp(par, VP_DCFG); 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) if (!blank)
dcfg |= VP_DCFG_DAC_BL_EN; dcfg |= VP_DCFG_DAC_BL_EN;
if (hsync) if (hsync)
dcfg |= VP_DCFG_HSYNC_EN; dcfg |= VP_DCFG_HSYNC_EN;
if (vsync) if (vsync)
dcfg |= VP_DCFG_VSYNC_EN; dcfg |= VP_DCFG_VSYNC_EN;
if (crt)
dcfg |= VP_DCFG_CRT_EN;
write_vp(par, VP_DCFG, dcfg); write_vp(par, VP_DCFG, dcfg);
/* Power on/off flat panel */ /* Power on/off flat panel */
......
...@@ -299,37 +299,39 @@ int gx_blank_display(struct fb_info *info, int blank_mode) ...@@ -299,37 +299,39 @@ int gx_blank_display(struct fb_info *info, int blank_mode)
{ {
struct gxfb_par *par = info->par; struct gxfb_par *par = info->par;
u32 dcfg, fp_pm; u32 dcfg, fp_pm;
int blank, hsync, vsync; int blank, hsync, vsync, crt;
/* CRT power saving modes. */ /* CRT power saving modes. */
switch (blank_mode) { switch (blank_mode) {
case FB_BLANK_UNBLANK: case FB_BLANK_UNBLANK:
blank = 0; hsync = 1; vsync = 1; blank = 0; hsync = 1; vsync = 1; crt = 1;
break; break;
case FB_BLANK_NORMAL: case FB_BLANK_NORMAL:
blank = 1; hsync = 1; vsync = 1; blank = 1; hsync = 1; vsync = 1; crt = 1;
break; break;
case FB_BLANK_VSYNC_SUSPEND: case FB_BLANK_VSYNC_SUSPEND:
blank = 1; hsync = 1; vsync = 0; blank = 1; hsync = 1; vsync = 0; crt = 1;
break; break;
case FB_BLANK_HSYNC_SUSPEND: case FB_BLANK_HSYNC_SUSPEND:
blank = 1; hsync = 0; vsync = 1; blank = 1; hsync = 0; vsync = 1; crt = 1;
break; break;
case FB_BLANK_POWERDOWN: case FB_BLANK_POWERDOWN:
blank = 1; hsync = 0; vsync = 0; blank = 1; hsync = 0; vsync = 0; crt = 0;
break; break;
default: default:
return -EINVAL; return -EINVAL;
} }
dcfg = read_vp(par, VP_DCFG); dcfg = read_vp(par, VP_DCFG);
dcfg &= ~(VP_DCFG_DAC_BL_EN dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN |
| VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN); VP_DCFG_CRT_EN);
if (!blank) if (!blank)
dcfg |= VP_DCFG_DAC_BL_EN; dcfg |= VP_DCFG_DAC_BL_EN;
if (hsync) if (hsync)
dcfg |= VP_DCFG_HSYNC_EN; dcfg |= VP_DCFG_HSYNC_EN;
if (vsync) if (vsync)
dcfg |= VP_DCFG_VSYNC_EN; dcfg |= VP_DCFG_VSYNC_EN;
if (crt)
dcfg |= VP_DCFG_CRT_EN;
write_vp(par, VP_DCFG, dcfg); write_vp(par, VP_DCFG, dcfg);
/* Power on/off flat panel. */ /* Power on/off flat panel. */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment