diff options
-rw-r--r-- | drivers/video/s3c-fb.c | 55 |
1 files changed, 28 insertions, 27 deletions
diff --git a/drivers/video/s3c-fb.c b/drivers/video/s3c-fb.c index b1a75a024a2c..be4c218bb931 100644 --- a/drivers/video/s3c-fb.c +++ b/drivers/video/s3c-fb.c | |||
@@ -441,6 +441,32 @@ static void shadow_protect_win(struct s3c_fb_win *win, bool protect) | |||
441 | } | 441 | } |
442 | 442 | ||
443 | /** | 443 | /** |
444 | * s3c_fb_enable() - Set the state of the main LCD output | ||
445 | * @sfb: The main framebuffer state. | ||
446 | * @enable: The state to set. | ||
447 | */ | ||
448 | static void s3c_fb_enable(struct s3c_fb *sfb, int enable) | ||
449 | { | ||
450 | u32 vidcon0 = readl(sfb->regs + VIDCON0); | ||
451 | |||
452 | if (enable) | ||
453 | vidcon0 |= VIDCON0_ENVID | VIDCON0_ENVID_F; | ||
454 | else { | ||
455 | /* see the note in the framebuffer datasheet about | ||
456 | * why you cannot take both of these bits down at the | ||
457 | * same time. */ | ||
458 | |||
459 | if (!(vidcon0 & VIDCON0_ENVID)) | ||
460 | return; | ||
461 | |||
462 | vidcon0 |= VIDCON0_ENVID; | ||
463 | vidcon0 &= ~VIDCON0_ENVID_F; | ||
464 | } | ||
465 | |||
466 | writel(vidcon0, sfb->regs + VIDCON0); | ||
467 | } | ||
468 | |||
469 | /** | ||
444 | * s3c_fb_set_par() - framebuffer request to set new framebuffer state. | 470 | * s3c_fb_set_par() - framebuffer request to set new framebuffer state. |
445 | * @info: The framebuffer to change. | 471 | * @info: The framebuffer to change. |
446 | * | 472 | * |
@@ -510,9 +536,10 @@ static int s3c_fb_set_par(struct fb_info *info) | |||
510 | if (sfb->variant.is_2443) | 536 | if (sfb->variant.is_2443) |
511 | data |= (1 << 5); | 537 | data |= (1 << 5); |
512 | 538 | ||
513 | data |= VIDCON0_ENVID | VIDCON0_ENVID_F; | ||
514 | writel(data, regs + VIDCON0); | 539 | writel(data, regs + VIDCON0); |
515 | 540 | ||
541 | s3c_fb_enable(sfb, 1); | ||
542 | |||
516 | data = VIDTCON0_VBPD(var->upper_margin - 1) | | 543 | data = VIDTCON0_VBPD(var->upper_margin - 1) | |
517 | VIDTCON0_VFPD(var->lower_margin - 1) | | 544 | VIDTCON0_VFPD(var->lower_margin - 1) | |
518 | VIDTCON0_VSPW(var->vsync_len - 1); | 545 | VIDTCON0_VSPW(var->vsync_len - 1); |
@@ -761,32 +788,6 @@ static int s3c_fb_setcolreg(unsigned regno, | |||
761 | } | 788 | } |
762 | 789 | ||
763 | /** | 790 | /** |
764 | * s3c_fb_enable() - Set the state of the main LCD output | ||
765 | * @sfb: The main framebuffer state. | ||
766 | * @enable: The state to set. | ||
767 | */ | ||
768 | static void s3c_fb_enable(struct s3c_fb *sfb, int enable) | ||
769 | { | ||
770 | u32 vidcon0 = readl(sfb->regs + VIDCON0); | ||
771 | |||
772 | if (enable) | ||
773 | vidcon0 |= VIDCON0_ENVID | VIDCON0_ENVID_F; | ||
774 | else { | ||
775 | /* see the note in the framebuffer datasheet about | ||
776 | * why you cannot take both of these bits down at the | ||
777 | * same time. */ | ||
778 | |||
779 | if (!(vidcon0 & VIDCON0_ENVID)) | ||
780 | return; | ||
781 | |||
782 | vidcon0 |= VIDCON0_ENVID; | ||
783 | vidcon0 &= ~VIDCON0_ENVID_F; | ||
784 | } | ||
785 | |||
786 | writel(vidcon0, sfb->regs + VIDCON0); | ||
787 | } | ||
788 | |||
789 | /** | ||
790 | * s3c_fb_blank() - blank or unblank the given window | 791 | * s3c_fb_blank() - blank or unblank the given window |
791 | * @blank_mode: The blank state from FB_BLANK_* | 792 | * @blank_mode: The blank state from FB_BLANK_* |
792 | * @info: The framebuffer to blank. | 793 | * @info: The framebuffer to blank. |