aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/video/s3c2410fb.c49
1 files changed, 29 insertions, 20 deletions
diff --git a/drivers/video/s3c2410fb.c b/drivers/video/s3c2410fb.c
index 13b38cbbe4cf..2219ae56a0e6 100644
--- a/drivers/video/s3c2410fb.c
+++ b/drivers/video/s3c2410fb.c
@@ -580,6 +580,27 @@ static int s3c2410fb_setcolreg(unsigned regno,
580 return 0; 580 return 0;
581} 581}
582 582
583/* s3c2410fb_lcd_enable
584 *
585 * shutdown the lcd controller
586 */
587static void s3c2410fb_lcd_enable(struct s3c2410fb_info *fbi, int enable)
588{
589 unsigned long flags;
590
591 local_irq_save(flags);
592
593 if (enable)
594 fbi->regs.lcdcon1 |= S3C2410_LCDCON1_ENVID;
595 else
596 fbi->regs.lcdcon1 &= ~S3C2410_LCDCON1_ENVID;
597
598 writel(fbi->regs.lcdcon1, fbi->io + S3C2410_LCDCON1);
599
600 local_irq_restore(flags);
601}
602
603
583/* 604/*
584 * s3c2410fb_blank 605 * s3c2410fb_blank
585 * @blank_mode: the blank mode we want. 606 * @blank_mode: the blank mode we want.
@@ -589,9 +610,6 @@ static int s3c2410fb_setcolreg(unsigned regno,
589 * blanking succeeded, != 0 if un-/blanking failed due to e.g. a 610 * blanking succeeded, != 0 if un-/blanking failed due to e.g. a
590 * video mode which doesn't support it. Implements VESA suspend 611 * video mode which doesn't support it. Implements VESA suspend
591 * and powerdown modes on hardware that supports disabling hsync/vsync: 612 * and powerdown modes on hardware that supports disabling hsync/vsync:
592 * blank_mode == 2: suspend vsync
593 * blank_mode == 3: suspend hsync
594 * blank_mode == 4: powerdown
595 * 613 *
596 * Returns negative errno on error, or zero on success. 614 * Returns negative errno on error, or zero on success.
597 * 615 *
@@ -605,6 +623,12 @@ static int s3c2410fb_blank(int blank_mode, struct fb_info *info)
605 623
606 tpal_reg += is_s3c2412(fbi) ? S3C2412_TPAL : S3C2410_TPAL; 624 tpal_reg += is_s3c2412(fbi) ? S3C2412_TPAL : S3C2410_TPAL;
607 625
626 if (blank_mode == FB_BLANK_POWERDOWN) {
627 s3c2410fb_lcd_enable(fbi, 0);
628 } else {
629 s3c2410fb_lcd_enable(fbi, 1);
630 }
631
608 if (blank_mode == FB_BLANK_UNBLANK) 632 if (blank_mode == FB_BLANK_UNBLANK)
609 writel(0x0, tpal_reg); 633 writel(0x0, tpal_reg);
610 else { 634 else {
@@ -983,21 +1007,6 @@ static int __init s3c2412fb_probe(struct platform_device *pdev)
983 return s3c24xxfb_probe(pdev, DRV_S3C2412); 1007 return s3c24xxfb_probe(pdev, DRV_S3C2412);
984} 1008}
985 1009
986/* s3c2410fb_stop_lcd
987 *
988 * shutdown the lcd controller
989 */
990static void s3c2410fb_stop_lcd(struct s3c2410fb_info *fbi)
991{
992 unsigned long flags;
993
994 local_irq_save(flags);
995
996 fbi->regs.lcdcon1 &= ~S3C2410_LCDCON1_ENVID;
997 writel(fbi->regs.lcdcon1, fbi->io + S3C2410_LCDCON1);
998
999 local_irq_restore(flags);
1000}
1001 1010
1002/* 1011/*
1003 * Cleanup 1012 * Cleanup
@@ -1010,7 +1019,7 @@ static int s3c2410fb_remove(struct platform_device *pdev)
1010 1019
1011 unregister_framebuffer(fbinfo); 1020 unregister_framebuffer(fbinfo);
1012 1021
1013 s3c2410fb_stop_lcd(info); 1022 s3c2410fb_lcd_enable(info, 0);
1014 msleep(1); 1023 msleep(1);
1015 1024
1016 s3c2410fb_unmap_video_memory(fbinfo); 1025 s3c2410fb_unmap_video_memory(fbinfo);
@@ -1043,7 +1052,7 @@ static int s3c2410fb_suspend(struct platform_device *dev, pm_message_t state)
1043 struct fb_info *fbinfo = platform_get_drvdata(dev); 1052 struct fb_info *fbinfo = platform_get_drvdata(dev);
1044 struct s3c2410fb_info *info = fbinfo->par; 1053 struct s3c2410fb_info *info = fbinfo->par;
1045 1054
1046 s3c2410fb_stop_lcd(info); 1055 s3c2410fb_lcd_enable(info, 0);
1047 1056
1048 /* sleep before disabling the clock, we need to ensure 1057 /* sleep before disabling the clock, we need to ensure
1049 * the LCD DMA engine is not going to get back on the bus 1058 * the LCD DMA engine is not going to get back on the bus