summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2011-10-04 16:40:18 +0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2011-10-08 15:00:44 +0400
commite41567a61dff8f63ad7b56a325bd4d2350428999 (patch)
tree40c797a50b5e22ddda17386ba8234e3bff8937be
parent8715e6cbae2ec8b451920496a73786402a5d879d (diff)
downloadlinux-e41567a61dff8f63ad7b56a325bd4d2350428999.tar.xz
[media] saa7115: Trust that V4L2 core will fill the mask
Instead of using V4L2_STD_ALL when no standard is detected, trust that the maximum allowed standards are already filled by the V4L2 core. It is better this way, as the bridge and/or the audio decoder may have some extra restrictions to some video standards. This also allow other devices like audio and tuners to contribute to standards detection, when they support such feature. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/video/saa7115.c19
1 files changed, 12 insertions, 7 deletions
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c
index 86627a8fdbfb..5cfdbc78b918 100644
--- a/drivers/media/video/saa7115.c
+++ b/drivers/media/video/saa7115.c
@@ -1346,17 +1346,23 @@ static int saa711x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
struct saa711x_state *state = to_state(sd);
int reg1f, reg1e;
+ /*
+ * The V4L2 core already initializes std with all supported
+ * Standards. All driver needs to do is to mask it, to remove
+ * standards that don't apply from the mask
+ */
+
reg1f = saa711x_read(sd, R_1F_STATUS_BYTE_2_VD_DEC);
v4l2_dbg(1, debug, sd, "Status byte 2 (0x1f)=0x%02x\n", reg1f);
- if (reg1f & 0x40) {
- /* horizontal/vertical not locked */
- *std = V4L2_STD_ALL;
+
+ /* horizontal/vertical not locked */
+ if (reg1f & 0x40)
goto ret;
- }
+
if (reg1f & 0x20)
- *std = V4L2_STD_525_60;
+ *std &= V4L2_STD_525_60;
else
- *std = V4L2_STD_625_50;
+ *std &= V4L2_STD_625_50;
if (state->ident != V4L2_IDENT_SAA7115)
goto ret;
@@ -1381,7 +1387,6 @@ static int saa711x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
break;
default:
/* Can't detect anything */
- *std = V4L2_STD_ALL;
break;
}