aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndres Salomon <dilinger@queued.net>2008-04-28 05:15:29 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2008-04-28 11:58:40 -0400
commit4537f93ae88c77a26e77d192ca32a0c2cd359592 (patch)
tree457a32bfcf492d567cdc8d9b97b55536335e9d63
parent564820d42aaa55e6ce60a59c0f60832e1330c58b (diff)
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>
-rw-r--r--drivers/video/geode/lxfb_ops.c17
-rw-r--r--drivers/video/geode/video_gx.c18
2 files changed, 20 insertions, 15 deletions
diff --git a/drivers/video/geode/lxfb_ops.c b/drivers/video/geode/lxfb_ops.c
index 7abc439101ce..531fcdcdd759 100644
--- a/drivers/video/geode/lxfb_ops.c
+++ b/drivers/video/geode/lxfb_ops.c
@@ -524,37 +524,40 @@ int lx_blank_display(struct fb_info *info, int blank_mode)
524{ 524{
525 struct lxfb_par *par = info->par; 525 struct lxfb_par *par = info->par;
526 u32 dcfg, fp_pm; 526 u32 dcfg, fp_pm;
527 int blank, hsync, vsync; 527 int blank, hsync, vsync, crt;
528 528
529 /* CRT power saving modes. */ 529 /* CRT power saving modes. */
530 switch (blank_mode) { 530 switch (blank_mode) {
531 case FB_BLANK_UNBLANK: 531 case FB_BLANK_UNBLANK:
532 blank = 0; hsync = 1; vsync = 1; 532 blank = 0; hsync = 1; vsync = 1; crt = 1;
533 break; 533 break;
534 case FB_BLANK_NORMAL: 534 case FB_BLANK_NORMAL:
535 blank = 1; hsync = 1; vsync = 1; 535 blank = 1; hsync = 1; vsync = 1; crt = 1;
536 break; 536 break;
537 case FB_BLANK_VSYNC_SUSPEND: 537 case FB_BLANK_VSYNC_SUSPEND:
538 blank = 1; hsync = 1; vsync = 0; 538 blank = 1; hsync = 1; vsync = 0; crt = 1;
539 break; 539 break;
540 case FB_BLANK_HSYNC_SUSPEND: 540 case FB_BLANK_HSYNC_SUSPEND:
541 blank = 1; hsync = 0; vsync = 1; 541 blank = 1; hsync = 0; vsync = 1; crt = 1;
542 break; 542 break;
543 case FB_BLANK_POWERDOWN: 543 case FB_BLANK_POWERDOWN:
544 blank = 1; hsync = 0; vsync = 0; 544 blank = 1; hsync = 0; vsync = 0; crt = 0;
545 break; 545 break;
546 default: 546 default:
547 return -EINVAL; 547 return -EINVAL;
548 } 548 }
549 549
550 dcfg = read_vp(par, VP_DCFG); 550 dcfg = read_vp(par, VP_DCFG);
551 dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN); 551 dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN |
552 VP_DCFG_CRT_EN);
552 if (!blank) 553 if (!blank)
553 dcfg |= VP_DCFG_DAC_BL_EN; 554 dcfg |= VP_DCFG_DAC_BL_EN;
554 if (hsync) 555 if (hsync)
555 dcfg |= VP_DCFG_HSYNC_EN; 556 dcfg |= VP_DCFG_HSYNC_EN;
556 if (vsync) 557 if (vsync)
557 dcfg |= VP_DCFG_VSYNC_EN; 558 dcfg |= VP_DCFG_VSYNC_EN;
559 if (crt)
560 dcfg |= VP_DCFG_CRT_EN;
558 write_vp(par, VP_DCFG, dcfg); 561 write_vp(par, VP_DCFG, dcfg);
559 562
560 /* Power on/off flat panel */ 563 /* Power on/off flat panel */
diff --git a/drivers/video/geode/video_gx.c b/drivers/video/geode/video_gx.c
index 0072d9ec2e24..b8d52a8360db 100644
--- a/drivers/video/geode/video_gx.c
+++ b/drivers/video/geode/video_gx.c
@@ -299,37 +299,39 @@ int gx_blank_display(struct fb_info *info, int blank_mode)
299{ 299{
300 struct gxfb_par *par = info->par; 300 struct gxfb_par *par = info->par;
301 u32 dcfg, fp_pm; 301 u32 dcfg, fp_pm;
302 int blank, hsync, vsync; 302 int blank, hsync, vsync, crt;
303 303
304 /* CRT power saving modes. */ 304 /* CRT power saving modes. */
305 switch (blank_mode) { 305 switch (blank_mode) {
306 case FB_BLANK_UNBLANK: 306 case FB_BLANK_UNBLANK:
307 blank = 0; hsync = 1; vsync = 1; 307 blank = 0; hsync = 1; vsync = 1; crt = 1;
308 break; 308 break;
309 case FB_BLANK_NORMAL: 309 case FB_BLANK_NORMAL:
310 blank = 1; hsync = 1; vsync = 1; 310 blank = 1; hsync = 1; vsync = 1; crt = 1;
311 break; 311 break;
312 case FB_BLANK_VSYNC_SUSPEND: 312 case FB_BLANK_VSYNC_SUSPEND:
313 blank = 1; hsync = 1; vsync = 0; 313 blank = 1; hsync = 1; vsync = 0; crt = 1;
314 break; 314 break;
315 case FB_BLANK_HSYNC_SUSPEND: 315 case FB_BLANK_HSYNC_SUSPEND:
316 blank = 1; hsync = 0; vsync = 1; 316 blank = 1; hsync = 0; vsync = 1; crt = 1;
317 break; 317 break;
318 case FB_BLANK_POWERDOWN: 318 case FB_BLANK_POWERDOWN:
319 blank = 1; hsync = 0; vsync = 0; 319 blank = 1; hsync = 0; vsync = 0; crt = 0;
320 break; 320 break;
321 default: 321 default:
322 return -EINVAL; 322 return -EINVAL;
323 } 323 }
324 dcfg = read_vp(par, VP_DCFG); 324 dcfg = read_vp(par, VP_DCFG);
325 dcfg &= ~(VP_DCFG_DAC_BL_EN 325 dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN |
326 | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN); 326 VP_DCFG_CRT_EN);
327 if (!blank) 327 if (!blank)
328 dcfg |= VP_DCFG_DAC_BL_EN; 328 dcfg |= VP_DCFG_DAC_BL_EN;
329 if (hsync) 329 if (hsync)
330 dcfg |= VP_DCFG_HSYNC_EN; 330 dcfg |= VP_DCFG_HSYNC_EN;
331 if (vsync) 331 if (vsync)
332 dcfg |= VP_DCFG_VSYNC_EN; 332 dcfg |= VP_DCFG_VSYNC_EN;
333 if (crt)
334 dcfg |= VP_DCFG_CRT_EN;
333 write_vp(par, VP_DCFG, dcfg); 335 write_vp(par, VP_DCFG, dcfg);
334 336
335 /* Power on/off flat panel. */ 337 /* Power on/off flat panel. */