Hi Andy,

Can you take a look at this git branch:

http://git.linuxtv.org/hverkuil/media_tree.git/shortlog/refs/heads/ivtvcx18

I've removed the exlusive open for radio devices for ivtv and cx18, and made
some other improvements to ivtv as well.

If you are OK with this, then I can post a pull request for this.

Regards,

        Hans

On Thursday, September 29, 2011 14:16:38 Andy Walls wrote:
> All,
> 
> I generally don't have a problem with this patch.  However since ivtv and 
> cx18 are currently structured for exclusive open, this will impact folks who 
> use apps that open the radio nodes but change freq with a video node.
> 
> The right fix for ivtv and cx18 is to fix the radio node to allow multiple 
> open.  I won't have time to do that soon.
> 
> Regards,
> Andy
> 
> Hans Verkuil <[email protected]> wrote:
> 
> >As per feature-removal-schedule.
> >
> >If there are no comments, then I'll make a pull request in a few days.
> >
> >Regards,
> >
> >     Hans
> >
> >
> >For tuners the tuner type as passed by VIDIOC_S_FREQUENCY must match
> >the
> >type of the device node. So setting the radio frequency through a video
> >node instead of the radio node is no longer allowed.
> >
> >This is now implemented as per the feature removal schedule.
> >
> >Signed-off-by: Hans Verkuil <[email protected]>
> >---
> > .../DocBook/media/v4l/vidioc-g-frequency.xml       |    5 ++++-
> > Documentation/feature-removal-schedule.txt         |   11 -----------
> > drivers/media/video/v4l2-ioctl.c                   |    9 ++++++++-
> > 3 files changed, 12 insertions(+), 13 deletions(-)
> >
> >diff --git a/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml
> >b/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml
> >index 062d720..d18645c 100644
> >--- a/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml
> >+++ b/Documentation/DocBook/media/v4l/vidioc-g-frequency.xml
> >@@ -99,7 +99,10 @@ the &v4l2-output;
> ><structfield>modulator</structfield> field and the
> >         <entry><structfield>type</structfield></entry>
> >         <entry>The tuner type. This is the same value as in the
> > &v4l2-tuner; <structfield>type</structfield> field. The field is not
> >-applicable to modulators, &ie; ignored by drivers.</entry>
> >+applicable to modulators, &ie; ignored by drivers. The tuner type must
> >+match the type of the device node, &ie; you cannot specify
> >V4L2_TUNER_RADIO
> >+for a video/vbi device node or V4L2_TUNER_ANALOG_TV for a radio device
> >node.
> >+<errorcode>EINVAL</errorcode> will be returned in case of a
> >mismatch.</entry>
> >       </row>
> >       <row>
> >         <entry>__u32</entry>
> >diff --git a/Documentation/feature-removal-schedule.txt
> >b/Documentation/feature-removal-schedule.txt
> >index ead08f1..b0ed38c 100644
> >--- a/Documentation/feature-removal-schedule.txt
> >+++ b/Documentation/feature-removal-schedule.txt
> >@@ -530,17 +530,6 @@ Who:    Hans de Goede <[email protected]>
> > 
> > ----------------------------
> > 
> >-What:       For VIDIOC_S_FREQUENCY the type field must match the device
> >node's type.
> >-    If not, return -EINVAL.
> >-When:       3.2
> >-Why:        It makes no sense to switch the tuner to radio mode by calling
> >-    VIDIOC_S_FREQUENCY on a video node, or to switch the tuner to tv mode
> >by
> >-    calling VIDIOC_S_FREQUENCY on a radio node. This is the first step of
> >a
> >-    move to more consistent handling of tv and radio tuners.
> >-Who:        Hans Verkuil <[email protected]>
> >-
> >-----------------------------
> >-
> >What:        Opening a radio device node will no longer automatically switch
> >the
> >     tuner mode from tv to radio.
> > When:       3.3
> >diff --git a/drivers/media/video/v4l2-ioctl.c
> >b/drivers/media/video/v4l2-ioctl.c
> >index 21c49dc..4004b77 100644
> >--- a/drivers/media/video/v4l2-ioctl.c
> >+++ b/drivers/media/video/v4l2-ioctl.c
> >@@ -1757,6 +1757,8 @@ static long __video_do_ioctl(struct file *file,
> >     case VIDIOC_S_FREQUENCY:
> >     {
> >             struct v4l2_frequency *p = arg;
> >+            enum v4l2_tuner_type type = (vfd->vfl_type == VFL_TYPE_RADIO) ?
> >+                    V4L2_TUNER_RADIO : V4L2_TUNER_ANALOG_TV;
> > 
> >             if (!ops->vidioc_s_frequency)
> >                     break;
> >@@ -1766,7 +1768,12 @@ static long __video_do_ioctl(struct file *file,
> >             }
> >             dbgarg(cmd, "tuner=%d, type=%d, frequency=%d\n",
> >                             p->tuner, p->type, p->frequency);
> >-            ret = ops->vidioc_s_frequency(file, fh, p);
> >+            /* type is ignored for modulators, so only do this check
> >+               if there is no modulator support. */
> >+            if (ops->vidioc_s_modulator == NULL && type != p->type)
> >+                    ret = -EINVAL;
> >+            else
> >+                    ret = ops->vidioc_s_frequency(file, fh, p);
> >             break;
> >     }
> >     case VIDIOC_G_SLICED_VBI_CAP:
> 

_______________________________________________
ivtv-devel mailing list
[email protected]
http://ivtvdriver.org/mailman/listinfo/ivtv-devel

Reply via email to