Em Sat, 20 Apr 2013 17:10:49 -0300
Mauro Carvalho Chehab <mche...@redhat.com> escreveu:

> SDR radio requires some other things at VIDIOC_[G|S]_TUNER.
> Change the ioctl to support them.
> 
> Signed-off-by: Mauro Carvalho Chehab <mche...@redhat.com>

As a convenience for reviewers, I'm posting the SDR API patches here:
        http://git.linuxtv.org/mchehab/experimental.git/shortlog/refs/heads/sdr

PS.: I rebase my experimental branches there when needed, as this is just a
scratch repository for me to experiment new things.


> ---
>  Documentation/DocBook/media/v4l/vidioc-g-tuner.xml | 30 +++++++++++++---
>  drivers/media/tuners/tuner-xc2028.c                |  2 ++
>  include/uapi/linux/videodev2.h                     | 40 
> ++++++++++++++++++++--
>  3 files changed, 65 insertions(+), 7 deletions(-)
> 
> diff --git a/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml 
> b/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml
> index 6cc8201..b8a3bcf 100644
> --- a/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml
> +++ b/Documentation/DocBook/media/v4l/vidioc-g-tuner.xml
> @@ -200,9 +200,10 @@ audio</entry>
>  <constant>_SAP</constant> flag is cleared in the
>  <structfield>capability</structfield> field, the corresponding
>  <constant>V4L2_TUNER_SUB_</constant> flag must not be set
> -here.</para><para>This field is valid only if this is the tuner of the
> +here.</para>
> +<para>This field is valid only for if this is the tuner of the
>  current video input, or when the structure refers to a radio
> -tuner.</para></entry>
> +tuner. This field is not used by SDR tuners.</para></entry>
>         </row>
>         <row>
>           <entry>__u32</entry>
> @@ -216,7 +217,7 @@ unless the requested mode is invalid or unsupported. See 
> <xref
>  the selected and received audio programs do not
>  match.</para><para>Currently this is the only field of struct
>  <structname>v4l2_tuner</structname> applications can
> -change.</para></entry>
> +change. This field is not used by SDR tuners.</para></entry>
>         </row>
>         <row>
>           <entry>__u32</entry>
> @@ -234,7 +235,28 @@ settles at zero, &ie; range is what? --></entry>
>         </row>
>         <row>
>           <entry>__u32</entry>
> -         <entry><structfield>reserved</structfield>[4]</entry>
> +         <entry><structfield>sample_rate</structfield></entry>
> +         <entry spanname="hspan">Sampling rate used by a SDR tuner, in Hz.
> +                 This value is valid only for SDR tuners.</entry>
> +       </row>
> +       <row>
> +         <entry>__u32</entry>
> +         <entry><structfield>bandwidth</structfield></entry>
> +         <entry spanname="hspan">Bandwidth allowed by the SDR tuner
> +                 low-pass saw filter, in Hz. This value is valid only for
> +                 SDR tuners.</entry>
> +       </row>
> +       <row>
> +         <entry>__u32</entry>
> +         <entry><structfield>int_freq</structfield></entry>
> +         <entry spanname="hspan">Intermediate Frequency (IF) used by
> +         the tuner, in Hz. This value is valid only for
> +         <constant>VIDIOC_G_TUNER</constant>, and it is valid only
> +         on SDR tuners.</entry>
> +       </row>
> +       <row>
> +         <entry>__u32</entry>
> +         <entry><structfield>reserved</structfield>[3]</entry>
>           <entry spanname="hspan">Reserved for future extensions. Drivers and
>  applications must set the array to zero.</entry>
>         </row>
> diff --git a/drivers/media/tuners/tuner-xc2028.c 
> b/drivers/media/tuners/tuner-xc2028.c
> index 878d2c4..c61163f 100644
> --- a/drivers/media/tuners/tuner-xc2028.c
> +++ b/drivers/media/tuners/tuner-xc2028.c
> @@ -1020,6 +1020,8 @@ static int generic_set_freq(struct dvb_frontend *fe, 
> u32 freq /* in HZ */,
>        * Maybe this might also be needed for DTV.
>        */
>       switch (new_type) {
> +     default:                        /* SDR currently not supported */
> +             goto ret;
>       case V4L2_TUNER_ANALOG_TV:
>               rc = send_seq(priv, {0x00, 0x00});
>  
> diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
> index 974c49d..765b646 100644
> --- a/include/uapi/linux/videodev2.h
> +++ b/include/uapi/linux/videodev2.h
> @@ -160,6 +160,24 @@ enum v4l2_tuner_type {
>       V4L2_TUNER_RADIO             = 1,
>       V4L2_TUNER_ANALOG_TV         = 2,
>       V4L2_TUNER_DIGITAL_TV        = 3,
> +/*
> + * Even not decoding the signal, SDR tuners may require to adjust IF,
> + * low pass filters, center frequency, etc based on the signal envelope,
> + * and its bandwidth. While we might be using here the V4L2_STD_*
> + * types, plus DVB delsys, that doesn't seem to be the better thing to
> + * do, as:
> + *   1) it would require 64 bits for V4L2 std + 32 bits for DVB std;
> + *   2) non-TV types of envelopes won't work.
> + *
> + * So, add a separate enum to describe the possible types of SDR envelopes.
> + */
> +     V4L2_TUNER_SDR_RADIO,           /* Generic non-optimized Radio range */
> +     V4L2_TUNER_SDR_ATV_PAL,         /* Optimize for Analog TV, PAL */
> +     V4L2_TUNER_SDR_ATV_NTSC,        /* Optimize for Analog TV, NTSC */
> +     V4L2_TUNER_SDR_ATV_SECAM,       /* Optimize for Analog TV, SECAM */
> +     V4L2_TUNER_SDR_DTV_ATSC,        /* Optimize for Digital TV, ATSC */
> +     V4L2_TUNER_SDR_DTV_DVBT,        /* Optimize for Digital TV, DVB-T */
> +     V4L2_TUNER_SDR_DTV_ISDBT,       /* Optimize for Digital TV, ISDB-T */
>  };
>  
>  enum v4l2_memory {
> @@ -1291,6 +1309,7 @@ struct v4l2_querymenu {
>  /*
>   *   T U N I N G
>   */
> +
>  struct v4l2_tuner {
>       __u32                   index;
>       __u8                    name[32];
> @@ -1298,11 +1317,26 @@ struct v4l2_tuner {
>       __u32                   capability;
>       __u32                   rangelow;
>       __u32                   rangehigh;
> -     __u32                   rxsubchans;
> -     __u32                   audmode;
> +
> +     union {
> +             /* non-SDR tuners */
> +             struct {
> +                     __u32   rxsubchans;
> +                     __u32   audmode;
> +             };
> +             /* SDR tuners - audio demod data makes no sense here */
> +             struct {
> +                     __u32   sample_rate;    /* Sample rate, in Hz */
> +                     __u32   bandwidth;      /* Bandwidth, in Hz */
> +             };
> +     };
> +
>       __s32                   signal;
>       __s32                   afc;
> -     __u32                   reserved[4];
> +
> +             __u32   int_freq;       /* Read Only - IF used, in Hz */
> +     /* non-SDR tuners */
> +     __u32           reserved[3];
>  };
>  
>  struct v4l2_modulator {


-- 

Cheers,
Mauro
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to