diff options
author | Andres Salomon <dilinger@queued.net> | 2008-04-28 05:15:29 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-28 11:58:40 -0400 |
commit | 4537f93ae88c77a26e77d192ca32a0c2cd359592 (patch) | |
tree | 457a32bfcf492d567cdc8d9b97b55536335e9d63 | |
parent | 564820d42aaa55e6ce60a59c0f60832e1330c58b (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.c | 17 | ||||
-rw-r--r-- | drivers/video/geode/video_gx.c | 18 |
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. */ |