linux-media.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups
@ 2013-02-07 17:39 Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 01/13] em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_QUERYSTD, VIDIOC_G/S_STD Frank Schäfer
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

This patch series addresses some issues with the ioctl code of the em28xx driver:
Patches 1-5 and 11+12 fix and clean up the enabling/disabling of the ioctls 
depending on the device type and equipment.
Patches 6-10 remove some obsolete/useless code.
Patch 13 improves the VBI support detection and device node registration.

Changes since v1:
- added patch 11

Frank Schäfer (13):
  em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_QUERYSTD,
    VIDIOC_G/S_STD
  em28xx: disable tuner related ioctls for video and VBI devices
    without tuner
  em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_G_AUDIO and
    VIDIOC_S_AUDIO
  em28xx: use v4l2_disable_ioctl() to disable ioctl VIDIOC_S_PARM
  em28xx: disable ioctl VIDIOC_S_PARM for VBI devices
  em28xx: make ioctls VIDIOC_G/S_PARM working for VBI devices
  em28xx: remove ioctl VIDIOC_CROPCAP
  em28xx: get rid of duplicate function vidioc_s_fmt_vbi_cap()
  em28xx: VIDIOC_G_TUNER: remove unneeded setting of tuner type
  em28xx: remove obsolete device state checks from the ioctl functions
  em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available without
    CONFIG_VIDEO_ADV_DEBUG selected
  em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available for radio
    devices
  em28xx: do not claim VBI support if the device is a camera

 drivers/media/usb/em28xx/em28xx-core.c  |    5 +
 drivers/media/usb/em28xx/em28xx-video.c |  178 ++++++++-----------------------
 2 Dateien geändert, 52 Zeilen hinzugefügt(+), 131 Zeilen entfernt(-)

-- 
1.7.10.4


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH v2 01/13] em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_QUERYSTD, VIDIOC_G/S_STD
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 02/13] em28xx: disable tuner related ioctls for video and VBI devices without tuner Frank Schäfer
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

Instead of checking the device type and returning -ENOTTY inside the ioctl
functions, use v4l2_disable_ioctl() to disable the ioctls VIDIOC_QUERYSTD,
VIDIOC_G_STD and VIDIOC_S_STD if the device is a camera.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |   13 +++++++------
 1 Datei geändert, 7 Zeilen hinzugefügt(+), 6 Zeilen entfernt(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index 2eabf2a..7f1f37c 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -959,8 +959,6 @@ static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
 	struct em28xx      *dev = fh->dev;
 	int                rc;
 
-	if (dev->board.is_webcam)
-		return -ENOTTY;
 	rc = check_dev(dev);
 	if (rc < 0)
 		return rc;
@@ -976,8 +974,6 @@ static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
 	struct em28xx      *dev = fh->dev;
 	int                rc;
 
-	if (dev->board.is_webcam)
-		return -ENOTTY;
 	rc = check_dev(dev);
 	if (rc < 0)
 		return rc;
@@ -994,8 +990,6 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *norm)
 	struct v4l2_format f;
 	int                rc;
 
-	if (dev->board.is_webcam)
-		return -ENOTTY;
 	if (*norm == dev->norm)
 		return 0;
 	rc = check_dev(dev);
@@ -1899,6 +1893,13 @@ int em28xx_register_analog_devices(struct em28xx *dev)
 	dev->vdev->queue = &dev->vb_vidq;
 	dev->vdev->queue->lock = &dev->vb_queue_lock;
 
+	/* disable inapplicable ioctls */
+	if (dev->board.is_webcam) {
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_QUERYSTD);
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_STD);
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_STD);
+	}
+
 	/* register v4l2 video video_device */
 	ret = video_register_device(dev->vdev, VFL_TYPE_GRABBER,
 				       video_nr[dev->devno]);
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 02/13] em28xx: disable tuner related ioctls for video and VBI devices without tuner
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 01/13] em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_QUERYSTD, VIDIOC_G/S_STD Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 03/13] em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_G_AUDIO and VIDIOC_S_AUDIO Frank Schäfer
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

Disable the ioctls VIDIOC_G_TUNER, VIDIOC_S_TUNER, VIDIOC_G_FREQUENCY and
VIDIOC_S_FREQUENCY for video and VBI devices without tuner.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |   14 ++++++++++++++
 1 Datei geändert, 14 Zeilen hinzugefügt(+)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index 7f1f37c..dd2e31c 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1899,6 +1899,12 @@ int em28xx_register_analog_devices(struct em28xx *dev)
 		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_STD);
 		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_STD);
 	}
+	if (dev->tuner_type == TUNER_ABSENT) {
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_TUNER);
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_TUNER);
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_FREQUENCY);
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_FREQUENCY);
+	}
 
 	/* register v4l2 video video_device */
 	ret = video_register_device(dev->vdev, VFL_TYPE_GRABBER,
@@ -1917,6 +1923,14 @@ int em28xx_register_analog_devices(struct em28xx *dev)
 		dev->vbi_dev->queue = &dev->vb_vbiq;
 		dev->vbi_dev->queue->lock = &dev->vb_vbi_queue_lock;
 
+		/* disable inapplicable ioctls */
+		if (dev->tuner_type == TUNER_ABSENT) {
+			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_G_TUNER);
+			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_S_TUNER);
+			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_G_FREQUENCY);
+			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_S_FREQUENCY);
+		}
+
 		/* register v4l2 vbi video_device */
 		ret = video_register_device(dev->vbi_dev, VFL_TYPE_VBI,
 					    vbi_nr[dev->devno]);
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 03/13] em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_G_AUDIO and VIDIOC_S_AUDIO
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 01/13] em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_QUERYSTD, VIDIOC_G/S_STD Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 02/13] em28xx: disable tuner related ioctls for video and VBI devices without tuner Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 04/13] em28xx: use v4l2_disable_ioctl() to disable ioctl VIDIOC_S_PARM Frank Schäfer
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

Instead of checking the device type and returning -EINVAL inside the ioctl
functions, use v4l2_disable_ioctl() to disable the ioctls VIDIOC_G_AUDIO and
VIDIOC_S_AUDIO if the device doesn't support audio.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |   15 ++++++++-------
 1 Datei geändert, 8 Zeilen hinzugefügt(+), 7 Zeilen entfernt(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index dd2e31c..378d8a1 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1130,9 +1130,6 @@ static int vidioc_g_audio(struct file *file, void *priv, struct v4l2_audio *a)
 	struct em28xx_fh   *fh    = priv;
 	struct em28xx      *dev   = fh->dev;
 
-	if (!dev->audio_mode.has_audio)
-		return -EINVAL;
-
 	switch (a->index) {
 	case EM28XX_AMUX_VIDEO:
 		strcpy(a->name, "Television");
@@ -1173,10 +1170,6 @@ static int vidioc_s_audio(struct file *file, void *priv, const struct v4l2_audio
 	struct em28xx_fh   *fh  = priv;
 	struct em28xx      *dev = fh->dev;
 
-
-	if (!dev->audio_mode.has_audio)
-		return -EINVAL;
-
 	if (a->index >= MAX_EM28XX_INPUT)
 		return -EINVAL;
 	if (0 == INPUT(a->index)->type)
@@ -1905,6 +1898,10 @@ int em28xx_register_analog_devices(struct em28xx *dev)
 		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_FREQUENCY);
 		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_FREQUENCY);
 	}
+	if (!dev->audio_mode.has_audio) {
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_AUDIO);
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_AUDIO);
+	}
 
 	/* register v4l2 video video_device */
 	ret = video_register_device(dev->vdev, VFL_TYPE_GRABBER,
@@ -1930,6 +1927,10 @@ int em28xx_register_analog_devices(struct em28xx *dev)
 			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_G_FREQUENCY);
 			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_S_FREQUENCY);
 		}
+		if (!dev->audio_mode.has_audio) {
+			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_G_AUDIO);
+			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_S_AUDIO);
+		}
 
 		/* register v4l2 vbi video_device */
 		ret = video_register_device(dev->vbi_dev, VFL_TYPE_VBI,
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 04/13] em28xx: use v4l2_disable_ioctl() to disable ioctl VIDIOC_S_PARM
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (2 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 03/13] em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_G_AUDIO and VIDIOC_S_AUDIO Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 05/13] em28xx: disable ioctl VIDIOC_S_PARM for VBI devices Frank Schäfer
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

Instead of checking the device type and returning -ENOTTY inside the ioctl
function, use v4l2_disable_ioctl() to disable the ioctl VIDIOC_S_PARM if the
device is not a camera.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |    5 ++---
 1 Datei geändert, 2 Zeilen hinzugefügt(+), 3 Zeilen entfernt(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index 378d8a1..c76714d 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1044,9 +1044,6 @@ static int vidioc_s_parm(struct file *file, void *priv,
 	struct em28xx_fh   *fh  = priv;
 	struct em28xx      *dev = fh->dev;
 
-	if (!dev->board.is_webcam)
-		return -ENOTTY;
-
 	if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
 		return -EINVAL;
 
@@ -1891,6 +1888,8 @@ int em28xx_register_analog_devices(struct em28xx *dev)
 		v4l2_disable_ioctl(dev->vdev, VIDIOC_QUERYSTD);
 		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_STD);
 		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_STD);
+	} else {
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_PARM);
 	}
 	if (dev->tuner_type == TUNER_ABSENT) {
 		v4l2_disable_ioctl(dev->vdev, VIDIOC_G_TUNER);
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 05/13] em28xx: disable ioctl VIDIOC_S_PARM for VBI devices
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (3 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 04/13] em28xx: use v4l2_disable_ioctl() to disable ioctl VIDIOC_S_PARM Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 06/13] em28xx: make ioctls VIDIOC_G/S_PARM working " Frank Schäfer
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

VIDIOC_S_PARM doesn't make sense for VBI device nodes, because we don't support
selecting the number of read buffers to use.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |    1 +
 1 Datei geändert, 1 Zeile hinzugefügt(+)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index c76714d..d4dc5b2 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1920,6 +1920,7 @@ int em28xx_register_analog_devices(struct em28xx *dev)
 		dev->vbi_dev->queue->lock = &dev->vb_vbi_queue_lock;
 
 		/* disable inapplicable ioctls */
+		v4l2_disable_ioctl(dev->vdev, VIDIOC_S_PARM);
 		if (dev->tuner_type == TUNER_ABSENT) {
 			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_G_TUNER);
 			v4l2_disable_ioctl(dev->vbi_dev, VIDIOC_S_TUNER);
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 06/13] em28xx: make ioctls VIDIOC_G/S_PARM working for VBI devices
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (4 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 05/13] em28xx: disable ioctl VIDIOC_S_PARM for VBI devices Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 07/13] em28xx: remove ioctl VIDIOC_CROPCAP Frank Schäfer
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

With the current code V4L2_BUF_TYPE_VIDEO_CAPTURE is accepted only, but for VBI
devices only buffer type V4L2_BUF_TYPE_VBI_CAPTURE is used/valid.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |    6 ------
 1 Datei geändert, 6 Zeilen entfernt(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index d4dc5b2..6172d59 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1024,9 +1024,6 @@ static int vidioc_g_parm(struct file *file, void *priv,
 	struct em28xx      *dev = fh->dev;
 	int rc = 0;
 
-	if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
-		return -EINVAL;
-
 	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
 	if (dev->board.is_webcam)
 		rc = v4l2_device_call_until_err(&dev->v4l2_dev, 0,
@@ -1044,9 +1041,6 @@ static int vidioc_s_parm(struct file *file, void *priv,
 	struct em28xx_fh   *fh  = priv;
 	struct em28xx      *dev = fh->dev;
 
-	if (p->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
-		return -EINVAL;
-
 	p->parm.capture.readbuffers = EM28XX_MIN_BUF;
 	return v4l2_device_call_until_err(&dev->v4l2_dev, 0, video, s_parm, p);
 }
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 07/13] em28xx: remove ioctl VIDIOC_CROPCAP
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (5 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 06/13] em28xx: make ioctls VIDIOC_G/S_PARM working " Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 08/13] em28xx: get rid of duplicate function vidioc_s_fmt_vbi_cap() Frank Schäfer
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

The em28xx driver doesn't support the VIDIOC_G_CROP and VIDIOC_S_CROP ioctls,
so VIDIOC_CROPCAP is useless and has the potential to confuse applications,
because it can be interpreted as indicator for cropping support.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |   21 ---------------------
 1 Datei geändert, 21 Zeilen entfernt(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index 6172d59..edd29ae 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1364,26 +1364,6 @@ static int vidioc_s_register(struct file *file, void *priv,
 #endif
 
 
-static int vidioc_cropcap(struct file *file, void *priv,
-					struct v4l2_cropcap *cc)
-{
-	struct em28xx_fh      *fh  = priv;
-	struct em28xx         *dev = fh->dev;
-
-	if (cc->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
-		return -EINVAL;
-
-	cc->bounds.left = 0;
-	cc->bounds.top = 0;
-	cc->bounds.width = dev->width;
-	cc->bounds.height = dev->height;
-	cc->defrect = cc->bounds;
-	cc->pixelaspect.numerator = 54;	/* 4:3 FIXME: remove magic numbers */
-	cc->pixelaspect.denominator = 59;
-
-	return 0;
-}
-
 static int vidioc_querycap(struct file *file, void  *priv,
 					struct v4l2_capability *cap)
 {
@@ -1731,7 +1711,6 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
 	.vidioc_enum_framesizes     = vidioc_enum_framesizes,
 	.vidioc_g_audio             = vidioc_g_audio,
 	.vidioc_s_audio             = vidioc_s_audio,
-	.vidioc_cropcap             = vidioc_cropcap,
 
 	.vidioc_reqbufs             = vb2_ioctl_reqbufs,
 	.vidioc_create_bufs         = vb2_ioctl_create_bufs,
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 08/13] em28xx: get rid of duplicate function vidioc_s_fmt_vbi_cap()
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (6 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 07/13] em28xx: remove ioctl VIDIOC_CROPCAP Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 09/13] em28xx: VIDIOC_G_TUNER: remove unneeded setting of tuner type Frank Schäfer
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

vidioc_s_fmt_vbi_cap() is a 100% duplicate of vidioc_g_fmt_vbi_cap() and
therefore can be removed.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |   31 +------------------------------
 1 Datei geändert, 1 Zeile hinzugefügt(+), 30 Zeilen entfernt(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index edd29ae..af3e70a 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1480,35 +1480,6 @@ static int vidioc_g_fmt_vbi_cap(struct file *file, void *priv,
 	return 0;
 }
 
-static int vidioc_s_fmt_vbi_cap(struct file *file, void *priv,
-				struct v4l2_format *format)
-{
-	struct em28xx_fh      *fh  = priv;
-	struct em28xx         *dev = fh->dev;
-
-	format->fmt.vbi.samples_per_line = dev->vbi_width;
-	format->fmt.vbi.sample_format = V4L2_PIX_FMT_GREY;
-	format->fmt.vbi.offset = 0;
-	format->fmt.vbi.flags = 0;
-	format->fmt.vbi.sampling_rate = 6750000 * 4 / 2;
-	format->fmt.vbi.count[0] = dev->vbi_height;
-	format->fmt.vbi.count[1] = dev->vbi_height;
-	memset(format->fmt.vbi.reserved, 0, sizeof(format->fmt.vbi.reserved));
-
-	/* Varies by video standard (NTSC, PAL, etc.) */
-	if (dev->norm & V4L2_STD_525_60) {
-		/* NTSC */
-		format->fmt.vbi.start[0] = 10;
-		format->fmt.vbi.start[1] = 273;
-	} else if (dev->norm & V4L2_STD_625_50) {
-		/* PAL */
-		format->fmt.vbi.start[0] = 6;
-		format->fmt.vbi.start[1] = 318;
-	}
-
-	return 0;
-}
-
 /* ----------------------------------------------------------- */
 /* RADIO ESPECIFIC IOCTLS                                      */
 /* ----------------------------------------------------------- */
@@ -1707,7 +1678,7 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
 	.vidioc_s_fmt_vid_cap       = vidioc_s_fmt_vid_cap,
 	.vidioc_g_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
 	.vidioc_try_fmt_vbi_cap     = vidioc_g_fmt_vbi_cap,
-	.vidioc_s_fmt_vbi_cap       = vidioc_s_fmt_vbi_cap,
+	.vidioc_s_fmt_vbi_cap       = vidioc_g_fmt_vbi_cap,
 	.vidioc_enum_framesizes     = vidioc_enum_framesizes,
 	.vidioc_g_audio             = vidioc_g_audio,
 	.vidioc_s_audio             = vidioc_s_audio,
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 09/13] em28xx: VIDIOC_G_TUNER: remove unneeded setting of tuner type
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (7 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 08/13] em28xx: get rid of duplicate function vidioc_s_fmt_vbi_cap() Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 10/13] em28xx: remove obsolete device state checks from the ioctl functions Frank Schäfer
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

The tuner type is set by the v4l2-core based on the device type.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |    1 -
 1 Datei geändert, 1 Zeile entfernt(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index af3e70a..319d0ee 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1493,7 +1493,6 @@ static int radio_g_tuner(struct file *file, void *priv,
 		return -EINVAL;
 
 	strcpy(t->name, "Radio");
-	t->type = V4L2_TUNER_RADIO;
 
 	v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t);
 
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 10/13] em28xx: remove obsolete device state checks from the ioctl functions
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (8 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 09/13] em28xx: VIDIOC_G_TUNER: remove unneeded setting of tuner type Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 11/13] em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available without CONFIG_VIDEO_ADV_DEBUG selected Frank Schäfer
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

v4l2_device_disconnect() is called when the device is disconnected, so that the
v4l2-core rejects all ioctl calls.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |   43 -------------------------------
 1 Datei geändert, 43 Zeilen entfernt(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index 319d0ee..dd05cfb 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -799,15 +799,6 @@ const struct v4l2_ctrl_ops em28xx_ctrl_ops = {
 	.s_ctrl = em28xx_s_ctrl,
 };
 
-static int check_dev(struct em28xx *dev)
-{
-	if (dev->disconnected) {
-		em28xx_errdev("v4l2 ioctl: device not present\n");
-		return -ENODEV;
-	}
-	return 0;
-}
-
 static void get_scale(struct em28xx *dev,
 			unsigned int width, unsigned int height,
 			unsigned int *hscale, unsigned int *vscale)
@@ -957,11 +948,6 @@ static int vidioc_g_std(struct file *file, void *priv, v4l2_std_id *norm)
 {
 	struct em28xx_fh   *fh  = priv;
 	struct em28xx      *dev = fh->dev;
-	int                rc;
-
-	rc = check_dev(dev);
-	if (rc < 0)
-		return rc;
 
 	*norm = dev->norm;
 
@@ -972,11 +958,6 @@ static int vidioc_querystd(struct file *file, void *priv, v4l2_std_id *norm)
 {
 	struct em28xx_fh   *fh  = priv;
 	struct em28xx      *dev = fh->dev;
-	int                rc;
-
-	rc = check_dev(dev);
-	if (rc < 0)
-		return rc;
 
 	v4l2_device_call_all(&dev->v4l2_dev, 0, video, querystd, norm);
 
@@ -988,13 +969,9 @@ static int vidioc_s_std(struct file *file, void *priv, v4l2_std_id *norm)
 	struct em28xx_fh   *fh  = priv;
 	struct em28xx      *dev = fh->dev;
 	struct v4l2_format f;
-	int                rc;
 
 	if (*norm == dev->norm)
 		return 0;
-	rc = check_dev(dev);
-	if (rc < 0)
-		return rc;
 
 	if (dev->streaming_users > 0)
 		return -EBUSY;
@@ -1101,11 +1078,6 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
 {
 	struct em28xx_fh   *fh  = priv;
 	struct em28xx      *dev = fh->dev;
-	int                rc;
-
-	rc = check_dev(dev);
-	if (rc < 0)
-		return rc;
 
 	if (i >= MAX_EM28XX_INPUT)
 		return -EINVAL;
@@ -1180,11 +1152,6 @@ static int vidioc_g_tuner(struct file *file, void *priv,
 {
 	struct em28xx_fh      *fh  = priv;
 	struct em28xx         *dev = fh->dev;
-	int                   rc;
-
-	rc = check_dev(dev);
-	if (rc < 0)
-		return rc;
 
 	if (0 != t->index)
 		return -EINVAL;
@@ -1200,11 +1167,6 @@ static int vidioc_s_tuner(struct file *file, void *priv,
 {
 	struct em28xx_fh      *fh  = priv;
 	struct em28xx         *dev = fh->dev;
-	int                   rc;
-
-	rc = check_dev(dev);
-	if (rc < 0)
-		return rc;
 
 	if (0 != t->index)
 		return -EINVAL;
@@ -1231,11 +1193,6 @@ static int vidioc_s_frequency(struct file *file, void *priv,
 {
 	struct em28xx_fh      *fh  = priv;
 	struct em28xx         *dev = fh->dev;
-	int                   rc;
-
-	rc = check_dev(dev);
-	if (rc < 0)
-		return rc;
 
 	if (0 != f->tuner)
 		return -EINVAL;
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 11/13] em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available without CONFIG_VIDEO_ADV_DEBUG selected
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (9 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 10/13] em28xx: remove obsolete device state checks from the ioctl functions Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 12/13] em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available for radio devices Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 13/13] em28xx: do not claim VBI support if the device is a camera Frank Schäfer
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

VIDIOC_DBG_G_CHIP_IDENT is a "normal" and not an "advanced" debug functionality.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |   27 +++++++++++++--------------
 1 Datei geändert, 13 Zeilen hinzugefügt(+), 14 Zeilen entfernt(-)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index dd05cfb..2020faa 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1204,19 +1204,6 @@ static int vidioc_s_frequency(struct file *file, void *priv,
 	return 0;
 }
 
-#ifdef CONFIG_VIDEO_ADV_DEBUG
-static int em28xx_reg_len(int reg)
-{
-	switch (reg) {
-	case EM28XX_R40_AC97LSB:
-	case EM28XX_R30_HSCALELOW:
-	case EM28XX_R32_VSCALELOW:
-		return 2;
-	default:
-		return 1;
-	}
-}
-
 static int vidioc_g_chip_ident(struct file *file, void *priv,
 	       struct v4l2_dbg_chip_ident *chip)
 {
@@ -1239,6 +1226,18 @@ static int vidioc_g_chip_ident(struct file *file, void *priv,
 	return 0;
 }
 
+#ifdef CONFIG_VIDEO_ADV_DEBUG
+static int em28xx_reg_len(int reg)
+{
+	switch (reg) {
+	case EM28XX_R40_AC97LSB:
+	case EM28XX_R30_HSCALELOW:
+	case EM28XX_R32_VSCALELOW:
+		return 2;
+	default:
+		return 1;
+	}
+}
 
 static int vidioc_g_register(struct file *file, void *priv,
 			     struct v4l2_dbg_register *reg)
@@ -1662,10 +1661,10 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = {
 	.vidioc_s_frequency         = vidioc_s_frequency,
 	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
 	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
+	.vidioc_g_chip_ident        = vidioc_g_chip_ident,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	.vidioc_g_register          = vidioc_g_register,
 	.vidioc_s_register          = vidioc_s_register,
-	.vidioc_g_chip_ident        = vidioc_g_chip_ident,
 #endif
 };
 
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 12/13] em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available for radio devices
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (10 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 11/13] em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available without CONFIG_VIDEO_ADV_DEBUG selected Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  2013-02-07 17:39 ` [PATCH v2 13/13] em28xx: do not claim VBI support if the device is a camera Frank Schäfer
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-video.c |    1 +
 1 Datei geändert, 1 Zeile hinzugefügt(+)

diff --git a/drivers/media/usb/em28xx/em28xx-video.c b/drivers/media/usb/em28xx/em28xx-video.c
index 2020faa..5e360e0 100644
--- a/drivers/media/usb/em28xx/em28xx-video.c
+++ b/drivers/media/usb/em28xx/em28xx-video.c
@@ -1691,6 +1691,7 @@ static const struct v4l2_ioctl_ops radio_ioctl_ops = {
 	.vidioc_s_frequency   = vidioc_s_frequency,
 	.vidioc_subscribe_event = v4l2_ctrl_subscribe_event,
 	.vidioc_unsubscribe_event = v4l2_event_unsubscribe,
+	.vidioc_g_chip_ident  = vidioc_g_chip_ident,
 #ifdef CONFIG_VIDEO_ADV_DEBUG
 	.vidioc_g_register    = vidioc_g_register,
 	.vidioc_s_register    = vidioc_s_register,
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH v2 13/13] em28xx: do not claim VBI support if the device is a camera
  2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
                   ` (11 preceding siblings ...)
  2013-02-07 17:39 ` [PATCH v2 12/13] em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available for radio devices Frank Schäfer
@ 2013-02-07 17:39 ` Frank Schäfer
  12 siblings, 0 replies; 14+ messages in thread
From: Frank Schäfer @ 2013-02-07 17:39 UTC (permalink / raw)
  To: mchehab; +Cc: linux-media, Frank Schäfer

Avoids registering a VBI device and streaming in VBI-mode if the device is a
camera.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/usb/em28xx/em28xx-core.c |    5 +++++
 1 Datei geändert, 5 Zeilen hinzugefügt(+)

diff --git a/drivers/media/usb/em28xx/em28xx-core.c b/drivers/media/usb/em28xx/em28xx-core.c
index 3905570..a6e88db 100644
--- a/drivers/media/usb/em28xx/em28xx-core.c
+++ b/drivers/media/usb/em28xx/em28xx-core.c
@@ -681,6 +681,11 @@ int em28xx_vbi_supported(struct em28xx *dev)
 	if (disable_vbi == 1)
 		return 0;
 
+	if (dev->board.is_webcam)
+		return 0;
+
+	/* FIXME: check subdevices for VBI support */
+
 	if (dev->chip_id == CHIP_ID_EM2860 ||
 	    dev->chip_id == CHIP_ID_EM2883)
 		return 1;
-- 
1.7.10.4


^ permalink raw reply related	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2013-02-07 17:39 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-07 17:39 [PATCH v2 00/13] em28xx: ioctl fixes/clean-ups Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 01/13] em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_QUERYSTD, VIDIOC_G/S_STD Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 02/13] em28xx: disable tuner related ioctls for video and VBI devices without tuner Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 03/13] em28xx: use v4l2_disable_ioctl() to disable ioctls VIDIOC_G_AUDIO and VIDIOC_S_AUDIO Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 04/13] em28xx: use v4l2_disable_ioctl() to disable ioctl VIDIOC_S_PARM Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 05/13] em28xx: disable ioctl VIDIOC_S_PARM for VBI devices Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 06/13] em28xx: make ioctls VIDIOC_G/S_PARM working " Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 07/13] em28xx: remove ioctl VIDIOC_CROPCAP Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 08/13] em28xx: get rid of duplicate function vidioc_s_fmt_vbi_cap() Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 09/13] em28xx: VIDIOC_G_TUNER: remove unneeded setting of tuner type Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 10/13] em28xx: remove obsolete device state checks from the ioctl functions Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 11/13] em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available without CONFIG_VIDEO_ADV_DEBUG selected Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 12/13] em28xx: make ioctl VIDIOC_DBG_G_CHIP_IDENT available for radio devices Frank Schäfer
2013-02-07 17:39 ` [PATCH v2 13/13] em28xx: do not claim VBI support if the device is a camera Frank Schäfer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).