commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=dd95dc034182870247f2bb44ae4d6efbe44d66b6
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk

Signed-off-by: Scott Jiang <[email protected]>
---
 drivers/media/video/adv7183.c |   74 ++++++++++++++++++++++------------------
 1 files changed, 41 insertions(+), 33 deletions(-)

diff --git a/drivers/media/video/adv7183.c b/drivers/media/video/adv7183.c
index b2e47bf..c457ebf 100644
--- a/drivers/media/video/adv7183.c
+++ b/drivers/media/video/adv7183.c
@@ -362,39 +362,47 @@ static int adv7183_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
 	struct adv7183 *decoder = to_adv7183(sd);
 	int reg;
 
-	if (decoder->std == V4L2_STD_ALL) {
-		reg = adv7183_read(sd, ADV7183_STATUS_1);
-		switch ((reg >> 0x4) & 0x7) {
-		case 0:
-			*std = V4L2_STD_NTSC;
-			break;
-		case 1:
-			*std = V4L2_STD_NTSC_443;
-			break;
-		case 2:
-			*std = V4L2_STD_PAL_M;
-			break;
-		case 3:
-			*std = V4L2_STD_PAL_60;
-			break;
-		case 4:
-			*std = V4L2_STD_PAL;
-			break;
-		case 5:
-			*std = V4L2_STD_SECAM;
-			break;
-		case 6:
-			*std = V4L2_STD_PAL_Nc;
-			break;
-		case 7:
-			*std = V4L2_STD_SECAM;
-			break;
-		default:
-			*std = V4L2_STD_UNKNOWN;
-			break;
-		}
-	} else
-		*std = decoder->std;
+	/* enable autodetection block */
+	reg = adv7183_read(sd, ADV7183_IN_CTRL) & 0xF;
+	adv7183_write(sd, ADV7183_IN_CTRL, reg);
+
+	/* wait autodetection switch */
+	mdelay(10);
+
+	/* get autodetection result */
+	reg = adv7183_read(sd, ADV7183_STATUS_1);
+	switch ((reg >> 0x4) & 0x7) {
+	case 0:
+		*std = V4L2_STD_NTSC;
+		break;
+	case 1:
+		*std = V4L2_STD_NTSC_443;
+		break;
+	case 2:
+		*std = V4L2_STD_PAL_M;
+		break;
+	case 3:
+		*std = V4L2_STD_PAL_60;
+		break;
+	case 4:
+		*std = V4L2_STD_PAL;
+		break;
+	case 5:
+		*std = V4L2_STD_SECAM;
+		break;
+	case 6:
+		*std = V4L2_STD_PAL_Nc;
+		break;
+	case 7:
+		*std = V4L2_STD_SECAM;
+		break;
+	default:
+		*std = V4L2_STD_UNKNOWN;
+		break;
+	}
+
+	/* after std detection, write back user set std */
+	adv7183_s_std(sd, decoder->std);
 	return 0;
 }
 
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to