diff options
Diffstat (limited to 'drivers/video/geode/lxfb_ops.c')
-rw-r--r-- | drivers/video/geode/lxfb_ops.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/drivers/video/geode/lxfb_ops.c b/drivers/video/geode/lxfb_ops.c index aaef9165ec9b..b1cd49c99356 100644 --- a/drivers/video/geode/lxfb_ops.c +++ b/drivers/video/geode/lxfb_ops.c | |||
@@ -517,25 +517,25 @@ void lx_set_palette_reg(struct fb_info *info, unsigned regno, | |||
517 | int lx_blank_display(struct fb_info *info, int blank_mode) | 517 | int lx_blank_display(struct fb_info *info, int blank_mode) |
518 | { | 518 | { |
519 | struct lxfb_par *par = info->par; | 519 | struct lxfb_par *par = info->par; |
520 | u32 dcfg, fp_pm; | 520 | u32 dcfg, misc, fp_pm; |
521 | int blank, hsync, vsync, crt; | 521 | int blank, hsync, vsync; |
522 | 522 | ||
523 | /* CRT power saving modes. */ | 523 | /* CRT power saving modes. */ |
524 | switch (blank_mode) { | 524 | switch (blank_mode) { |
525 | case FB_BLANK_UNBLANK: | 525 | case FB_BLANK_UNBLANK: |
526 | blank = 0; hsync = 1; vsync = 1; crt = 1; | 526 | blank = 0; hsync = 1; vsync = 1; |
527 | break; | 527 | break; |
528 | case FB_BLANK_NORMAL: | 528 | case FB_BLANK_NORMAL: |
529 | blank = 1; hsync = 1; vsync = 1; crt = 1; | 529 | blank = 1; hsync = 1; vsync = 1; |
530 | break; | 530 | break; |
531 | case FB_BLANK_VSYNC_SUSPEND: | 531 | case FB_BLANK_VSYNC_SUSPEND: |
532 | blank = 1; hsync = 1; vsync = 0; crt = 1; | 532 | blank = 1; hsync = 1; vsync = 0; |
533 | break; | 533 | break; |
534 | case FB_BLANK_HSYNC_SUSPEND: | 534 | case FB_BLANK_HSYNC_SUSPEND: |
535 | blank = 1; hsync = 0; vsync = 1; crt = 1; | 535 | blank = 1; hsync = 0; vsync = 1; |
536 | break; | 536 | break; |
537 | case FB_BLANK_POWERDOWN: | 537 | case FB_BLANK_POWERDOWN: |
538 | blank = 1; hsync = 0; vsync = 0; crt = 0; | 538 | blank = 1; hsync = 0; vsync = 0; |
539 | break; | 539 | break; |
540 | default: | 540 | default: |
541 | return -EINVAL; | 541 | return -EINVAL; |
@@ -545,15 +545,23 @@ int lx_blank_display(struct fb_info *info, int blank_mode) | |||
545 | dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN | | 545 | dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN | |
546 | VP_DCFG_CRT_EN); | 546 | VP_DCFG_CRT_EN); |
547 | if (!blank) | 547 | if (!blank) |
548 | dcfg |= VP_DCFG_DAC_BL_EN; | 548 | dcfg |= VP_DCFG_DAC_BL_EN | VP_DCFG_CRT_EN; |
549 | if (hsync) | 549 | if (hsync) |
550 | dcfg |= VP_DCFG_HSYNC_EN; | 550 | dcfg |= VP_DCFG_HSYNC_EN; |
551 | if (vsync) | 551 | if (vsync) |
552 | dcfg |= VP_DCFG_VSYNC_EN; | 552 | dcfg |= VP_DCFG_VSYNC_EN; |
553 | if (crt) | 553 | |
554 | dcfg |= VP_DCFG_CRT_EN; | ||
555 | write_vp(par, VP_DCFG, dcfg); | 554 | write_vp(par, VP_DCFG, dcfg); |
556 | 555 | ||
556 | misc = read_vp(par, VP_MISC); | ||
557 | |||
558 | if (vsync && hsync) | ||
559 | misc &= ~VP_MISC_DACPWRDN; | ||
560 | else | ||
561 | misc |= VP_MISC_DACPWRDN; | ||
562 | |||
563 | write_vp(par, VP_MISC, misc); | ||
564 | |||
557 | /* Power on/off flat panel */ | 565 | /* Power on/off flat panel */ |
558 | 566 | ||
559 | if (par->output & OUTPUT_PANEL) { | 567 | if (par->output & OUTPUT_PANEL) { |