[media] tvp514x: fix querystd
authorHans Verkuil <hans.verkuil@cisco.com>
Wed, 29 May 2013 13:19:00 +0000 (10:19 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 17 Jun 2013 12:44:08 +0000 (09:44 -0300)
Return V4L2_STD_UNKNOWN if no signal is detected.
Otherwise AND the standard mask with the detected standards.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Acked-by: Lad, Prabhakar <prabhakar.csengg@gmail.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/i2c/tvp514x.c

index b5c17eb..b8061b5 100644 (file)
@@ -542,8 +542,6 @@ static int tvp514x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std_id)
        if (std_id == NULL)
                return -EINVAL;
 
-       *std_id = V4L2_STD_UNKNOWN;
-
        /* To query the standard the TVP514x must power on the ADCs. */
        if (!decoder->streaming) {
                tvp514x_s_stream(sd, 1);
@@ -552,8 +550,10 @@ static int tvp514x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std_id)
 
        /* query the current standard */
        current_std = tvp514x_query_current_std(sd);
-       if (current_std == STD_INVALID)
+       if (current_std == STD_INVALID) {
+               *std_id = V4L2_STD_UNKNOWN;
                return 0;
+       }
 
        input_sel = decoder->input;
 
@@ -594,10 +594,12 @@ static int tvp514x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std_id)
        }
        /* check whether signal is locked */
        sync_lock_status = tvp514x_read_reg(sd, REG_STATUS1);
-       if (lock_mask != (sync_lock_status & lock_mask))
+       if (lock_mask != (sync_lock_status & lock_mask)) {
+               *std_id = V4L2_STD_UNKNOWN;
                return 0;       /* No input detected */
+       }
 
-       *std_id = decoder->std_list[current_std].standard.id;
+       *std_id &= decoder->std_list[current_std].standard.id;
 
        v4l2_dbg(1, debug, sd, "Current STD: %s\n",
                        decoder->std_list[current_std].standard.name);