]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
MLK-10249: vadc: improve vadc video mode detected
authorSandor Yu <R01008@freescale.com>
Wed, 11 Feb 2015 08:06:03 +0000 (16:06 +0800)
committerSandor Yu <R01008@freescale.com>
Thu, 12 Feb 2015 02:26:38 +0000 (10:26 +0800)
After enable dispmix function, vadc driver 50%
failed to detect video mode.
Add video signal state check before read the result
of video mode detect, vadc driver detected correct video mode
increase to 95%.

Signed-off-by: Sandor Yu <R01008@freescale.com>
(cherry picked from commit b95957f4bc258c86683501d60f70371366ce3bd3)

drivers/media/platform/mxc/subdev/mxc_vadc.c
drivers/media/platform/mxc/subdev/mxc_vadc.h

index f77044f895b795397de6c9c585e2a74acd5e8617..d3bd54981b6fd47bd2e04e14d0aa3da3336dcd40 100644 (file)
@@ -463,19 +463,24 @@ static int vadc_g_std(struct v4l2_subdev *sd, v4l2_std_id *std)
 static int vadc_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
 {
        struct vadc_state *state = to_state(sd);
-       int tmp;
+       int mod;
        int idx;
+       int i;
 
        /* Read auto mode detected result */
-       printk(KERN_INFO"wait vadc auto detect video mode....");
-       msleep(500);
-       do {
-               tmp = reg32_read(VDEC_VIDMOD);
-       } while (tmp == 0);
-
-       tmp &= (VDEC_VIDMOD_PAL_MASK | VDEC_VIDMOD_M625_MASK);
+       printk(KERN_INFO"wait vadc auto detect video mode....\n");
+       for (i = 0; i < 10; i++) {
+               msleep(200);
+               mod = reg32_read(VDEC_VIDMOD);
+               /* Check video signal states */
+               if ((mod & VDEC_VIDMOD_SIGNAL_MASK)
+                               == VDEC_VIDMOD_SIGNAL_DETECT)
+                       break;
+       }
+       if (i == 10)
+               printk(KERN_INFO"Timeout detect video signal mod=0x%x\n", mod);
 
-       if (tmp)
+       if ((mod & VDEC_VIDMOD_PAL_MASK) || (mod & VDEC_VIDMOD_M625_MASK))
                idx = VADC_PAL;
        else
                idx = VADC_NTSC;
@@ -483,7 +488,7 @@ static int vadc_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
        *std = video_fmts[idx].v4l2_std;
        state->fmt = &video_fmts[idx];
 
-       pr_debug("std=%s\n", video_fmts[idx].name);
+       printk(KERN_INFO"video mode %s\n", video_fmts[idx].name);
        return 0;
 }
 
index 6ed5eeb982d0c146f5be5d658b076d728a655112..d5c1389cbc589c48d6872c874da0efc4f3ba60e4 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2011-2014 Freescale Semiconductor, Inc.
+ * Copyright (C) 2011-2015 Freescale Semiconductor, Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
 #define VDEC_NCHTH                       (VDEC_BASE + VDEC_NCHTH_OFFSET)
 #define VDEC_TH1F                        (VDEC_BASE + VDEC_TH1F_OFFSET)
 
+#define VDEC_VIDMOD_SIGNAL_MASK           0x0F
+#define VDEC_VIDMOD_SIGNAL_DETECT         0x0F
+
 #define VDEC_VIDMOD_M625_SHIFT            4
 #define VDEC_VIDMOD_M625_MASK             (1 << VDEC_VIDMOD_M625_SHIFT)