[media] bttv: Improve TEA575x support
authorOndrej Zary <linux@rainbow-software.org>
Fri, 16 Jan 2015 09:58:32 +0000 (06:58 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 27 Jan 2015 12:14:20 +0000 (10:14 -0200)
Improve g_tuner and add s_hw_freq_seek and enum_freq_bands support for cards
with TEA575x radio.

This allows signal/stereo detection and HW seek to work on these cards.

Signed-off-by: Ondrej Zary <linux@rainbow-software.org>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/pci/bt8xx/bttv-driver.c

index e7f8aded35f80faba00e83e7d8a4d63ead37a0c7..4ec2a3c3f23c1642e939206ce808cd24c99e53f4 100644 (file)
@@ -2515,6 +2515,8 @@ static int bttv_querycap(struct file *file, void  *priv,
                if (btv->has_saa6588)
                        cap->device_caps |= V4L2_CAP_READWRITE |
                                                V4L2_CAP_RDS_CAPTURE;
+               if (btv->has_tea575x)
+                       cap->device_caps |= V4L2_CAP_HW_FREQ_SEEK;
        }
        return 0;
 }
@@ -3244,6 +3246,9 @@ static int radio_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t)
        if (btv->audio_mode_gpio)
                btv->audio_mode_gpio(btv, t, 0);
 
+       if (btv->has_tea575x)
+               return snd_tea575x_g_tuner(&btv->tea, t);
+
        return 0;
 }
 
@@ -3261,6 +3266,30 @@ static int radio_s_tuner(struct file *file, void *priv,
        return 0;
 }
 
+static int radio_s_hw_freq_seek(struct file *file, void *priv,
+                                       const struct v4l2_hw_freq_seek *a)
+{
+       struct bttv_fh *fh = priv;
+       struct bttv *btv = fh->btv;
+
+       if (btv->has_tea575x)
+               return snd_tea575x_s_hw_freq_seek(file, &btv->tea, a);
+
+       return -ENOTTY;
+}
+
+static int radio_enum_freq_bands(struct file *file, void *priv,
+                                        struct v4l2_frequency_band *band)
+{
+       struct bttv_fh *fh = priv;
+       struct bttv *btv = fh->btv;
+
+       if (btv->has_tea575x)
+               return snd_tea575x_enum_freq_bands(&btv->tea, band);
+
+       return -ENOTTY;
+}
+
 static ssize_t radio_read(struct file *file, char __user *data,
                         size_t count, loff_t *ppos)
 {
@@ -3318,6 +3347,8 @@ static const struct v4l2_ioctl_ops radio_ioctl_ops = {
        .vidioc_s_tuner         = radio_s_tuner,
        .vidioc_g_frequency     = bttv_g_frequency,
        .vidioc_s_frequency     = bttv_s_frequency,
+       .vidioc_s_hw_freq_seek  = radio_s_hw_freq_seek,
+       .vidioc_enum_freq_bands = radio_enum_freq_bands,
        .vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
        .vidioc_unsubscribe_event = v4l2_event_unsubscribe,
 };