]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/video/fbdev/mxsfb.c
ENGR00296050 mxsfb: fb failed to work after suspend in console mode
[karo-tx-linux.git] / drivers / video / fbdev / mxsfb.c
index ef4e750578fc309db6948c451030c2d8d78be2d0..5e5901403e5b62c47bf53a2bf87a0da6f2de1cbc 100644 (file)
@@ -4,7 +4,7 @@
  * This code is based on:
  * Author: Vitaly Wool <vital@embeddedalley.com>
  *
- * Copyright 2008-2013 Freescale Semiconductor, Inc. All Rights Reserved.
+ * Copyright 2008-2014 Freescale Semiconductor, Inc. All Rights Reserved.
  * Copyright 2008 Embedded Alley Solutions, Inc All Rights Reserved.
  *
  * This program is free software; you can redistribute it and/or
@@ -358,6 +358,9 @@ static void mxsfb_enable_controller(struct fb_info *fb_info)
        clk_prepare_enable(host->clk_pix);
        clk_set_rate(host->clk_pix, PICOS2KHZ(fb_info->var.pixclock) * 1000U);
 
+       /* Clean soft reset and clock gate bit if it was enabled  */
+       writel(CTRL_SFTRST | CTRL_CLKGATE, host->base + LCDC_CTRL + REG_CLR);
+
        /* if it was disabled, re-enable the mode again */
        writel(CTRL_DOTCLK_MODE, host->base + LCDC_CTRL + REG_SET);
 
@@ -366,6 +369,7 @@ static void mxsfb_enable_controller(struct fb_info *fb_info)
        reg |= VDCTRL4_SYNC_SIGNALS_ON;
        writel(reg, host->base + LCDC_VDCTRL4);
 
+       writel(CTRL_MASTER, host->base + LCDC_CTRL + REG_SET);
        writel(CTRL_RUN, host->base + LCDC_CTRL + REG_SET);
 
        host->enabled = 1;
@@ -395,6 +399,8 @@ static void mxsfb_disable_controller(struct fb_info *fb_info)
                loop--;
        }
 
+       writel(CTRL_MASTER, host->base + LCDC_CTRL + REG_CLR);
+
        reg = readl(host->base + LCDC_VDCTRL4);
        writel(reg & ~VDCTRL4_SYNC_SIGNALS_ON, host->base + LCDC_VDCTRL4);
 
@@ -584,6 +590,7 @@ static int mxsfb_blank(int blank, struct fb_info *fb_info)
        case FB_BLANK_UNBLANK:
                if (!host->enabled)
                        mxsfb_enable_controller(fb_info);
+               mxsfb_set_par(&host->fb_info);
                break;
        }
        return 0;
@@ -980,6 +987,7 @@ static void mxsfb_shutdown(struct platform_device *pdev)
         * might interfere with the BootROM's boot mode pads sampling.
         */
        writel(CTRL_RUN, host->base + LCDC_CTRL + REG_CLR);
+       writel(CTRL_MASTER, host->base + LCDC_CTRL + REG_CLR);
        clk_disable_axi(host);
 }