video: stop sh_mobile_lcdcfb only if started
authorMagnus Damm <damm@igel.co.jp>
Wed, 20 May 2009 14:34:43 +0000 (14:34 +0000)
committerPaul Mundt <lethal@linux-sh.org>
Fri, 22 May 2009 04:19:15 +0000 (13:19 +0900)
This patch fixes the LCDC driver to avoid calling the
function sh_mobile_lcdc_start_stop(priv, 0) unless the
same function has been called before to start the LCDC
hardware.

Triggered when sh_mobile_lcdcfb.c failed to probe() due to
missing MSTP clocks.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
drivers/video/sh_mobile_lcdcfb.c

index 92ea0ab44ce23cd141882dceed16889bc26a97b9..f10d2fbeda060275750f3c61fc5dc5f48634f931 100644 (file)
@@ -47,6 +47,7 @@ struct sh_mobile_lcdc_priv {
 #endif
        unsigned long lddckr;
        struct sh_mobile_lcdc_chan ch[2];
+       int started;
 };
 
 /* shared registers */
@@ -451,6 +452,7 @@ static int sh_mobile_lcdc_start(struct sh_mobile_lcdc_priv *priv)
 
        /* start the lcdc */
        sh_mobile_lcdc_start_stop(priv, 1);
+       priv->started = 1;
 
        /* tell the board code to enable the panel */
        for (k = 0; k < ARRAY_SIZE(priv->ch); k++) {
@@ -493,7 +495,10 @@ static void sh_mobile_lcdc_stop(struct sh_mobile_lcdc_priv *priv)
        }
 
        /* stop the lcdc */
-       sh_mobile_lcdc_start_stop(priv, 0);
+       if (priv->started) {
+               sh_mobile_lcdc_start_stop(priv, 0);
+               priv->started = 0;
+       }
 
        /* stop clocks */
        for (k = 0; k < ARRAY_SIZE(priv->ch); k++)