[media] cx23885: hooks the alsa changes into the video subsystem
authorMijhail Moreyra <mijhail.moreyra@gmail.com>
Mon, 10 Oct 2011 14:09:53 +0000 (11:09 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Fri, 14 Oct 2011 19:59:42 +0000 (16:59 -0300)
Signed-off-by: Mijhail Moreyra <mijhail.moreyra@gmail.com>
Signed-off-by: Steven Toth <stoth@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/cx23885/cx23885-video.c

index 0c463f97e6c4927ce17e78379cce0ffd7d1a483c..acd6e0c2970e64368bd1e101c8db365e1e306469 100644 (file)
@@ -37,6 +37,8 @@
 #include "cx23885-ioctl.h"
 #include "tuner-xc2028.h"
 
+#include <media/cx25840.h>
+
 MODULE_DESCRIPTION("v4l2 driver module for cx23885 based TV cards");
 MODULE_AUTHOR("Steven Toth <stoth@linuxtv.org>");
 MODULE_LICENSE("GPL");
@@ -884,8 +886,9 @@ static int cx23885_get_control(struct cx23885_dev *dev,
 static int cx23885_set_control(struct cx23885_dev *dev,
        struct v4l2_control *ctl)
 {
-       dprintk(1, "%s() calling cx25840(VIDIOC_S_CTRL)"
-               " (disabled - no action)\n", __func__);
+       dprintk(1, "%s() calling cx25840(VIDIOC_S_CTRL)\n", __func__);
+       call_all(dev, core, s_ctrl, ctl);
+
        return 0;
 }
 
@@ -1220,11 +1223,9 @@ static int vidioc_g_tuner(struct file *file, void *priv,
        if (0 != t->index)
                return -EINVAL;
 
+       memset(t, 0, sizeof(*t));
        strcpy(t->name, "Television");
-       t->type       = V4L2_TUNER_ANALOG_TV;
-       t->capability = V4L2_TUNER_CAP_NORM;
-       t->rangehigh  = 0xffffffffUL;
-       t->signal = 0xffff ; /* LOCKED */
+
        return 0;
 }
 
@@ -1237,6 +1238,8 @@ static int vidioc_s_tuner(struct file *file, void *priv,
                return -EINVAL;
        if (0 != t->index)
                return -EINVAL;
+       /* Update the A/V core */
+
        return 0;
 }
 
@@ -1438,6 +1441,9 @@ void cx23885_video_unregister(struct cx23885_dev *dev)
 
                btcx_riscmem_free(dev->pci, &dev->vidq.stopper);
        }
+
+       if (dev->audio_dev)
+               cx23885_audio_finidev(dev);
 }
 
 int cx23885_video_register(struct cx23885_dev *dev)
@@ -1504,7 +1510,6 @@ int cx23885_video_register(struct cx23885_dev *dev)
                }
        }
 
-
        /* register v4l devices */
        dev->video_dev = cx23885_vdev_init(dev, dev->pci,
                &cx23885_video_template, "video");
@@ -1517,6 +1522,10 @@ int cx23885_video_register(struct cx23885_dev *dev)
        }
        printk(KERN_INFO "%s/0: registered device %s [v4l2]\n",
               dev->name, video_device_node_name(dev->video_dev));
+
+       /* Register ALSA audio device */
+       dev->audio_dev = cx23885_audio_initdev(dev);
+
        /* initial device configuration */
        mutex_lock(&dev->lock);
        cx23885_set_tvnorm(dev, dev->tvnorm);