OSDN Git Service

[media] saa7115: improve querystd handling for the saa7115
authorHans Verkuil <hans.verkuil@cisco.com>
Sun, 10 Mar 2013 12:59:37 +0000 (09:59 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sun, 24 Mar 2013 15:05:48 +0000 (12:05 -0300)
The saa7115 has better PAL/NTSC detection, so it can detect PAL even
though the chip is currently set up for NTSC.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/i2c/saa7115.c

index c3e7e12..cdff1f6 100644 (file)
@@ -1360,6 +1360,34 @@ static int saa711x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
         */
 
        reg1f = saa711x_read(sd, R_1F_STATUS_BYTE_2_VD_DEC);
+
+       if (state->ident == V4L2_IDENT_SAA7115) {
+               reg1e = saa711x_read(sd, R_1E_STATUS_BYTE_1_VD_DEC);
+
+               v4l2_dbg(1, debug, sd, "Status byte 1 (0x1e)=0x%02x\n", reg1e);
+
+               switch (reg1e & 0x03) {
+               case 1:
+                       *std &= V4L2_STD_NTSC;
+                       break;
+               case 2:
+                       /*
+                        * V4L2_STD_PAL just cover the european PAL standards.
+                        * This is wrong, as the device could also be using an
+                        * other PAL standard.
+                        */
+                       *std &= V4L2_STD_PAL   | V4L2_STD_PAL_N  | V4L2_STD_PAL_Nc |
+                               V4L2_STD_PAL_M | V4L2_STD_PAL_60;
+                       break;
+               case 3:
+                       *std &= V4L2_STD_SECAM;
+                       break;
+               default:
+                       /* Can't detect anything */
+                       break;
+               }
+       }
+
        v4l2_dbg(1, debug, sd, "Status byte 2 (0x1f)=0x%02x\n", reg1f);
 
        /* horizontal/vertical not locked */
@@ -1371,34 +1399,6 @@ static int saa711x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
        else
                *std &= V4L2_STD_625_50;
 
-       if (state->ident != V4L2_IDENT_SAA7115)
-               goto ret;
-
-       reg1e = saa711x_read(sd, R_1E_STATUS_BYTE_1_VD_DEC);
-
-       switch (reg1e & 0x03) {
-       case 1:
-               *std &= V4L2_STD_NTSC;
-               break;
-       case 2:
-               /*
-                * V4L2_STD_PAL just cover the european PAL standards.
-                * This is wrong, as the device could also be using an
-                * other PAL standard.
-                */
-               *std &= V4L2_STD_PAL   | V4L2_STD_PAL_N  | V4L2_STD_PAL_Nc |
-                       V4L2_STD_PAL_M | V4L2_STD_PAL_60;
-               break;
-       case 3:
-               *std &= V4L2_STD_SECAM;
-               break;
-       default:
-               /* Can't detect anything */
-               break;
-       }
-
-       v4l2_dbg(1, debug, sd, "Status byte 1 (0x1e)=0x%02x\n", reg1e);
-
 ret:
        v4l2_dbg(1, debug, sd, "detected std mask = %08Lx\n", *std);