summaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88/cx88-blackbird.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@g5.osdl.org>2006-06-30 15:36:19 -0700
committerLinus Torvalds <torvalds@g5.osdl.org>2006-06-30 15:36:19 -0700
commit1cfef5ed631dedc55ca3c57a5fcfd01c77db3b59 (patch)
treea2e9e10518c677071ed6c5c5b4df478d548901dd /drivers/media/video/cx88/cx88-blackbird.c
parent3e8d6ad9bf1f02fdb9fd119c3c266d4b73b7175d (diff)
parent00819f87d883bb4aff97aecc7cc722ba27bd183a (diff)
downloadop-kernel-dev-1cfef5ed631dedc55ca3c57a5fcfd01c77db3b59.zip
op-kernel-dev-1cfef5ed631dedc55ca3c57a5fcfd01c77db3b59.tar.gz
Merge master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb
* master.kernel.org:/pub/scm/linux/kernel/git/mchehab/v4l-dvb: V4L/DVB (4290): Add support for the TCL M2523_3DB_E tuner. V4L/DVB (4289): Missing statement in drivers/media/dvb/frontends/cx22700.c V4L/DVB (4288): Clean out a zillion sparse warnings in pvrusb2 V4L/DVB (4287): Pvrusb2/: possible cleanups V4L/DVB (4285): Cx88: add support for Geniatech Digistar / Digiwave 103g V4L/DVB (4284): Cx24123: fix set_voltage function according to the specs V4L/DVB (4282): Fix: use swzigzag for swalgo V4L/DVB (4281): TDA9887_SET_CONFIG should only be handled by the tda9887. V4L/DVB (4277): Fix CI interface on PRO KNC1 cards V4L/DVB (4276): Fix CI on old KNC1 DVBC cards V4L/DVB (4275): The FE_SET_FRONTEND_TUNE_MODE ioctl always returns EOPNOTSUPP V4L/DVB (4274): Eliminate use of tda9887 from pvrusb2 driver V4L/DVB (4273): Always log pvrusb2 device register / unregister events V4L/DVB (4272): Fix tveeprom supported standards V4L/DVB (4270): Add tda9887-specific tuner configuration V4L/DVB (4269): Subject: videocodec: make 1-bit fields unsigned V4L/DVB (4267): Remove all instances of request_module("tda9887") V4L/DVB (4264): Cx88-blackbird: implement VIDIOC_QUERYCTRL and VIDIOC_QUERYMENU
Diffstat (limited to 'drivers/media/video/cx88/cx88-blackbird.c')
-rw-r--r--drivers/media/video/cx88/cx88-blackbird.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/drivers/media/video/cx88/cx88-blackbird.c b/drivers/media/video/cx88/cx88-blackbird.c
index 4ff8158..349632b 100644
--- a/drivers/media/video/cx88/cx88-blackbird.c
+++ b/drivers/media/video/cx88/cx88-blackbird.c
@@ -686,6 +686,39 @@ static struct videobuf_queue_ops blackbird_qops = {
/* ------------------------------------------------------------------ */
+static const u32 *ctrl_classes[] = {
+ cx88_user_ctrls,
+ cx2341x_mpeg_ctrls,
+ NULL
+};
+
+static int blackbird_queryctrl(struct cx8802_dev *dev, struct v4l2_queryctrl *qctrl)
+{
+ qctrl->id = v4l2_ctrl_next(ctrl_classes, qctrl->id);
+ if (qctrl->id == 0)
+ return -EINVAL;
+
+ /* Standard V4L2 controls */
+ if (cx8800_ctrl_query(qctrl) == 0)
+ return 0;
+
+ /* MPEG V4L2 controls */
+ if (cx2341x_ctrl_query(&dev->params, qctrl))
+ qctrl->flags |= V4L2_CTRL_FLAG_DISABLED;
+ return 0;
+}
+
+static int blackbird_querymenu(struct cx8802_dev *dev, struct v4l2_querymenu *qmenu)
+{
+ struct v4l2_queryctrl qctrl;
+
+ qctrl.id = qmenu->id;
+ blackbird_queryctrl(dev, &qctrl);
+ return v4l2_ctrl_query_menu(qmenu, &qctrl, cx2341x_ctrl_get_menu(qmenu->id));
+}
+
+/* ------------------------------------------------------------------ */
+
static int mpeg_do_ioctl(struct inode *inode, struct file *file,
unsigned int cmd, void *arg)
{
@@ -866,6 +899,16 @@ static int mpeg_do_ioctl(struct inode *inode, struct file *file,
core->name);
return 0;
}
+ case VIDIOC_QUERYMENU:
+ return blackbird_querymenu(dev, arg);
+ case VIDIOC_QUERYCTRL:
+ {
+ struct v4l2_queryctrl *c = arg;
+
+ if (blackbird_queryctrl(dev, c) == 0)
+ return 0;
+ return cx88_do_ioctl(inode, file, 0, dev->core, cmd, arg, mpeg_do_ioctl);
+ }
default:
return cx88_do_ioctl(inode, file, 0, dev->core, cmd, arg, mpeg_do_ioctl);
OpenPOWER on IntegriCloud