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: 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>
This commit is contained in:
parent
564820d42a
commit
4537f93ae8
2 changed files with 20 additions and 15 deletions
|
@ -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)
|
||||||
{
|
{
|
||||||
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. */
|
||||||
|
|
Loading…
Reference in a new issue