* [PATCHv2 1/8] [media] saa7115: Fix standards detection
@ 2011-10-04 19:53 Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 2/8] [media] pvrusb2: implement VIDIOC_QUERYSTD Mauro Carvalho Chehab
0 siblings, 1 reply; 11+ messages in thread
From: Mauro Carvalho Chehab @ 2011-10-04 19:53 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab
There are several bugs at saa7115 standards detection:
After the fix, the driver is returning the proper standards,
as tested with 3 different broadcast sources:
On an invalid channel (without any TV signal):
[ 4394.931630] saa7115 15-0021: Status byte 2 (0x1f)=0xe0
[ 4394.931635] saa7115 15-0021: detected std mask = 00ffffff
With a PAL/M signal:
[ 4410.836855] saa7115 15-0021: Status byte 2 (0x1f)=0xb1
[ 4410.837727] saa7115 15-0021: Status byte 1 (0x1e)=0x82
[ 4410.837731] saa7115 15-0021: detected std mask = 00000900
With a NTSC/M signal:
[ 4422.383893] saa7115 15-0021: Status byte 2 (0x1f)=0xb1
[ 4422.384768] saa7115 15-0021: Status byte 1 (0x1e)=0x81
[ 4422.384772] saa7115 15-0021: detected std mask = 0000b000
Tests were done with a WinTV PVR USB2 Model 29xx card.
Reviewed-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
drivers/media/video/saa7115.c | 47 +++++++++++++++++++++++++++-------------
1 files changed, 32 insertions(+), 15 deletions(-)
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c
index cee98ea..86627a8 100644
--- a/drivers/media/video/saa7115.c
+++ b/drivers/media/video/saa7115.c
@@ -1344,35 +1344,52 @@ static int saa711x_g_vbi_data(struct v4l2_subdev *sd, struct v4l2_sliced_vbi_dat
static int saa711x_querystd(struct v4l2_subdev *sd, v4l2_std_id *std)
{
struct saa711x_state *state = to_state(sd);
- int reg1e;
+ int reg1f, reg1e;
- *std = V4L2_STD_ALL;
- if (state->ident != V4L2_IDENT_SAA7115) {
- int reg1f = saa711x_read(sd, R_1F_STATUS_BYTE_2_VD_DEC);
-
- if (reg1f & 0x20)
- *std = V4L2_STD_525_60;
- else
- *std = V4L2_STD_625_50;
-
- return 0;
+ 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;
+ goto ret;
}
+ if (reg1f & 0x20)
+ *std = V4L2_STD_525_60;
+ 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;
+ *std &= V4L2_STD_NTSC;
break;
case 2:
- *std = V4L2_STD_PAL;
+ /*
+ * 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;
+ *std &= V4L2_STD_SECAM;
break;
default:
+ /* Can't detect anything */
+ *std = V4L2_STD_ALL;
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);
+
return 0;
}
--
1.7.6.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv2 2/8] [media] pvrusb2: implement VIDIOC_QUERYSTD
2011-10-04 19:53 [PATCHv2 1/8] [media] saa7115: Fix standards detection Mauro Carvalho Chehab
@ 2011-10-04 19:53 ` Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 3/8] [media] v4l2-ioctl: Fill the default value for VIDIOC_QUERYSTD Mauro Carvalho Chehab
0 siblings, 1 reply; 11+ messages in thread
From: Mauro Carvalho Chehab @ 2011-10-04 19:53 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab
Acked-by: Mike Isely <isely@pobox.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
drivers/media/video/pvrusb2/pvrusb2-hdw.c | 7 +++++++
drivers/media/video/pvrusb2/pvrusb2-hdw.h | 3 +++
drivers/media/video/pvrusb2/pvrusb2-v4l2.c | 7 +++++++
3 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.c b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
index e98d382..5a6f24d 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.c
@@ -2993,6 +2993,13 @@ static void pvr2_subdev_set_control(struct pvr2_hdw *hdw, int id,
pvr2_subdev_set_control(hdw, id, #lab, (hdw)->lab##_val); \
}
+int pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw, v4l2_std_id *std)
+{
+ v4l2_device_call_all(&hdw->v4l2_dev, 0,
+ video, querystd, std);
+ return 0;
+}
+
/* Execute whatever commands are required to update the state of all the
sub-devices so that they match our current control values. */
static void pvr2_subdev_update(struct pvr2_hdw *hdw)
diff --git a/drivers/media/video/pvrusb2/pvrusb2-hdw.h b/drivers/media/video/pvrusb2/pvrusb2-hdw.h
index d7753ae..6654658 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-hdw.h
+++ b/drivers/media/video/pvrusb2/pvrusb2-hdw.h
@@ -214,6 +214,9 @@ struct pvr2_stream *pvr2_hdw_get_video_stream(struct pvr2_hdw *);
int pvr2_hdw_get_stdenum_value(struct pvr2_hdw *hdw,struct v4l2_standard *std,
unsigned int idx);
+/* Get the detected video standard */
+int pvr2_hdw_get_detected_std(struct pvr2_hdw *hdw, v4l2_std_id *std);
+
/* Enable / disable retrieval of CPU firmware or prom contents. This must
be enabled before pvr2_hdw_cpufw_get() will function. Note that doing
this may prevent the device from running (and leaving this mode may
diff --git a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
index e27f8ab..0d029da 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
@@ -227,6 +227,13 @@ static long pvr2_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
break;
}
+ case VIDIOC_QUERYSTD:
+ {
+ v4l2_std_id *std = arg;
+ ret = pvr2_hdw_get_detected_std(hdw, std);
+ break;
+ }
+
case VIDIOC_G_STD:
{
int val = 0;
--
1.7.6.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv2 3/8] [media] v4l2-ioctl: Fill the default value for VIDIOC_QUERYSTD
2011-10-04 19:53 ` [PATCHv2 2/8] [media] pvrusb2: implement VIDIOC_QUERYSTD Mauro Carvalho Chehab
@ 2011-10-04 19:53 ` Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 4/8] [media] saa7115: Trust that V4L2 core will fill the mask Mauro Carvalho Chehab
0 siblings, 1 reply; 11+ messages in thread
From: Mauro Carvalho Chehab @ 2011-10-04 19:53 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab
According with the V4L2 API spec:
"When detection is not possible or fails, the set must contain
all standards supported by the current video input or output."
The V4L2 core has the mask with all supported standards already. So,
apply it. Driver and subdevs can then just remove standards from the
mask, as they're able of detecting audio, video and frames frequency.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
drivers/media/video/v4l2-ioctl.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/drivers/media/video/v4l2-ioctl.c b/drivers/media/video/v4l2-ioctl.c
index 21c49dc..24fd433 100644
--- a/drivers/media/video/v4l2-ioctl.c
+++ b/drivers/media/video/v4l2-ioctl.c
@@ -1109,6 +1109,14 @@ static long __video_do_ioctl(struct file *file,
if (!ops->vidioc_querystd)
break;
+ /*
+ * If nothing detected, it should return all supported
+ * Drivers just need to mask the std argument, in order
+ * to remove the standards that don't apply from the mask.
+ * This means that tuners, audio and video decoders can join
+ * their efforts to improve the standards detection
+ */
+ *p = vfd->tvnorms;
ret = ops->vidioc_querystd(file, fh, arg);
if (!ret)
dbgarg(cmd, "detected std=%08Lx\n",
--
1.7.6.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv2 4/8] [media] saa7115: Trust that V4L2 core will fill the mask
2011-10-04 19:53 ` [PATCHv2 3/8] [media] v4l2-ioctl: Fill the default value for VIDIOC_QUERYSTD Mauro Carvalho Chehab
@ 2011-10-04 19:53 ` Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard Mauro Carvalho Chehab
0 siblings, 1 reply; 11+ messages in thread
From: Mauro Carvalho Chehab @ 2011-10-04 19:53 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab
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>
---
drivers/media/video/saa7115.c | 19 ++++++++++++-------
1 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c
index 86627a8..5cfdbc7 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;
}
--
1.7.6.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard
2011-10-04 19:53 ` [PATCHv2 4/8] [media] saa7115: Trust that V4L2 core will fill the mask Mauro Carvalho Chehab
@ 2011-10-04 19:53 ` Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 6/8] [media] videodev2: Reorganize standard macros and add a few more Mauro Carvalho Chehab
2011-10-05 14:00 ` [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard Mike Isely
0 siblings, 2 replies; 11+ messages in thread
From: Mauro Carvalho Chehab @ 2011-10-04 19:53 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab, Mike Isely
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
drivers/media/video/pvrusb2/pvrusb2-v4l2.c | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
index 0d029da..ce7ac45 100644
--- a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
+++ b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
@@ -230,6 +230,7 @@ static long pvr2_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
case VIDIOC_QUERYSTD:
{
v4l2_std_id *std = arg;
+ *std = V4L2_STD_ALL;
ret = pvr2_hdw_get_detected_std(hdw, std);
break;
}
--
1.7.6.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv2 6/8] [media] videodev2: Reorganize standard macros and add a few more
2011-10-04 19:53 ` [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard Mauro Carvalho Chehab
@ 2011-10-04 19:53 ` Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 7/8] [media] msp3400: Add standards detection to the driver Mauro Carvalho Chehab
2011-10-05 14:00 ` [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard Mike Isely
1 sibling, 1 reply; 11+ messages in thread
From: Mauro Carvalho Chehab @ 2011-10-04 19:53 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab
Reorganize the standards macro and add a few more, that will be
used on msp3400 in order to allow it to detect the audio standard.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
include/linux/videodev2.h | 79 +++++++++++++++++++++++++++++++++-----------
1 files changed, 59 insertions(+), 20 deletions(-)
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h
index 9d14523..225560c 100644
--- a/include/linux/videodev2.h
+++ b/include/linux/videodev2.h
@@ -759,10 +759,10 @@ typedef __u64 v4l2_std_id;
#define V4L2_STD_PAL_Nc ((v4l2_std_id)0x00000400)
#define V4L2_STD_PAL_60 ((v4l2_std_id)0x00000800)
-#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000)
-#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000)
+#define V4L2_STD_NTSC_M ((v4l2_std_id)0x00001000) /* BTSC */
+#define V4L2_STD_NTSC_M_JP ((v4l2_std_id)0x00002000) /* EIA-J */
#define V4L2_STD_NTSC_443 ((v4l2_std_id)0x00004000)
-#define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000)
+#define V4L2_STD_NTSC_M_KR ((v4l2_std_id)0x00008000) /* FM A2 */
#define V4L2_STD_SECAM_B ((v4l2_std_id)0x00010000)
#define V4L2_STD_SECAM_D ((v4l2_std_id)0x00020000)
@@ -786,47 +786,86 @@ typedef __u64 v4l2_std_id;
v4l2-common.c should be fixed.
*/
-/* some merged standards */
-#define V4L2_STD_MN (V4L2_STD_PAL_M|V4L2_STD_PAL_N|V4L2_STD_PAL_Nc|V4L2_STD_NTSC)
-#define V4L2_STD_B (V4L2_STD_PAL_B|V4L2_STD_PAL_B1|V4L2_STD_SECAM_B)
-#define V4L2_STD_GH (V4L2_STD_PAL_G|V4L2_STD_PAL_H|V4L2_STD_SECAM_G|V4L2_STD_SECAM_H)
-#define V4L2_STD_DK (V4L2_STD_PAL_DK|V4L2_STD_SECAM_DK)
+/*
+ * Some macros to merge video standards in order to make live easier for the
+ * drivers and V4L2 applications
+ */
-/* some common needed stuff */
-#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\
- V4L2_STD_PAL_B1 |\
- V4L2_STD_PAL_G)
-#define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\
- V4L2_STD_PAL_D1 |\
- V4L2_STD_PAL_K)
-#define V4L2_STD_PAL (V4L2_STD_PAL_BG |\
- V4L2_STD_PAL_DK |\
- V4L2_STD_PAL_H |\
- V4L2_STD_PAL_I)
+/*
+ * "Common" NTSC/M - It should be noticed that V4L2_STD_NTSC_443 is
+ * Missing here.
+ */
#define V4L2_STD_NTSC (V4L2_STD_NTSC_M |\
V4L2_STD_NTSC_M_JP |\
V4L2_STD_NTSC_M_KR)
+/* Secam macros */
#define V4L2_STD_SECAM_DK (V4L2_STD_SECAM_D |\
V4L2_STD_SECAM_K |\
V4L2_STD_SECAM_K1)
+/* All Secam Standards */
#define V4L2_STD_SECAM (V4L2_STD_SECAM_B |\
V4L2_STD_SECAM_G |\
V4L2_STD_SECAM_H |\
V4L2_STD_SECAM_DK |\
V4L2_STD_SECAM_L |\
V4L2_STD_SECAM_LC)
+/* PAL macros */
+#define V4L2_STD_PAL_BG (V4L2_STD_PAL_B |\
+ V4L2_STD_PAL_B1 |\
+ V4L2_STD_PAL_G)
+#define V4L2_STD_PAL_DK (V4L2_STD_PAL_D |\
+ V4L2_STD_PAL_D1 |\
+ V4L2_STD_PAL_K)
+/*
+ * "Common" PAL - This macro is there to be compatible with the old
+ * V4L1 concept of "PAL": /BGDKHI.
+ * Several PAL standards are mising here: /M, /N and /Nc
+ */
+#define V4L2_STD_PAL (V4L2_STD_PAL_BG |\
+ V4L2_STD_PAL_DK |\
+ V4L2_STD_PAL_H |\
+ V4L2_STD_PAL_I)
+/* Chroma "agnostic" standards */
+#define V4L2_STD_B (V4L2_STD_PAL_B |\
+ V4L2_STD_PAL_B1 |\
+ V4L2_STD_SECAM_B)
+#define V4L2_STD_G (V4L2_STD_PAL_G |\
+ V4L2_STD_SECAM_G)
+#define V4L2_STD_H (V4L2_STD_PAL_H |\
+ V4L2_STD_SECAM_H)
+#define V4L2_STD_L (V4L2_STD_SECAM_L |\
+ V4L2_STD_SECAM_LC)
+#define V4L2_STD_GH (V4L2_STD_G |\
+ V4L2_STD_H)
+#define V4L2_STD_DK (V4L2_STD_PAL_DK |\
+ V4L2_STD_SECAM_DK)
+#define V4L2_STD_BG (V4L2_STD_B |\
+ V4L2_STD_G)
+#define V4L2_STD_MN (V4L2_STD_PAL_M |\
+ V4L2_STD_PAL_N |\
+ V4L2_STD_PAL_Nc |\
+ V4L2_STD_NTSC)
+/* Standards where MTS/BTSC stereo could be found */
+#define V4L2_STD_MTS (V4L2_STD_NTSC_M |\
+ V4L2_STD_PAL_M |\
+ V4L2_STD_PAL_N |\
+ V4L2_STD_PAL_Nc)
+
+/* Standards for Countries with 60Hz Line frequency */
#define V4L2_STD_525_60 (V4L2_STD_PAL_M |\
V4L2_STD_PAL_60 |\
V4L2_STD_NTSC |\
V4L2_STD_NTSC_443)
+/* Standards for Countries with 50Hz Line frequency */
#define V4L2_STD_625_50 (V4L2_STD_PAL |\
V4L2_STD_PAL_N |\
V4L2_STD_PAL_Nc |\
V4L2_STD_SECAM)
+
#define V4L2_STD_ATSC (V4L2_STD_ATSC_8_VSB |\
V4L2_STD_ATSC_16_VSB)
-
+/* Macros with none and all analog standards */
#define V4L2_STD_UNKNOWN 0
#define V4L2_STD_ALL (V4L2_STD_525_60 |\
V4L2_STD_625_50)
--
1.7.6.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv2 7/8] [media] msp3400: Add standards detection to the driver
2011-10-04 19:53 ` [PATCHv2 6/8] [media] videodev2: Reorganize standard macros and add a few more Mauro Carvalho Chehab
@ 2011-10-04 19:53 ` Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 8/8] [media] em28xx: Add VIDIOC_QUERYSTD support Mauro Carvalho Chehab
0 siblings, 1 reply; 11+ messages in thread
From: Mauro Carvalho Chehab @ 2011-10-04 19:53 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab
As msp3400 allows standards detection, add support for it. That
efectivelly means that devices with msp3400 can now implement
VIDIOC_QUERYSTD, and it will provide very good detection for
the standard, specially if combined with a video decoder detection.
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
drivers/media/video/msp3400-driver.c | 20 +++++++
drivers/media/video/msp3400-driver.h | 2 +-
drivers/media/video/msp3400-kthreads.c | 86 +++++++++++++++++++++++--------
3 files changed, 85 insertions(+), 23 deletions(-)
diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c
index c43c81f..d0f5388 100644
--- a/drivers/media/video/msp3400-driver.c
+++ b/drivers/media/video/msp3400-driver.c
@@ -426,6 +426,20 @@ static int msp_s_frequency(struct v4l2_subdev *sd, struct v4l2_frequency *freq)
return 0;
}
+static int msp_querystd(struct v4l2_subdev *sd, v4l2_std_id *id)
+{
+ struct msp_state *state = to_state(sd);
+ struct i2c_client *client = v4l2_get_subdevdata(sd);
+
+ *id &= state->detected_std;
+
+ v4l_dbg(2, msp_debug, client,
+ "detected standard: %s(0x%08Lx)\n",
+ msp_standard_std_name(state->std), state->detected_std);
+
+ return 0;
+}
+
static int msp_s_std(struct v4l2_subdev *sd, v4l2_std_id id)
{
struct msp_state *state = to_state(sd);
@@ -616,6 +630,10 @@ static const struct v4l2_subdev_core_ops msp_core_ops = {
.s_std = msp_s_std,
};
+static const struct v4l2_subdev_video_ops msp_video_ops = {
+ .querystd = msp_querystd,
+};
+
static const struct v4l2_subdev_tuner_ops msp_tuner_ops = {
.s_frequency = msp_s_frequency,
.g_tuner = msp_g_tuner,
@@ -630,6 +648,7 @@ static const struct v4l2_subdev_audio_ops msp_audio_ops = {
static const struct v4l2_subdev_ops msp_ops = {
.core = &msp_core_ops,
+ .video = &msp_video_ops,
.tuner = &msp_tuner_ops,
.audio = &msp_audio_ops,
};
@@ -664,6 +683,7 @@ static int msp_probe(struct i2c_client *client, const struct i2c_device_id *id)
v4l2_i2c_subdev_init(sd, client, &msp_ops);
state->v4l2_std = V4L2_STD_NTSC;
+ state->detected_std = V4L2_STD_ALL;
state->audmode = V4L2_TUNER_MODE_STEREO;
state->input = -1;
state->i2s_mode = 0;
diff --git a/drivers/media/video/msp3400-driver.h b/drivers/media/video/msp3400-driver.h
index 32a478e..831e8db 100644
--- a/drivers/media/video/msp3400-driver.h
+++ b/drivers/media/video/msp3400-driver.h
@@ -75,7 +75,7 @@ struct msp_state {
int opmode;
int std;
int mode;
- v4l2_std_id v4l2_std;
+ v4l2_std_id v4l2_std, detected_std;
int nicam_on;
int acb;
int in_scart;
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c
index 80387e2..f8b5171 100644
--- a/drivers/media/video/msp3400-kthreads.c
+++ b/drivers/media/video/msp3400-kthreads.c
@@ -37,29 +37,49 @@ static struct {
int retval;
int main, second;
char *name;
+ v4l2_std_id std;
} msp_stdlist[] = {
- { 0x0000, 0, 0, "could not detect sound standard" },
- { 0x0001, 0, 0, "autodetect start" },
- { 0x0002, MSP_CARRIER(4.5), MSP_CARRIER(4.72), "4.5/4.72 M Dual FM-Stereo" },
- { 0x0003, MSP_CARRIER(5.5), MSP_CARRIER(5.7421875), "5.5/5.74 B/G Dual FM-Stereo" },
- { 0x0004, MSP_CARRIER(6.5), MSP_CARRIER(6.2578125), "6.5/6.25 D/K1 Dual FM-Stereo" },
- { 0x0005, MSP_CARRIER(6.5), MSP_CARRIER(6.7421875), "6.5/6.74 D/K2 Dual FM-Stereo" },
- { 0x0006, MSP_CARRIER(6.5), MSP_CARRIER(6.5), "6.5 D/K FM-Mono (HDEV3)" },
- { 0x0007, MSP_CARRIER(6.5), MSP_CARRIER(5.7421875), "6.5/5.74 D/K3 Dual FM-Stereo" },
- { 0x0008, MSP_CARRIER(5.5), MSP_CARRIER(5.85), "5.5/5.85 B/G NICAM FM" },
- { 0x0009, MSP_CARRIER(6.5), MSP_CARRIER(5.85), "6.5/5.85 L NICAM AM" },
- { 0x000a, MSP_CARRIER(6.0), MSP_CARRIER(6.55), "6.0/6.55 I NICAM FM" },
- { 0x000b, MSP_CARRIER(6.5), MSP_CARRIER(5.85), "6.5/5.85 D/K NICAM FM" },
- { 0x000c, MSP_CARRIER(6.5), MSP_CARRIER(5.85), "6.5/5.85 D/K NICAM FM (HDEV2)" },
- { 0x000d, MSP_CARRIER(6.5), MSP_CARRIER(5.85), "6.5/5.85 D/K NICAM FM (HDEV3)" },
- { 0x0020, MSP_CARRIER(4.5), MSP_CARRIER(4.5), "4.5 M BTSC-Stereo" },
- { 0x0021, MSP_CARRIER(4.5), MSP_CARRIER(4.5), "4.5 M BTSC-Mono + SAP" },
- { 0x0030, MSP_CARRIER(4.5), MSP_CARRIER(4.5), "4.5 M EIA-J Japan Stereo" },
- { 0x0040, MSP_CARRIER(10.7), MSP_CARRIER(10.7), "10.7 FM-Stereo Radio" },
- { 0x0050, MSP_CARRIER(6.5), MSP_CARRIER(6.5), "6.5 SAT-Mono" },
- { 0x0051, MSP_CARRIER(7.02), MSP_CARRIER(7.20), "7.02/7.20 SAT-Stereo" },
- { 0x0060, MSP_CARRIER(7.2), MSP_CARRIER(7.2), "7.2 SAT ADR" },
- { -1, 0, 0, NULL }, /* EOF */
+ { 0x0000, 0, 0, "could not detect sound standard", V4L2_STD_ALL },
+ { 0x0001, 0, 0, "autodetect start", V4L2_STD_ALL },
+ { 0x0002, MSP_CARRIER(4.5), MSP_CARRIER(4.72),
+ "4.5/4.72 M Dual FM-Stereo", V4L2_STD_MN },
+ { 0x0003, MSP_CARRIER(5.5), MSP_CARRIER(5.7421875),
+ "5.5/5.74 B/G Dual FM-Stereo", V4L2_STD_BG },
+ { 0x0004, MSP_CARRIER(6.5), MSP_CARRIER(6.2578125),
+ "6.5/6.25 D/K1 Dual FM-Stereo", V4L2_STD_DK },
+ { 0x0005, MSP_CARRIER(6.5), MSP_CARRIER(6.7421875),
+ "6.5/6.74 D/K2 Dual FM-Stereo", V4L2_STD_DK },
+ { 0x0006, MSP_CARRIER(6.5), MSP_CARRIER(6.5),
+ "6.5 D/K FM-Mono (HDEV3)", V4L2_STD_DK },
+ { 0x0007, MSP_CARRIER(6.5), MSP_CARRIER(5.7421875),
+ "6.5/5.74 D/K3 Dual FM-Stereo", V4L2_STD_DK },
+ { 0x0008, MSP_CARRIER(5.5), MSP_CARRIER(5.85),
+ "5.5/5.85 B/G NICAM FM", V4L2_STD_BG },
+ { 0x0009, MSP_CARRIER(6.5), MSP_CARRIER(5.85),
+ "6.5/5.85 L NICAM AM", V4L2_STD_L },
+ { 0x000a, MSP_CARRIER(6.0), MSP_CARRIER(6.55),
+ "6.0/6.55 I NICAM FM", V4L2_STD_PAL_I },
+ { 0x000b, MSP_CARRIER(6.5), MSP_CARRIER(5.85),
+ "6.5/5.85 D/K NICAM FM", V4L2_STD_DK },
+ { 0x000c, MSP_CARRIER(6.5), MSP_CARRIER(5.85),
+ "6.5/5.85 D/K NICAM FM (HDEV2)", V4L2_STD_DK },
+ { 0x000d, MSP_CARRIER(6.5), MSP_CARRIER(5.85),
+ "6.5/5.85 D/K NICAM FM (HDEV3)", V4L2_STD_DK },
+ { 0x0020, MSP_CARRIER(4.5), MSP_CARRIER(4.5),
+ "4.5 M BTSC-Stereo", V4L2_STD_MTS },
+ { 0x0021, MSP_CARRIER(4.5), MSP_CARRIER(4.5),
+ "4.5 M BTSC-Mono + SAP", V4L2_STD_MTS },
+ { 0x0030, MSP_CARRIER(4.5), MSP_CARRIER(4.5),
+ "4.5 M EIA-J Japan Stereo", V4L2_STD_NTSC_M_JP },
+ { 0x0040, MSP_CARRIER(10.7), MSP_CARRIER(10.7),
+ "10.7 FM-Stereo Radio", V4L2_STD_ALL },
+ { 0x0050, MSP_CARRIER(6.5), MSP_CARRIER(6.5),
+ "6.5 SAT-Mono", V4L2_STD_ALL },
+ { 0x0051, MSP_CARRIER(7.02), MSP_CARRIER(7.20),
+ "7.02/7.20 SAT-Stereo", V4L2_STD_ALL },
+ { 0x0060, MSP_CARRIER(7.2), MSP_CARRIER(7.2),
+ "7.2 SAT ADR", V4L2_STD_ALL },
+ { -1, 0, 0, NULL, 0 }, /* EOF */
};
static struct msp3400c_init_data_dem {
@@ -156,6 +176,16 @@ const char *msp_standard_std_name(int std)
return "unknown";
}
+static v4l2_std_id msp_standard_std(int std)
+{
+ int i;
+
+ for (i = 0; msp_stdlist[i].name != NULL; i++)
+ if (msp_stdlist[i].retval == std)
+ return msp_stdlist[i].std;
+ return V4L2_STD_ALL;
+}
+
static void msp_set_source(struct i2c_client *client, u16 src)
{
struct msp_state *state = to_state(i2c_get_clientdata(client));
@@ -479,6 +509,7 @@ int msp3400c_thread(void *data)
int count, max1, max2, val1, val2, val, i;
v4l_dbg(1, msp_debug, client, "msp3400 daemon started\n");
+ state->detected_std = V4L2_STD_ALL;
set_freezable();
for (;;) {
v4l_dbg(2, msp_debug, client, "msp3400 thread: sleep\n");
@@ -579,6 +610,7 @@ restart:
state->main = msp3400c_carrier_detect_main[max1].cdo;
switch (max1) {
case 1: /* 5.5 */
+ state->detected_std = V4L2_STD_BG | V4L2_STD_PAL_H;
if (max2 == 0) {
/* B/G FM-stereo */
state->second = msp3400c_carrier_detect_55[max2].cdo;
@@ -596,6 +628,7 @@ restart:
break;
case 2: /* 6.0 */
/* PAL I NICAM */
+ state->detected_std = V4L2_STD_PAL_I;
state->second = MSP_CARRIER(6.552);
msp3400c_set_mode(client, MSP_MODE_FM_NICAM2);
state->nicam_on = 1;
@@ -607,22 +640,26 @@ restart:
state->second = msp3400c_carrier_detect_65[max2].cdo;
msp3400c_set_mode(client, MSP_MODE_FM_TERRA);
state->watch_stereo = 1;
+ state->detected_std = V4L2_STD_DK;
} else if (max2 == 0 && (state->v4l2_std & V4L2_STD_SECAM)) {
/* L NICAM or AM-mono */
state->second = msp3400c_carrier_detect_65[max2].cdo;
msp3400c_set_mode(client, MSP_MODE_AM_NICAM);
state->watch_stereo = 1;
+ state->detected_std = V4L2_STD_L;
} else if (max2 == 0 && state->has_nicam) {
/* D/K NICAM */
state->second = msp3400c_carrier_detect_65[max2].cdo;
msp3400c_set_mode(client, MSP_MODE_FM_NICAM1);
state->nicam_on = 1;
state->watch_stereo = 1;
+ state->detected_std = V4L2_STD_DK;
} else {
goto no_second;
}
break;
case 0: /* 4.5 */
+ state->detected_std = V4L2_STD_MN;
default:
no_second:
state->second = msp3400c_carrier_detect_main[max1].cdo;
@@ -662,6 +699,7 @@ int msp3410d_thread(void *data)
int val, i, std, count;
v4l_dbg(1, msp_debug, client, "msp3410 daemon started\n");
+ state->detected_std = V4L2_STD_ALL;
set_freezable();
for (;;) {
v4l_dbg(2, msp_debug, client, "msp3410 thread: sleep\n");
@@ -743,6 +781,8 @@ restart:
msp_stdlist[8].name : "unknown", val);
state->std = val = 0x0009;
msp_write_dem(client, 0x20, val);
+ } else {
+ state->detected_std = msp_standard_std(state->std);
}
/* set stereo */
@@ -957,6 +997,7 @@ int msp34xxg_thread(void *data)
int val, i;
v4l_dbg(1, msp_debug, client, "msp34xxg daemon started\n");
+ state->detected_std = V4L2_STD_ALL;
set_freezable();
for (;;) {
v4l_dbg(2, msp_debug, client, "msp34xxg thread: sleep\n");
@@ -1013,6 +1054,7 @@ unmute:
v4l_dbg(1, msp_debug, client,
"detected standard: %s (0x%04x)\n",
msp_standard_std_name(state->std), state->std);
+ state->detected_std = msp_standard_std(state->std);
if (state->std == 9) {
/* AM NICAM mode */
--
1.7.6.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCHv2 8/8] [media] em28xx: Add VIDIOC_QUERYSTD support
2011-10-04 19:53 ` [PATCHv2 7/8] [media] msp3400: Add standards detection to the driver Mauro Carvalho Chehab
@ 2011-10-04 19:53 ` Mauro Carvalho Chehab
0 siblings, 0 replies; 11+ messages in thread
From: Mauro Carvalho Chehab @ 2011-10-04 19:53 UTC (permalink / raw)
To: linux-media; +Cc: Mauro Carvalho Chehab
Allow subdevs to return the detected standards
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
---
drivers/media/video/em28xx/em28xx-video.c | 16 ++++++++++++++++
1 files changed, 16 insertions(+), 0 deletions(-)
diff --git a/drivers/media/video/em28xx/em28xx-video.c b/drivers/media/video/em28xx/em28xx-video.c
index 61f35c8..62182e3 100644
--- a/drivers/media/video/em28xx/em28xx-video.c
+++ b/drivers/media/video/em28xx/em28xx-video.c
@@ -1156,6 +1156,21 @@ static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
return 0;
}
+static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
+{
+ struct em28xx_fh *fh = priv;
+ struct em28xx *dev = fh->dev;
+ int rc;
+
+ rc = check_dev(dev);
+ if (rc < 0)
+ return rc;
+
+ v4l2_device_call_all(&dev->v4l2_dev, 0, video, querystd, norm);
+
+ return 0;
+}
+
static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *norm)
{
struct em28xx_fh *fh = priv;
@@ -2354,6 +2369,7 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
.vidioc_qbuf = vidioc_qbuf,
.vidioc_dqbuf = vidioc_dqbuf,
.vidioc_g_std = vidioc_g_std,
+ .vidioc_querystd = vidioc_querystd,
.vidioc_s_std = vidioc_s_std,
.vidioc_g_parm = vidioc_g_parm,
.vidioc_s_parm = vidioc_s_parm,
--
1.7.6.4
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard
2011-10-04 19:53 ` [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 6/8] [media] videodev2: Reorganize standard macros and add a few more Mauro Carvalho Chehab
@ 2011-10-05 14:00 ` Mike Isely
2011-10-05 17:49 ` Mauro Carvalho Chehab
1 sibling, 1 reply; 11+ messages in thread
From: Mike Isely @ 2011-10-05 14:00 UTC (permalink / raw)
To: Mauro Carvalho Chehab; +Cc: linux-media
Mauro:
With the line you've just added, then the " = arg" assignment in the
immediate prior line is effectively dead code. Try this instead:
case VIDIOC_QUERYSTD:
{
- v4l2_std_id *std = arg;
+ v4l2_std_id *std = V4L2_STD_ALL;
ret = pvr2_hdw_get_detected_std(hdw, std);
break;
}
-Mike
On Tue, 4 Oct 2011, Mauro Carvalho Chehab wrote:
> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
> ---
> drivers/media/video/pvrusb2/pvrusb2-v4l2.c | 1 +
> 1 files changed, 1 insertions(+), 0 deletions(-)
>
> diff --git a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
> index 0d029da..ce7ac45 100644
> --- a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
> +++ b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
> @@ -230,6 +230,7 @@ static long pvr2_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
> case VIDIOC_QUERYSTD:
> {
> v4l2_std_id *std = arg;
> + *std = V4L2_STD_ALL;
> ret = pvr2_hdw_get_detected_std(hdw, std);
> break;
> }
>
--
Mike Isely
isely @ isely (dot) net
PGP: 03 54 43 4D 75 E5 CC 92 71 16 01 E2 B5 F5 C1 E8
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard
2011-10-05 14:00 ` [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard Mike Isely
@ 2011-10-05 17:49 ` Mauro Carvalho Chehab
2011-10-05 21:55 ` Mike Isely
0 siblings, 1 reply; 11+ messages in thread
From: Mauro Carvalho Chehab @ 2011-10-05 17:49 UTC (permalink / raw)
To: Mike Isely; +Cc: linux-media
Em 05-10-2011 11:00, Mike Isely escreveu:
>
> Mauro:
>
> With the line you've just added, then the " = arg" assignment in the
> immediate prior line is effectively dead code. Try this instead:
Look better:
>> v4l2_std_id *std = arg;
>> + *std = V4L2_STD_ALL;
The above code is creating a pointer 'std' of the type 'v4l2_std_id', and
initializing the pointer with the void *arg.
Then, it is doing an indirect reference to the pointer, filling its
contents with V4L2_STD_ALL value.
The code above is sane (and, btw, it works). After those patches, the
detection code will detect PAL/M or NTSC/M depending on the channel I
tune here (my cable operator broadcasts some channels with one format,
and others with the other one). Before this patch and the msp3400, it
would return a mask with PAL/M and PAL/60 or a mask with all NTSC/M formats.
Regards,
Mauro.
>
> case VIDIOC_QUERYSTD:
> {
> - v4l2_std_id *std = arg;
> + v4l2_std_id *std = V4L2_STD_ALL;
> ret = pvr2_hdw_get_detected_std(hdw, std);
> break;
> }
>
> -Mike
>
>
> On Tue, 4 Oct 2011, Mauro Carvalho Chehab wrote:
>
>> Signed-off-by: Mauro Carvalho Chehab<mchehab@redhat.com>
>> ---
>> drivers/media/video/pvrusb2/pvrusb2-v4l2.c | 1 +
>> 1 files changed, 1 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
>> index 0d029da..ce7ac45 100644
>> --- a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
>> +++ b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
>> @@ -230,6 +230,7 @@ static long pvr2_v4l2_do_ioctl(struct file *file, unsigned int cmd, void *arg)
>> case VIDIOC_QUERYSTD:
>> {
>> v4l2_std_id *std = arg;
>> + *std = V4L2_STD_ALL;
>> ret = pvr2_hdw_get_detected_std(hdw, std);
>> break;
>> }
>>
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard
2011-10-05 17:49 ` Mauro Carvalho Chehab
@ 2011-10-05 21:55 ` Mike Isely
0 siblings, 0 replies; 11+ messages in thread
From: Mike Isely @ 2011-10-05 21:55 UTC (permalink / raw)
To: Mauro Carvalho Chehab; +Cc: linux-media
On Wed, 5 Oct 2011, Mauro Carvalho Chehab wrote:
> Em 05-10-2011 11:00, Mike Isely escreveu:
> >
> > Mauro:
> >
> > With the line you've just added, then the " = arg" assignment in the
> > immediate prior line is effectively dead code. Try this instead:
>
> Look better:
>
> > > v4l2_std_id *std = arg;
> > > + *std = V4L2_STD_ALL;
>
> The above code is creating a pointer 'std' of the type 'v4l2_std_id', and
> initializing the pointer with the void *arg.
Oh yeah, you're absolutely right. I got visually tricked by the well
known confusing C initialization syntax when dealing with pointers!
I've got to not respond to stuff like this in the morning until I've
finished waking up. Duh...
>
> Then, it is doing an indirect reference to the pointer, filling its
> contents with V4L2_STD_ALL value.
>
> The code above is sane (and, btw, it works). After those patches, the
> detection code will detect PAL/M or NTSC/M depending on the channel I
> tune here (my cable operator broadcasts some channels with one format,
> and others with the other one). Before this patch and the msp3400, it
> would return a mask with PAL/M and PAL/60 or a mask with all NTSC/M formats.
Regarding your first version of the patch:
Acked-By: Mike Isely <isely@pobox.com>
-Mike
>
> Regards,
> Mauro.
>
> >
> > case VIDIOC_QUERYSTD:
> > {
> > - v4l2_std_id *std = arg;
> > + v4l2_std_id *std = V4L2_STD_ALL;
> > ret = pvr2_hdw_get_detected_std(hdw, std);
> > break;
> > }
> >
> > -Mike
> >
> >
> > On Tue, 4 Oct 2011, Mauro Carvalho Chehab wrote:
> >
> > > Signed-off-by: Mauro Carvalho Chehab<mchehab@redhat.com>
> > > ---
> > > drivers/media/video/pvrusb2/pvrusb2-v4l2.c | 1 +
> > > 1 files changed, 1 insertions(+), 0 deletions(-)
> > >
> > > diff --git a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
> > > b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
> > > index 0d029da..ce7ac45 100644
> > > --- a/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
> > > +++ b/drivers/media/video/pvrusb2/pvrusb2-v4l2.c
> > > @@ -230,6 +230,7 @@ static long pvr2_v4l2_do_ioctl(struct file *file,
> > > unsigned int cmd, void *arg)
> > > case VIDIOC_QUERYSTD:
> > > {
> > > v4l2_std_id *std = arg;
> > > + *std = V4L2_STD_ALL;
> > > ret = pvr2_hdw_get_detected_std(hdw, std);
> > > break;
> > > }
> > >
> >
>
>
--
Mike Isely
isely @ isely (dot) net
PGP: 03 54 43 4D 75 E5 CC 92 71 16 01 E2 B5 F5 C1 E8
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2011-10-05 21:55 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-04 19:53 [PATCHv2 1/8] [media] saa7115: Fix standards detection Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 2/8] [media] pvrusb2: implement VIDIOC_QUERYSTD Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 3/8] [media] v4l2-ioctl: Fill the default value for VIDIOC_QUERYSTD Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 4/8] [media] saa7115: Trust that V4L2 core will fill the mask Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 6/8] [media] videodev2: Reorganize standard macros and add a few more Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 7/8] [media] msp3400: Add standards detection to the driver Mauro Carvalho Chehab
2011-10-04 19:53 ` [PATCHv2 8/8] [media] em28xx: Add VIDIOC_QUERYSTD support Mauro Carvalho Chehab
2011-10-05 14:00 ` [PATCHv2 5/8] [media] pvrusb2: initialize standards mask before detecting standard Mike Isely
2011-10-05 17:49 ` Mauro Carvalho Chehab
2011-10-05 21:55 ` Mike Isely
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox