diff options
author | Sandor Yu <R01008@freescale.com> | 2015-02-11 16:06:03 +0800 |
---|---|---|
committer | Nitin Garg <nitin.garg@freescale.com> | 2015-04-14 14:02:25 -0500 |
commit | 22e7a7b78fe8b8ab9e70102632cb4e4c8f0e8bf3 (patch) | |
tree | 33af4e8fbc3cbe6cdf6562d42ebba7729537721e /drivers/media | |
parent | 08a9ce556a75680ae0a077d300af9307015d66fb (diff) |
MLK-10249: vadc: improve vadc video mode detected
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>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/platform/mxc/subdev/mxc_vadc.c | 25 | ||||
-rw-r--r-- | drivers/media/platform/mxc/subdev/mxc_vadc.h | 5 |
2 files changed, 19 insertions, 11 deletions
diff --git a/drivers/media/platform/mxc/subdev/mxc_vadc.c b/drivers/media/platform/mxc/subdev/mxc_vadc.c index f77044f895b7..d3bd54981b6f 100644 --- a/drivers/media/platform/mxc/subdev/mxc_vadc.c +++ b/drivers/media/platform/mxc/subdev/mxc_vadc.c @@ -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; } diff --git a/drivers/media/platform/mxc/subdev/mxc_vadc.h b/drivers/media/platform/mxc/subdev/mxc_vadc.h index 6ed5eeb982d0..d5c1389cbc58 100644 --- a/drivers/media/platform/mxc/subdev/mxc_vadc.h +++ b/drivers/media/platform/mxc/subdev/mxc_vadc.h @@ -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 @@ -226,6 +226,9 @@ #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) |