* [PATCH v2 00/10] Support getting default values from any control
@ 2015-08-21 13:19 Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 01/10] videodev2.h: Fix typo in comment Ricardo Ribalda Delgado
` (10 more replies)
0 siblings, 11 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
Integer controls provide a way to get their default/initial value, but
any other control (p_u32, p_u8.....) provide no other way to get the
initial value than unloading the module and loading it back.
*What is the actual problem?
I have a custom control with WIDTH integer values. Every value
represents the calibrated FPN (fixed pattern noise) correction value for that
column
-Application A changes the FPN correction value
-Application B wants to restore the calibrated value but it cant :(
*What is the proposed solution?
(Kudos to Hans Verkuil!!!)
The key change is in struct v4l2_ext_controls where the __u32 ctrl_class field
is changed to:
union {
__u32 ctrl_class;
__u32 which;
};
And two new defines are added:
#define V4L2_CTRL_WHICH_CUR_VAL 0
#define V4L2_CTRL_WHICH_DEF_VAL 0x0f000000
The 'which' field tells you which controls are get/set/tried.
V4L2_CTRL_WHICH_CUR_VAL: the current value of the controls
V4L2_CTRL_WHICH_DEF_VAL: the default value of the controls
V4L2_CTRL_CLASS_*: the current value of the controls belonging to the specified class.
Note: this is deprecated usage and is only there for backwards compatibility.
Which is also why I don't think there is a need to add V4L2_CTRL_WHICH_
aliases for these defines.
I have posted a copy of my working tree to
https://github.com/ribalda/linux/tree/which_def_v2
Changelog v2:
Suggested by Hans Verkuil <hverkuil@xs4all.nl>
Replace ctrls_class with which on all the codebase
Changes in Documentation
(Thanks!)
Ricardo Ribalda Delgado (10):
videodev2.h: Fix typo in comment
videodev2.h: Extend struct v4l2_ext_controls
media/v4l2-compat-ioctl32: Simple stylechecks
media/core: Replace ctrl_class with which
media/v4l2-core: struct struct v4l2_ext_controls param which
usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL
media/usb/pvrusb2: Support for V4L2_CTRL_WHICH_DEF_VAL
media/pci/saa7164-encoder Support for V4L2_CTRL_WHICH_DEF_VAL
media/pci/saa7164-vbi Support for V4L2_CTRL_WHICH_DEF_VAL
Docbook: media: Document changes on struct v4l2_ext_controls
Documentation/DocBook/media/v4l/v4l2.xml | 9 ++++
.../DocBook/media/v4l/vidioc-g-ext-ctrls.xml | 28 ++++++++--
drivers/media/pci/saa7164/saa7164-encoder.c | 59 ++++++++++++---------
drivers/media/pci/saa7164/saa7164-vbi.c | 61 +++++++++++++---------
drivers/media/platform/s5p-mfc/s5p_mfc_dec.c | 2 +-
drivers/media/platform/s5p-mfc/s5p_mfc_enc.c | 2 +-
drivers/media/usb/pvrusb2/pvrusb2-v4l2.c | 17 +++++-
drivers/media/usb/uvc/uvc_v4l2.c | 14 ++++-
drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 17 +++---
drivers/media/v4l2-core/v4l2-ctrls.c | 54 +++++++++++++------
drivers/media/v4l2-core/v4l2-ioctl.c | 14 ++---
include/uapi/linux/videodev2.h | 14 ++++-
12 files changed, 200 insertions(+), 91 deletions(-)
--
2.5.0
^ permalink raw reply [flat|nested] 15+ messages in thread
* [PATCH v2 01/10] videodev2.h: Fix typo in comment
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 02/10] videodev2.h: Extend struct v4l2_ext_controls Ricardo Ribalda Delgado
` (9 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
Referenced file has moved
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
include/uapi/linux/videodev2.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 3228fbebcd63..72fa3e490e30 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -2271,7 +2271,7 @@ struct v4l2_create_buffers {
#define VIDIOC_QUERY_EXT_CTRL _IOWR('V', 103, struct v4l2_query_ext_ctrl)
/* Reminder: when adding new ioctls please add support for them to
- drivers/media/video/v4l2-compat-ioctl32.c as well! */
+ drivers/media/v4l2-core/v4l2-compat-ioctl32.c as well! */
#define BASE_VIDIOC_PRIVATE 192 /* 192-255 are private */
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 02/10] videodev2.h: Extend struct v4l2_ext_controls
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 01/10] videodev2.h: Fix typo in comment Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 03/10] media/v4l2-compat-ioctl32: Simple stylechecks Ricardo Ribalda Delgado
` (8 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
So it can be used to get the default value of a control.
Without this change it is not possible to get get the
default value of array controls.
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
include/uapi/linux/videodev2.h | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 72fa3e490e30..2e857b19a155 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1461,7 +1461,10 @@ struct v4l2_ext_control {
} __attribute__ ((packed));
struct v4l2_ext_controls {
- __u32 ctrl_class;
+ union {
+ __u32 ctrl_class;
+ __u32 which;
+ };
__u32 count;
__u32 error_idx;
__u32 reserved[2];
@@ -1472,6 +1475,8 @@ struct v4l2_ext_controls {
#define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL)
#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
#define V4L2_CTRL_MAX_DIMS (4)
+#define V4L2_CTRL_WHICH_CUR_VAL 0
+#define V4L2_CTRL_WHICH_DEF_VAL 0x0f000000
enum v4l2_ctrl_type {
V4L2_CTRL_TYPE_INTEGER = 1,
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 03/10] media/v4l2-compat-ioctl32: Simple stylechecks
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 01/10] videodev2.h: Fix typo in comment Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 02/10] videodev2.h: Extend struct v4l2_ext_controls Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 04/10] media/core: Replace ctrl_class with which Ricardo Ribalda Delgado
` (7 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
The next patches on the serie need this modifications to pass clean
checkpath.pl.
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index af635430524e..5416806609a8 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -609,11 +609,11 @@ static inline int put_v4l2_input32(struct v4l2_input *kp, struct v4l2_input32 __
}
struct v4l2_ext_controls32 {
- __u32 ctrl_class;
- __u32 count;
- __u32 error_idx;
- __u32 reserved[2];
- compat_caddr_t controls; /* actually struct v4l2_ext_control32 * */
+ __u32 ctrl_class;
+ __u32 count;
+ __u32 error_idx;
+ __u32 reserved[2];
+ compat_caddr_t controls; /* actually struct v4l2_ext_control32 * */
};
struct v4l2_ext_control32 {
@@ -655,7 +655,8 @@ static int get_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
get_user(kp->ctrl_class, &up->ctrl_class) ||
get_user(kp->count, &up->count) ||
get_user(kp->error_idx, &up->error_idx) ||
- copy_from_user(kp->reserved, up->reserved, sizeof(kp->reserved)))
+ copy_from_user(kp->reserved, up->reserved,
+ sizeof(kp->reserved)))
return -EFAULT;
n = kp->count;
if (n == 0) {
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 04/10] media/core: Replace ctrl_class with which
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
` (2 preceding siblings ...)
2015-08-21 13:19 ` [PATCH v2 03/10] media/v4l2-compat-ioctl32: Simple stylechecks Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 05/10] media/v4l2-core: struct struct v4l2_ext_controls param which Ricardo Ribalda Delgado
` (6 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
Replace the obsolete field ctrl_class with "which".
Make sure it not used in future modules by commenting out the field with
ifndef __KERNEL_ .
The field cannot be simply removed because that would be change on the
kenel API to the userspace (and we don't like that).
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
.../DocBook/media/v4l/vidioc-g-ext-ctrls.xml | 6 +++---
drivers/media/pci/saa7164/saa7164-encoder.c | 6 +++---
drivers/media/pci/saa7164/saa7164-vbi.c | 6 +++---
drivers/media/platform/s5p-mfc/s5p_mfc_dec.c | 2 +-
drivers/media/platform/s5p-mfc/s5p_mfc_enc.c | 2 +-
drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 6 +++---
drivers/media/v4l2-core/v4l2-ctrls.c | 24 +++++++++++-----------
drivers/media/v4l2-core/v4l2-ioctl.c | 14 ++++++-------
include/uapi/linux/videodev2.h | 5 +++++
9 files changed, 38 insertions(+), 33 deletions(-)
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml b/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml
index c5bdbfcc42b3..8f4eb395665d 100644
--- a/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml
+++ b/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml
@@ -61,7 +61,7 @@ must belong to the same control class.</para>
<para>Applications must always fill in the
<structfield>count</structfield>,
-<structfield>ctrl_class</structfield>,
+<structfield>which</structfield>,
<structfield>controls</structfield> and
<structfield>reserved</structfield> fields of &v4l2-ext-controls;, and
initialize the &v4l2-ext-control; array pointed to by the
@@ -109,7 +109,7 @@ the driver whether wrong values are automatically adjusted to a valid
value or if an error is returned.</para>
<para>When the <structfield>id</structfield> or
-<structfield>ctrl_class</structfield> is invalid drivers return an
+<structfield>which</structfield> is invalid drivers return an
&EINVAL;. When the value is out of bounds drivers can choose to take
the closest valid value or return an &ERANGE;, whatever seems more
appropriate. In the first case the new value is set in
@@ -383,7 +383,7 @@ These controls are described in <xref linkend="rf-tuner-controls" />.</entry>
<listitem>
<para>The &v4l2-ext-control; <structfield>id</structfield>
is invalid, the &v4l2-ext-controls;
-<structfield>ctrl_class</structfield> is invalid, or the &v4l2-ext-control;
+<structfield>which</structfield> is invalid, or the &v4l2-ext-control;
<structfield>value</structfield> was inappropriate (e.g. the given menu
index is not supported by the driver). This error code is
also returned by the <constant>VIDIOC_S_EXT_CTRLS</constant> and
diff --git a/drivers/media/pci/saa7164/saa7164-encoder.c b/drivers/media/pci/saa7164/saa7164-encoder.c
index 4434e0f28c26..e0ec64ed06fc 100644
--- a/drivers/media/pci/saa7164/saa7164-encoder.c
+++ b/drivers/media/pci/saa7164/saa7164-encoder.c
@@ -538,7 +538,7 @@ static int vidioc_g_ext_ctrls(struct file *file, void *priv,
struct saa7164_port *port = fh->port;
int i, err = 0;
- if (ctrls->ctrl_class == V4L2_CTRL_CLASS_MPEG) {
+ if (ctrls->which == V4L2_CTRL_CLASS_MPEG) {
for (i = 0; i < ctrls->count; i++) {
struct v4l2_ext_control *ctrl = ctrls->controls + i;
@@ -612,7 +612,7 @@ static int vidioc_try_ext_ctrls(struct file *file, void *priv,
{
int i, err = 0;
- if (ctrls->ctrl_class == V4L2_CTRL_CLASS_MPEG) {
+ if (ctrls->which == V4L2_CTRL_CLASS_MPEG) {
for (i = 0; i < ctrls->count; i++) {
struct v4l2_ext_control *ctrl = ctrls->controls + i;
@@ -687,7 +687,7 @@ static int vidioc_s_ext_ctrls(struct file *file, void *priv,
struct saa7164_port *port = fh->port;
int i, err = 0;
- if (ctrls->ctrl_class == V4L2_CTRL_CLASS_MPEG) {
+ if (ctrls->which == V4L2_CTRL_CLASS_MPEG) {
for (i = 0; i < ctrls->count; i++) {
struct v4l2_ext_control *ctrl = ctrls->controls + i;
diff --git a/drivers/media/pci/saa7164/saa7164-vbi.c b/drivers/media/pci/saa7164/saa7164-vbi.c
index 859fd03d82f9..08f23b6d9cef 100644
--- a/drivers/media/pci/saa7164/saa7164-vbi.c
+++ b/drivers/media/pci/saa7164/saa7164-vbi.c
@@ -501,7 +501,7 @@ static int vidioc_g_ext_ctrls(struct file *file, void *priv,
struct saa7164_port *port = fh->port;
int i, err = 0;
- if (ctrls->ctrl_class == V4L2_CTRL_CLASS_MPEG) {
+ if (ctrls->which == V4L2_CTRL_CLASS_MPEG) {
for (i = 0; i < ctrls->count; i++) {
struct v4l2_ext_control *ctrl = ctrls->controls + i;
@@ -560,7 +560,7 @@ static int vidioc_try_ext_ctrls(struct file *file, void *priv,
{
int i, err = 0;
- if (ctrls->ctrl_class == V4L2_CTRL_CLASS_MPEG) {
+ if (ctrls->which == V4L2_CTRL_CLASS_MPEG) {
for (i = 0; i < ctrls->count; i++) {
struct v4l2_ext_control *ctrl = ctrls->controls + i;
@@ -626,7 +626,7 @@ static int vidioc_s_ext_ctrls(struct file *file, void *priv,
struct saa7164_port *port = fh->port;
int i, err = 0;
- if (ctrls->ctrl_class == V4L2_CTRL_CLASS_MPEG) {
+ if (ctrls->which == V4L2_CTRL_CLASS_MPEG) {
for (i = 0; i < ctrls->count; i++) {
struct v4l2_ext_control *ctrl = ctrls->controls + i;
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
index aebe4fd7f03a..fa18f5035bc3 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c
@@ -1113,7 +1113,7 @@ const struct v4l2_ioctl_ops *get_dec_v4l2_ioctl_ops(void)
return &s5p_mfc_dec_ioctl_ops;
}
-#define IS_MFC51_PRIV(x) ((V4L2_CTRL_ID2CLASS(x) == V4L2_CTRL_CLASS_MPEG) \
+#define IS_MFC51_PRIV(x) ((V4L2_CTRL_ID2WHICH(x) == V4L2_CTRL_CLASS_MPEG) \
&& V4L2_CTRL_DRIVER_PRIV(x))
int s5p_mfc_dec_ctrls_setup(struct s5p_mfc_ctx *ctx)
diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
index 2e57e9f45b85..c1e561bd2dd8 100644
--- a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
+++ b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c
@@ -2060,7 +2060,7 @@ const struct v4l2_ioctl_ops *get_enc_v4l2_ioctl_ops(void)
return &s5p_mfc_enc_ioctl_ops;
}
-#define IS_MFC51_PRIV(x) ((V4L2_CTRL_ID2CLASS(x) == V4L2_CTRL_CLASS_MPEG) \
+#define IS_MFC51_PRIV(x) ((V4L2_CTRL_ID2WHICH(x) == V4L2_CTRL_CLASS_MPEG) \
&& V4L2_CTRL_DRIVER_PRIV(x))
int s5p_mfc_enc_ctrls_setup(struct s5p_mfc_ctx *ctx)
diff --git a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
index 5416806609a8..e3c1c214e893 100644
--- a/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
+++ b/drivers/media/v4l2-core/v4l2-compat-ioctl32.c
@@ -609,7 +609,7 @@ static inline int put_v4l2_input32(struct v4l2_input *kp, struct v4l2_input32 __
}
struct v4l2_ext_controls32 {
- __u32 ctrl_class;
+ __u32 which;
__u32 count;
__u32 error_idx;
__u32 reserved[2];
@@ -652,7 +652,7 @@ static int get_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
compat_caddr_t p;
if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_ext_controls32)) ||
- get_user(kp->ctrl_class, &up->ctrl_class) ||
+ get_user(kp->which, &up->which) ||
get_user(kp->count, &up->count) ||
get_user(kp->error_idx, &up->error_idx) ||
copy_from_user(kp->reserved, up->reserved,
@@ -702,7 +702,7 @@ static int put_v4l2_ext_controls32(struct v4l2_ext_controls *kp, struct v4l2_ext
compat_caddr_t p;
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_ext_controls32)) ||
- put_user(kp->ctrl_class, &up->ctrl_class) ||
+ put_user(kp->which, &up->which) ||
put_user(kp->count, &up->count) ||
put_user(kp->error_idx, &up->error_idx) ||
copy_to_user(up->reserved, kp->reserved, sizeof(up->reserved)))
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index b6b7dcc1b77d..580098ba5c0b 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -1760,7 +1760,7 @@ static struct v4l2_ctrl_ref *find_private_ref(
list_for_each_entry(ref, &hdl->ctrl_refs, node) {
/* Search for private user controls that are compatible with
VIDIOC_G/S_CTRL. */
- if (V4L2_CTRL_ID2CLASS(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
+ if (V4L2_CTRL_ID2WHICH(ref->ctrl->id) == V4L2_CTRL_CLASS_USER &&
V4L2_CTRL_DRIVER_PRIV(ref->ctrl->id)) {
if (!ref->ctrl->is_int)
continue;
@@ -1829,7 +1829,7 @@ static int handler_new_ref(struct v4l2_ctrl_handler *hdl,
struct v4l2_ctrl_ref *ref;
struct v4l2_ctrl_ref *new_ref;
u32 id = ctrl->id;
- u32 class_ctrl = V4L2_CTRL_ID2CLASS(id) | 1;
+ u32 class_ctrl = V4L2_CTRL_ID2WHICH(id) | 1;
int bucket = id % hdl->nr_of_buckets; /* which bucket to use */
/*
@@ -2251,9 +2251,9 @@ EXPORT_SYMBOL(v4l2_ctrl_add_handler);
bool v4l2_ctrl_radio_filter(const struct v4l2_ctrl *ctrl)
{
- if (V4L2_CTRL_ID2CLASS(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
+ if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_TX)
return true;
- if (V4L2_CTRL_ID2CLASS(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
+ if (V4L2_CTRL_ID2WHICH(ctrl->id) == V4L2_CTRL_CLASS_FM_RX)
return true;
switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE:
@@ -2708,7 +2708,7 @@ static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
cs->error_idx = i;
- if (cs->ctrl_class && V4L2_CTRL_ID2CLASS(id) != cs->ctrl_class)
+ if (cs->which && V4L2_CTRL_ID2WHICH(id) != cs->which)
return -EINVAL;
/* Old-style private controls are not allowed for
@@ -2785,11 +2785,11 @@ static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
/* Handles the corner case where cs->count == 0. It checks whether the
specified control class exists. If that class ID is 0, then it checks
whether there are any controls at all. */
-static int class_check(struct v4l2_ctrl_handler *hdl, u32 ctrl_class)
+static int class_check(struct v4l2_ctrl_handler *hdl, u32 which)
{
- if (ctrl_class == 0)
+ if (!which)
return list_empty(&hdl->ctrl_refs) ? -EINVAL : 0;
- return find_ref_lock(hdl, ctrl_class | 1) ? 0 : -EINVAL;
+ return find_ref_lock(hdl, which | 1) ? 0 : -EINVAL;
}
@@ -2803,13 +2803,13 @@ int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs
int i, j;
cs->error_idx = cs->count;
- cs->ctrl_class = V4L2_CTRL_ID2CLASS(cs->ctrl_class);
+ cs->which = V4L2_CTRL_ID2WHICH(cs->which);
if (hdl == NULL)
return -EINVAL;
if (cs->count == 0)
- return class_check(hdl, cs->ctrl_class);
+ return class_check(hdl, cs->which);
if (cs->count > ARRAY_SIZE(helper)) {
helpers = kmalloc_array(cs->count, sizeof(helper[0]),
@@ -3062,13 +3062,13 @@ static int try_set_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
int ret;
cs->error_idx = cs->count;
- cs->ctrl_class = V4L2_CTRL_ID2CLASS(cs->ctrl_class);
+ cs->which = V4L2_CTRL_ID2WHICH(cs->which);
if (hdl == NULL)
return -EINVAL;
if (cs->count == 0)
- return class_check(hdl, cs->ctrl_class);
+ return class_check(hdl, cs->which);
if (cs->count > ARRAY_SIZE(helper)) {
helpers = kmalloc_array(cs->count, sizeof(helper[0]),
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 4a384fc765b8..177f988ba7db 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -563,8 +563,8 @@ static void v4l_print_ext_controls(const void *arg, bool write_only)
const struct v4l2_ext_controls *p = arg;
int i;
- pr_cont("class=0x%x, count=%d, error_idx=%d",
- p->ctrl_class, p->count, p->error_idx);
+ pr_cont("which=0x%x, count=%d, error_idx=%d",
+ p->which, p->count, p->error_idx);
for (i = 0; i < p->count; i++) {
if (!p->controls[i].size)
pr_cont(", id/val=0x%x/0x%x",
@@ -900,13 +900,13 @@ static int check_ext_ctrls(struct v4l2_ext_controls *c, int allow_priv)
Only when passed in through VIDIOC_G_CTRL and VIDIOC_S_CTRL
is it allowed for backwards compatibility.
*/
- if (!allow_priv && c->ctrl_class == V4L2_CID_PRIVATE_BASE)
+ if (!allow_priv && c->which == V4L2_CID_PRIVATE_BASE)
return 0;
- if (c->ctrl_class == 0)
+ if (!c->which)
return 1;
/* Check that all controls are from the same control class. */
for (i = 0; i < c->count; i++) {
- if (V4L2_CTRL_ID2CLASS(c->controls[i].id) != c->ctrl_class) {
+ if (V4L2_CTRL_ID2WHICH(c->controls[i].id) != c->which) {
c->error_idx = i;
return 0;
}
@@ -1928,7 +1928,7 @@ static int v4l_g_ctrl(const struct v4l2_ioctl_ops *ops,
if (ops->vidioc_g_ext_ctrls == NULL)
return -ENOTTY;
- ctrls.ctrl_class = V4L2_CTRL_ID2CLASS(p->id);
+ ctrls.which = V4L2_CTRL_ID2WHICH(p->id);
ctrls.count = 1;
ctrls.controls = &ctrl;
ctrl.id = p->id;
@@ -1962,7 +1962,7 @@ static int v4l_s_ctrl(const struct v4l2_ioctl_ops *ops,
if (ops->vidioc_s_ext_ctrls == NULL)
return -ENOTTY;
- ctrls.ctrl_class = V4L2_CTRL_ID2CLASS(p->id);
+ ctrls.which = V4L2_CTRL_ID2WHICH(p->id);
ctrls.count = 1;
ctrls.controls = &ctrl;
ctrl.id = p->id;
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 2e857b19a155..bfcaa3fc04c2 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -1462,7 +1462,9 @@ struct v4l2_ext_control {
struct v4l2_ext_controls {
union {
+#ifndef __KERNEL__
__u32 ctrl_class;
+#endif
__u32 which;
};
__u32 count;
@@ -1472,7 +1474,10 @@ struct v4l2_ext_controls {
};
#define V4L2_CTRL_ID_MASK (0x0fffffff)
+#ifndef __KERNEL__
#define V4L2_CTRL_ID2CLASS(id) ((id) & 0x0fff0000UL)
+#endif
+#define V4L2_CTRL_ID2WHICH(id) ((id) & 0x0fff0000UL)
#define V4L2_CTRL_DRIVER_PRIV(id) (((id) & 0xffff) >= 0x1000)
#define V4L2_CTRL_MAX_DIMS (4)
#define V4L2_CTRL_WHICH_CUR_VAL 0
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 05/10] media/v4l2-core: struct struct v4l2_ext_controls param which
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
` (3 preceding siblings ...)
2015-08-21 13:19 ` [PATCH v2 04/10] media/core: Replace ctrl_class with which Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 06/10] usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL Ricardo Ribalda Delgado
` (5 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
Support for new field which on v4l2_ext_controls, used to get the
default value of one or more controls.
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
drivers/media/v4l2-core/v4l2-ctrls.c | 34 +++++++++++++++++++++++++++++-----
1 file changed, 29 insertions(+), 5 deletions(-)
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 580098ba5c0b..8f1a5d3cbf7f 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -1489,6 +1489,17 @@ static int new_to_user(struct v4l2_ext_control *c,
return ptr_to_user(c, ctrl, ctrl->p_new);
}
+/* Helper function: copy the initial control value back to the caller */
+static int def_to_user(struct v4l2_ext_control *c, struct v4l2_ctrl *ctrl)
+{
+ int idx;
+
+ for (idx = 0; idx < ctrl->elems; idx++)
+ ctrl->type_ops->init(ctrl, idx, ctrl->p_new);
+
+ return ptr_to_user(c, ctrl, ctrl->p_new);
+}
+
/* Helper function: copy the caller-provider value to the given control value */
static int user_to_ptr(struct v4l2_ext_control *c,
struct v4l2_ctrl *ctrl,
@@ -2708,7 +2719,9 @@ static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
cs->error_idx = i;
- if (cs->which && V4L2_CTRL_ID2WHICH(id) != cs->which)
+ if (cs->which &&
+ cs->which != V4L2_CTRL_WHICH_DEF_VAL &&
+ V4L2_CTRL_ID2WHICH(id) != cs->which)
return -EINVAL;
/* Old-style private controls are not allowed for
@@ -2787,7 +2800,7 @@ static int prepare_ext_ctrls(struct v4l2_ctrl_handler *hdl,
whether there are any controls at all. */
static int class_check(struct v4l2_ctrl_handler *hdl, u32 which)
{
- if (!which)
+ if (which == 0 || which == V4L2_CTRL_WHICH_DEF_VAL)
return list_empty(&hdl->ctrl_refs) ? -EINVAL : 0;
return find_ref_lock(hdl, which | 1) ? 0 : -EINVAL;
}
@@ -2801,6 +2814,9 @@ int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs
struct v4l2_ctrl_helper *helpers = helper;
int ret;
int i, j;
+ bool def_value;
+
+ def_value = (cs->which == V4L2_CTRL_WHICH_DEF_VAL)
cs->error_idx = cs->count;
cs->which = V4L2_CTRL_ID2WHICH(cs->which);
@@ -2827,9 +2843,11 @@ int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs
for (i = 0; !ret && i < cs->count; i++) {
int (*ctrl_to_user)(struct v4l2_ext_control *c,
- struct v4l2_ctrl *ctrl) = cur_to_user;
+ struct v4l2_ctrl *ctrl);
struct v4l2_ctrl *master;
+ ctrl_to_user = def_value ? def_to_user : cur_to_user;
+
if (helpers[i].mref == NULL)
continue;
@@ -2839,8 +2857,9 @@ int v4l2_g_ext_ctrls(struct v4l2_ctrl_handler *hdl, struct v4l2_ext_controls *cs
v4l2_ctrl_lock(master);
/* g_volatile_ctrl will update the new control values */
- if ((master->flags & V4L2_CTRL_FLAG_VOLATILE) ||
- (master->has_volatiles && !is_cur_manual(master))) {
+ if (!def_value &&
+ ((master->flags & V4L2_CTRL_FLAG_VOLATILE) ||
+ (master->has_volatiles && !is_cur_manual(master)))) {
for (j = 0; j < master->ncontrols; j++)
cur_to_new(master->cluster[j]);
ret = call_op(master, g_volatile_ctrl);
@@ -3062,6 +3081,11 @@ static int try_set_ext_ctrls(struct v4l2_fh *fh, struct v4l2_ctrl_handler *hdl,
int ret;
cs->error_idx = cs->count;
+
+ /* Default value cannot be changed */
+ if (cs->which == V4L2_CTRL_WHICH_DEF_VAL)
+ return -EINVAL;
+
cs->which = V4L2_CTRL_ID2WHICH(cs->which);
if (hdl == NULL)
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 06/10] usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
` (4 preceding siblings ...)
2015-08-21 13:19 ` [PATCH v2 05/10] media/v4l2-core: struct struct v4l2_ext_controls param which Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-09-04 10:56 ` Hans Verkuil
2015-10-29 0:08 ` Laurent Pinchart
2015-08-21 13:19 ` [PATCH v2 07/10] media/usb/pvrusb2: " Ricardo Ribalda Delgado
` (4 subsequent siblings)
10 siblings, 2 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
This driver does not use the control infrastructure.
Add support for the new field which on structure
v4l2_ext_controls
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
drivers/media/usb/uvc/uvc_v4l2.c | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
index 2764f43607c1..e6d3a1bcfa2f 100644
--- a/drivers/media/usb/uvc/uvc_v4l2.c
+++ b/drivers/media/usb/uvc/uvc_v4l2.c
@@ -980,6 +980,7 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file, void *fh,
struct uvc_fh *handle = fh;
struct uvc_video_chain *chain = handle->chain;
struct v4l2_ext_control *ctrl = ctrls->controls;
+ struct v4l2_queryctrl qc;
unsigned int i;
int ret;
@@ -988,7 +989,14 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file, void *fh,
return ret;
for (i = 0; i < ctrls->count; ++ctrl, ++i) {
- ret = uvc_ctrl_get(chain, ctrl);
+ if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL) {
+ qc.id = ctrl->id;
+ ret = uvc_query_v4l2_ctrl(chain, &qc);
+ if (!ret)
+ ctrl->value = qc.default_value;
+ } else
+ ret = uvc_ctrl_get(chain, ctrl);
+
if (ret < 0) {
uvc_ctrl_rollback(handle);
ctrls->error_idx = i;
@@ -1010,6 +1018,10 @@ static int uvc_ioctl_s_try_ext_ctrls(struct uvc_fh *handle,
unsigned int i;
int ret;
+ /* Default value cannot be changed */
+ if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL)
+ return -EINVAL;
+
ret = uvc_ctrl_begin(chain);
if (ret < 0)
return ret;
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 07/10] media/usb/pvrusb2: Support for V4L2_CTRL_WHICH_DEF_VAL
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
` (5 preceding siblings ...)
2015-08-21 13:19 ` [PATCH v2 06/10] usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-08-22 1:55 ` Mike Isely
2015-08-21 13:19 ` [PATCH v2 08/10] media/pci/saa7164-encoder " Ricardo Ribalda Delgado
` (3 subsequent siblings)
10 siblings, 1 reply; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
This driver does not use the control infrastructure.
Add support for the new field which on structure
v4l2_ext_controls
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
drivers/media/usb/pvrusb2/pvrusb2-v4l2.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
index 1c5f85bf7ed4..43b2f2214798 100644
--- a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
+++ b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
@@ -628,6 +628,7 @@ static int pvr2_g_ext_ctrls(struct file *file, void *priv,
struct pvr2_v4l2_fh *fh = file->private_data;
struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
struct v4l2_ext_control *ctrl;
+ struct pvr2_ctrl *cptr;
unsigned int idx;
int val;
int ret;
@@ -635,8 +636,18 @@ static int pvr2_g_ext_ctrls(struct file *file, void *priv,
ret = 0;
for (idx = 0; idx < ctls->count; idx++) {
ctrl = ctls->controls + idx;
- ret = pvr2_ctrl_get_value(
+ if (ctls->which == V4L2_CTRL_WHICH_DEF_VAL) {
+ cptr = pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id);
+ if (cptr)
+ pvr2_ctrl_get_def(cptr, &val);
+ else
+ ret = -EINVAL;
+
+
+ } else
+ ret = pvr2_ctrl_get_value(
pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id), &val);
+
if (ret) {
ctls->error_idx = idx;
return ret;
@@ -658,6 +669,10 @@ static int pvr2_s_ext_ctrls(struct file *file, void *priv,
unsigned int idx;
int ret;
+ /* Default value cannot be changed */
+ if (ctls->which == V4L2_CTRL_WHICH_DEF_VAL)
+ return -EINVAL;
+
ret = 0;
for (idx = 0; idx < ctls->count; idx++) {
ctrl = ctls->controls + idx;
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 08/10] media/pci/saa7164-encoder Support for V4L2_CTRL_WHICH_DEF_VAL
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
` (6 preceding siblings ...)
2015-08-21 13:19 ` [PATCH v2 07/10] media/usb/pvrusb2: " Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 09/10] media/pci/saa7164-vbi " Ricardo Ribalda Delgado
` (2 subsequent siblings)
10 siblings, 0 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
This driver does not use the control infrastructure.
Add support for the new field which on structure
v4l2_ext_controls
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
drivers/media/pci/saa7164/saa7164-encoder.c | 55 ++++++++++++++++-------------
1 file changed, 31 insertions(+), 24 deletions(-)
diff --git a/drivers/media/pci/saa7164/saa7164-encoder.c b/drivers/media/pci/saa7164/saa7164-encoder.c
index e0ec64ed06fc..4a5c1ee3fb34 100644
--- a/drivers/media/pci/saa7164/saa7164-encoder.c
+++ b/drivers/media/pci/saa7164/saa7164-encoder.c
@@ -531,30 +531,6 @@ static int saa7164_get_ctrl(struct saa7164_port *port,
return 0;
}
-static int vidioc_g_ext_ctrls(struct file *file, void *priv,
- struct v4l2_ext_controls *ctrls)
-{
- struct saa7164_encoder_fh *fh = file->private_data;
- struct saa7164_port *port = fh->port;
- int i, err = 0;
-
- if (ctrls->which == V4L2_CTRL_CLASS_MPEG) {
- for (i = 0; i < ctrls->count; i++) {
- struct v4l2_ext_control *ctrl = ctrls->controls + i;
-
- err = saa7164_get_ctrl(port, ctrl);
- if (err) {
- ctrls->error_idx = i;
- break;
- }
- }
- return err;
-
- }
-
- return -EINVAL;
-}
-
static int saa7164_try_ctrl(struct v4l2_ext_control *ctrl, int ac3)
{
int ret = -EINVAL;
@@ -884,6 +860,37 @@ static int vidioc_queryctrl(struct file *file, void *priv,
return -EINVAL;
}
+static int vidioc_g_ext_ctrls(struct file *file, void *priv,
+ struct v4l2_ext_controls *ctrls)
+{
+ struct saa7164_encoder_fh *fh = file->private_data;
+ struct saa7164_port *port = fh->port;
+ int i, err = 0;
+
+ if (ctrls->which != V4L2_CTRL_CLASS_MPEG &&
+ ctrls->which != V4L2_CTRL_WHICH_DEF_VAL)
+ return -EINVAL;
+
+ for (i = 0; i < ctrls->count; i++) {
+ struct v4l2_ext_control *ctrl = ctrls->controls + i;
+
+ if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL) {
+ struct v4l2_queryctrl q;
+
+ err = fill_queryctrl(&port->encoder_params, &q);
+ if (!err)
+ ctrl->value = q.default_value;
+ } else
+ err = saa7164_get_ctrl(port, ctrl);
+
+ if (err) {
+ ctrls->error_idx = i;
+ break;
+ }
+ }
+ return err;
+}
+
static int saa7164_encoder_stop_port(struct saa7164_port *port)
{
struct saa7164_dev *dev = port->dev;
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 09/10] media/pci/saa7164-vbi Support for V4L2_CTRL_WHICH_DEF_VAL
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
` (7 preceding siblings ...)
2015-08-21 13:19 ` [PATCH v2 08/10] media/pci/saa7164-encoder " Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 10/10] Docbook: media: Document changes on struct v4l2_ext_controls Ricardo Ribalda Delgado
2015-09-04 11:01 ` [PATCH v2 00/10] Support getting default values from any control Hans Verkuil
10 siblings, 0 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
This driver does not use the control infrastructure.
Add support for the new field which on structure
v4l2_ext_controls
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
drivers/media/pci/saa7164/saa7164-vbi.c | 57 +++++++++++++++++++--------------
1 file changed, 33 insertions(+), 24 deletions(-)
diff --git a/drivers/media/pci/saa7164/saa7164-vbi.c b/drivers/media/pci/saa7164/saa7164-vbi.c
index 08f23b6d9cef..4c2d8ec5b4dd 100644
--- a/drivers/media/pci/saa7164/saa7164-vbi.c
+++ b/drivers/media/pci/saa7164/saa7164-vbi.c
@@ -494,30 +494,6 @@ static int saa7164_get_ctrl(struct saa7164_port *port,
return 0;
}
-static int vidioc_g_ext_ctrls(struct file *file, void *priv,
- struct v4l2_ext_controls *ctrls)
-{
- struct saa7164_vbi_fh *fh = file->private_data;
- struct saa7164_port *port = fh->port;
- int i, err = 0;
-
- if (ctrls->which == V4L2_CTRL_CLASS_MPEG) {
- for (i = 0; i < ctrls->count; i++) {
- struct v4l2_ext_control *ctrl = ctrls->controls + i;
-
- err = saa7164_get_ctrl(port, ctrl);
- if (err) {
- ctrls->error_idx = i;
- break;
- }
- }
- return err;
-
- }
-
- return -EINVAL;
-}
-
static int saa7164_try_ctrl(struct v4l2_ext_control *ctrl, int ac3)
{
int ret = -EINVAL;
@@ -810,6 +786,39 @@ static int vidioc_queryctrl(struct file *file, void *priv,
return -EINVAL;
}
+static int vidioc_g_ext_ctrls(struct file *file, void *priv,
+ struct v4l2_ext_controls *ctrls)
+{
+ struct saa7164_vbi_fh *fh = file->private_data;
+ struct saa7164_port *port = fh->port;
+ int i, err = 0;
+
+ if (ctrls->which != V4L2_CTRL_CLASS_MPEG &&
+ ctrls->which != V4L2_CTRL_WHICH_DEF_VAL)
+ return -EINVAL;
+
+ for (i = 0; i < ctrls->count; i++) {
+ struct v4l2_ext_control *ctrl = ctrls->controls + i;
+
+ if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL) {
+ struct v4l2_queryctrl q;
+
+ err = fill_queryctrl(&port->vbi_params, &q);
+ if (!err)
+ ctrl->value = q.default_value;
+ } else
+ err = saa7164_get_ctrl(port, ctrl);
+
+ if (err) {
+ ctrls->error_idx = i;
+ break;
+ }
+ }
+
+ return err;
+}
+
+
static int saa7164_vbi_stop_port(struct saa7164_port *port)
{
struct saa7164_dev *dev = port->dev;
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* [PATCH v2 10/10] Docbook: media: Document changes on struct v4l2_ext_controls
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
` (8 preceding siblings ...)
2015-08-21 13:19 ` [PATCH v2 09/10] media/pci/saa7164-vbi " Ricardo Ribalda Delgado
@ 2015-08-21 13:19 ` Ricardo Ribalda Delgado
2015-09-04 11:01 ` [PATCH v2 00/10] Support getting default values from any control Hans Verkuil
10 siblings, 0 replies; 15+ messages in thread
From: Ricardo Ribalda Delgado @ 2015-08-21 13:19 UTC (permalink / raw)
To: Mauro Carvalho Chehab, Mike Isely, Laurent Pinchart,
Hans Verkuil, Steven Toth, Sakari Ailus, Vincent Palatin,
linux-media, linux-kernel
Cc: Ricardo Ribalda Delgado
Vidioc-g-ext-ctrls can now be used to get the default value of the
controls.
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
---
Documentation/DocBook/media/v4l/v4l2.xml | 9 +++++++++
.../DocBook/media/v4l/vidioc-g-ext-ctrls.xml | 22 ++++++++++++++++++++++
2 files changed, 31 insertions(+)
diff --git a/Documentation/DocBook/media/v4l/v4l2.xml b/Documentation/DocBook/media/v4l/v4l2.xml
index e98caa1c39bd..be52bd2fb335 100644
--- a/Documentation/DocBook/media/v4l/v4l2.xml
+++ b/Documentation/DocBook/media/v4l/v4l2.xml
@@ -153,6 +153,15 @@ structs, ioctls) must be noted in more detail in the history chapter
applications. -->
<revision>
+ <revnumber>4.4</revnumber>
+ <date>2015-08-20</date>
+ <authorinitials>rr</authorinitials>
+ <revremark>Extend vidioc-g-ext-ctrls;. Replace ctrl_class with a new
+union with ctrl_class and which. Which is used to select the current value of
+the control or the default value.
+ </revremark>
+ </revision>
+ <revision>
<revnumber>3.21</revnumber>
<date>2015-02-13</date>
<authorinitials>mcc</authorinitials>
diff --git a/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml b/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml
index 8f4eb395665d..3b7bf68a8250 100644
--- a/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml
+++ b/Documentation/DocBook/media/v4l/vidioc-g-ext-ctrls.xml
@@ -216,7 +216,12 @@ Valid if <constant>V4L2_CTRL_FLAG_HAS_PAYLOAD</constant> is set for this control
<tgroup cols="3">
&cs-str;
<tbody valign="top">
+ <row>
+ <entry>union</entry>
+ <entry>(anonymous)</entry>
+ </row>
<row>
+ <entry></entry>
<entry>__u32</entry>
<entry><structfield>ctrl_class</structfield></entry>
<entry>The control class to which all controls belong, see
@@ -228,6 +233,23 @@ with a <structfield>count</structfield> of 0. If that succeeds, then the driver
supports this feature.</entry>
</row>
<row>
+ <entry></entry>
+ <entry>__u32</entry>
+ <entry><structfield>which</structfield></entry>
+ <entry><para>Which value of the control to get/set/try. <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>
+will return the current value of the control and <constant>V4L2_CTRL_WHICH_DEF_VAL</constant> will
+return the default value of the control. Please note that you can only get the default value of the
+control, you cannot set or try it.</para>
+<para>For backwards compatibility you can also use a control class here (see
+<xref linkend="ctrl-class" />). In that case all controls have to belong to that
+control class. This usage is deprecated, instead just use <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>.
+There are some very old drivers that do not yet support <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>
+and that require a control class here. You can test for such drivers by setting ctrl_class to
+<constant>V4L2_CTRL_WHICH_CUR_VAL</constant> and calling VIDIOC_TRY_EXT_CTRLS with a count of 0.
+If that fails, then the driver does not support <constant>V4L2_CTRL_WHICH_CUR_VAL</constant>.</para>
+</entry>
+ </row>
+ <row>
<entry>__u32</entry>
<entry><structfield>count</structfield></entry>
<entry>The number of controls in the controls array. May
--
2.5.0
^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: [PATCH v2 07/10] media/usb/pvrusb2: Support for V4L2_CTRL_WHICH_DEF_VAL
2015-08-21 13:19 ` [PATCH v2 07/10] media/usb/pvrusb2: " Ricardo Ribalda Delgado
@ 2015-08-22 1:55 ` Mike Isely
0 siblings, 0 replies; 15+ messages in thread
From: Mike Isely @ 2015-08-22 1:55 UTC (permalink / raw)
To: Ricardo Ribalda Delgado
Cc: Mauro Carvalho Chehab, Laurent Pinchart, Hans Verkuil,
Steven Toth, Sakari Ailus, Vincent Palatin, linux-media,
Linux Kernel Mailing List, Mike Isely at pobox
The code you've added is carefully checking the return pointer from
pvr2_hdw_get_ctrl_v4l() yet the original code did not operate this way.
The result is that now there's this "unbalanced" effect where it appears
that the validity of the pvr2_ctrl instance is only checked on one side
of the if-statement. I would recommend instead to elevate the call to
pvr2_hdw_get_ctrl_v4l() out of the if-statement - since in both cases
it's being called the same way both times. Then do the validity check
in that one spot and that simplifies the if-statement all the way down
to choosing between pvr2_ctrl_get_value() vs pvr2_ctrl_get_def().
It's not a correctness comment; what you have should work fine. So I'm
ack'ing this in any case:
Acked-By: Mike Isely <isely@pobox.com>
But you can do the above pretty easily & safely, and simplify it a bit
further.
-Mike
On Fri, 21 Aug 2015, Ricardo Ribalda Delgado wrote:
> This driver does not use the control infrastructure.
> Add support for the new field which on structure
> v4l2_ext_controls
>
> Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
> ---
> drivers/media/usb/pvrusb2/pvrusb2-v4l2.c | 17 ++++++++++++++++-
> 1 file changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
> index 1c5f85bf7ed4..43b2f2214798 100644
> --- a/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
> +++ b/drivers/media/usb/pvrusb2/pvrusb2-v4l2.c
> @@ -628,6 +628,7 @@ static int pvr2_g_ext_ctrls(struct file *file, void *priv,
> struct pvr2_v4l2_fh *fh = file->private_data;
> struct pvr2_hdw *hdw = fh->channel.mc_head->hdw;
> struct v4l2_ext_control *ctrl;
> + struct pvr2_ctrl *cptr;
> unsigned int idx;
> int val;
> int ret;
> @@ -635,8 +636,18 @@ static int pvr2_g_ext_ctrls(struct file *file, void *priv,
> ret = 0;
> for (idx = 0; idx < ctls->count; idx++) {
> ctrl = ctls->controls + idx;
> - ret = pvr2_ctrl_get_value(
> + if (ctls->which == V4L2_CTRL_WHICH_DEF_VAL) {
> + cptr = pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id);
> + if (cptr)
> + pvr2_ctrl_get_def(cptr, &val);
> + else
> + ret = -EINVAL;
> +
> +
> + } else
> + ret = pvr2_ctrl_get_value(
> pvr2_hdw_get_ctrl_v4l(hdw, ctrl->id), &val);
> +
> if (ret) {
> ctls->error_idx = idx;
> return ret;
> @@ -658,6 +669,10 @@ static int pvr2_s_ext_ctrls(struct file *file, void *priv,
> unsigned int idx;
> int ret;
>
> + /* Default value cannot be changed */
> + if (ctls->which == V4L2_CTRL_WHICH_DEF_VAL)
> + return -EINVAL;
> +
> ret = 0;
> for (idx = 0; idx < ctls->count; idx++) {
> ctrl = ctls->controls + idx;
>
--
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] 15+ messages in thread
* Re: [PATCH v2 06/10] usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL
2015-08-21 13:19 ` [PATCH v2 06/10] usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL Ricardo Ribalda Delgado
@ 2015-09-04 10:56 ` Hans Verkuil
2015-10-29 0:08 ` Laurent Pinchart
1 sibling, 0 replies; 15+ messages in thread
From: Hans Verkuil @ 2015-09-04 10:56 UTC (permalink / raw)
To: Ricardo Ribalda Delgado, Mauro Carvalho Chehab, Mike Isely,
Laurent Pinchart, Hans Verkuil, Steven Toth, Sakari Ailus,
Vincent Palatin, linux-media, linux-kernel
Laurent, can you review this?
Regards,
Hans
On 08/21/2015 03:19 PM, Ricardo Ribalda Delgado wrote:
> This driver does not use the control infrastructure.
> Add support for the new field which on structure
> v4l2_ext_controls
>
> Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
> ---
> drivers/media/usb/uvc/uvc_v4l2.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c b/drivers/media/usb/uvc/uvc_v4l2.c
> index 2764f43607c1..e6d3a1bcfa2f 100644
> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> @@ -980,6 +980,7 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file, void *fh,
> struct uvc_fh *handle = fh;
> struct uvc_video_chain *chain = handle->chain;
> struct v4l2_ext_control *ctrl = ctrls->controls;
> + struct v4l2_queryctrl qc;
> unsigned int i;
> int ret;
>
> @@ -988,7 +989,14 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file, void *fh,
> return ret;
>
> for (i = 0; i < ctrls->count; ++ctrl, ++i) {
> - ret = uvc_ctrl_get(chain, ctrl);
> + if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL) {
> + qc.id = ctrl->id;
> + ret = uvc_query_v4l2_ctrl(chain, &qc);
> + if (!ret)
> + ctrl->value = qc.default_value;
> + } else
> + ret = uvc_ctrl_get(chain, ctrl);
> +
> if (ret < 0) {
> uvc_ctrl_rollback(handle);
> ctrls->error_idx = i;
> @@ -1010,6 +1018,10 @@ static int uvc_ioctl_s_try_ext_ctrls(struct uvc_fh *handle,
> unsigned int i;
> int ret;
>
> + /* Default value cannot be changed */
> + if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL)
> + return -EINVAL;
> +
> ret = uvc_ctrl_begin(chain);
> if (ret < 0)
> return ret;
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 00/10] Support getting default values from any control
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
` (9 preceding siblings ...)
2015-08-21 13:19 ` [PATCH v2 10/10] Docbook: media: Document changes on struct v4l2_ext_controls Ricardo Ribalda Delgado
@ 2015-09-04 11:01 ` Hans Verkuil
10 siblings, 0 replies; 15+ messages in thread
From: Hans Verkuil @ 2015-09-04 11:01 UTC (permalink / raw)
To: Ricardo Ribalda Delgado, Mauro Carvalho Chehab, Mike Isely,
Laurent Pinchart, Hans Verkuil, Steven Toth, Sakari Ailus,
Vincent Palatin, linux-media, linux-kernel
This patch series looks good. I'll drop the saa7164 patches since I made a
patch series converting it to the control framework. Once Steve gives me the
Ack for that I can merge that series.
All I need to merge your series (minus the saa7164 patches) is the Ack from
Laurent for the uvc patch.
Regards,
Hans
On 08/21/2015 03:19 PM, Ricardo Ribalda Delgado wrote:
> Integer controls provide a way to get their default/initial value, but
> any other control (p_u32, p_u8.....) provide no other way to get the
> initial value than unloading the module and loading it back.
>
> *What is the actual problem?
> I have a custom control with WIDTH integer values. Every value
> represents the calibrated FPN (fixed pattern noise) correction value for that
> column
> -Application A changes the FPN correction value
> -Application B wants to restore the calibrated value but it cant :(
>
> *What is the proposed solution?
>
> (Kudos to Hans Verkuil!!!)
>
> The key change is in struct v4l2_ext_controls where the __u32 ctrl_class field
> is changed to:
>
> union {
> __u32 ctrl_class;
> __u32 which;
> };
>
> And two new defines are added:
>
> #define V4L2_CTRL_WHICH_CUR_VAL 0
> #define V4L2_CTRL_WHICH_DEF_VAL 0x0f000000
>
> The 'which' field tells you which controls are get/set/tried.
>
> V4L2_CTRL_WHICH_CUR_VAL: the current value of the controls
> V4L2_CTRL_WHICH_DEF_VAL: the default value of the controls
> V4L2_CTRL_CLASS_*: the current value of the controls belonging to the specified class.
> Note: this is deprecated usage and is only there for backwards compatibility.
> Which is also why I don't think there is a need to add V4L2_CTRL_WHICH_
> aliases for these defines.
>
>
> I have posted a copy of my working tree to
>
> https://github.com/ribalda/linux/tree/which_def_v2
>
> Changelog v2:
>
> Suggested by Hans Verkuil <hverkuil@xs4all.nl>
>
> Replace ctrls_class with which on all the codebase
> Changes in Documentation
> (Thanks!)
>
> Ricardo Ribalda Delgado (10):
> videodev2.h: Fix typo in comment
> videodev2.h: Extend struct v4l2_ext_controls
> media/v4l2-compat-ioctl32: Simple stylechecks
> media/core: Replace ctrl_class with which
> media/v4l2-core: struct struct v4l2_ext_controls param which
> usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL
> media/usb/pvrusb2: Support for V4L2_CTRL_WHICH_DEF_VAL
> media/pci/saa7164-encoder Support for V4L2_CTRL_WHICH_DEF_VAL
> media/pci/saa7164-vbi Support for V4L2_CTRL_WHICH_DEF_VAL
> Docbook: media: Document changes on struct v4l2_ext_controls
>
> Documentation/DocBook/media/v4l/v4l2.xml | 9 ++++
> .../DocBook/media/v4l/vidioc-g-ext-ctrls.xml | 28 ++++++++--
> drivers/media/pci/saa7164/saa7164-encoder.c | 59 ++++++++++++---------
> drivers/media/pci/saa7164/saa7164-vbi.c | 61 +++++++++++++---------
> drivers/media/platform/s5p-mfc/s5p_mfc_dec.c | 2 +-
> drivers/media/platform/s5p-mfc/s5p_mfc_enc.c | 2 +-
> drivers/media/usb/pvrusb2/pvrusb2-v4l2.c | 17 +++++-
> drivers/media/usb/uvc/uvc_v4l2.c | 14 ++++-
> drivers/media/v4l2-core/v4l2-compat-ioctl32.c | 17 +++---
> drivers/media/v4l2-core/v4l2-ctrls.c | 54 +++++++++++++------
> drivers/media/v4l2-core/v4l2-ioctl.c | 14 ++---
> include/uapi/linux/videodev2.h | 14 ++++-
> 12 files changed, 200 insertions(+), 91 deletions(-)
>
^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: [PATCH v2 06/10] usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL
2015-08-21 13:19 ` [PATCH v2 06/10] usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL Ricardo Ribalda Delgado
2015-09-04 10:56 ` Hans Verkuil
@ 2015-10-29 0:08 ` Laurent Pinchart
1 sibling, 0 replies; 15+ messages in thread
From: Laurent Pinchart @ 2015-10-29 0:08 UTC (permalink / raw)
To: Ricardo Ribalda Delgado
Cc: Mauro Carvalho Chehab, Mike Isely, Hans Verkuil, Steven Toth,
Sakari Ailus, Vincent Palatin, linux-media, linux-kernel
Hi Ricardo,
Thank you for the patch.
On Friday 21 August 2015 15:19:25 Ricardo Ribalda Delgado wrote:
> This driver does not use the control infrastructure.
> Add support for the new field which on structure
> v4l2_ext_controls
>
> Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
> ---
> drivers/media/usb/uvc/uvc_v4l2.c | 14 +++++++++++++-
> 1 file changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/media/usb/uvc/uvc_v4l2.c
> b/drivers/media/usb/uvc/uvc_v4l2.c index 2764f43607c1..e6d3a1bcfa2f 100644
> --- a/drivers/media/usb/uvc/uvc_v4l2.c
> +++ b/drivers/media/usb/uvc/uvc_v4l2.c
> @@ -980,6 +980,7 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file, void
> *fh, struct uvc_fh *handle = fh;
> struct uvc_video_chain *chain = handle->chain;
> struct v4l2_ext_control *ctrl = ctrls->controls;
> + struct v4l2_queryctrl qc;
> unsigned int i;
> int ret;
>
> @@ -988,7 +989,14 @@ static int uvc_ioctl_g_ext_ctrls(struct file *file,
> void *fh, return ret;
>
> for (i = 0; i < ctrls->count; ++ctrl, ++i) {
> - ret = uvc_ctrl_get(chain, ctrl);
> + if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL) {
> + qc.id = ctrl->id;
> + ret = uvc_query_v4l2_ctrl(chain, &qc);
The uvc_ctrl_begin() call above locks chain->ctrl_mutex, and
uvc_query_v4l2_ctrl() will then try to acquire the same lock. That's not a
good idea :-)
I propose moving the ctrls->which check before the uvc_ctrl_begin() call and
implement it as
if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL) {
for (i = 0; i < ctrls->count; ++ctrl, ++i) {
struct v4l2_queryctrl qc = { .id = ctrl->id };
ret = uvc_query_v4l2_ctrl(chain, &qc);
if (ret < 0) {
ctrls->error_idx = i;
return ret;
}
ctrl->value = qc.default_value;
}
return 0;
}
> + if (!ret)
> + ctrl->value = qc.default_value;
> + } else
> + ret = uvc_ctrl_get(chain, ctrl);
> +
> if (ret < 0) {
> uvc_ctrl_rollback(handle);
> ctrls->error_idx = i;
> @@ -1010,6 +1018,10 @@ static int uvc_ioctl_s_try_ext_ctrls(struct uvc_fh
> *handle, unsigned int i;
> int ret;
>
> + /* Default value cannot be changed */
> + if (ctrls->which == V4L2_CTRL_WHICH_DEF_VAL)
> + return -EINVAL;
> +
> ret = uvc_ctrl_begin(chain);
> if (ret < 0)
> return ret;
--
Regards,
Laurent Pinchart
^ permalink raw reply [flat|nested] 15+ messages in thread
end of thread, other threads:[~2015-10-29 0:08 UTC | newest]
Thread overview: 15+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-21 13:19 [PATCH v2 00/10] Support getting default values from any control Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 01/10] videodev2.h: Fix typo in comment Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 02/10] videodev2.h: Extend struct v4l2_ext_controls Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 03/10] media/v4l2-compat-ioctl32: Simple stylechecks Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 04/10] media/core: Replace ctrl_class with which Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 05/10] media/v4l2-core: struct struct v4l2_ext_controls param which Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 06/10] usb/uvc: Support for V4L2_CTRL_WHICH_DEF_VAL Ricardo Ribalda Delgado
2015-09-04 10:56 ` Hans Verkuil
2015-10-29 0:08 ` Laurent Pinchart
2015-08-21 13:19 ` [PATCH v2 07/10] media/usb/pvrusb2: " Ricardo Ribalda Delgado
2015-08-22 1:55 ` Mike Isely
2015-08-21 13:19 ` [PATCH v2 08/10] media/pci/saa7164-encoder " Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 09/10] media/pci/saa7164-vbi " Ricardo Ribalda Delgado
2015-08-21 13:19 ` [PATCH v2 10/10] Docbook: media: Document changes on struct v4l2_ext_controls Ricardo Ribalda Delgado
2015-09-04 11:01 ` [PATCH v2 00/10] Support getting default values from any control Hans Verkuil
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).