Skip to content

Commit

Permalink
V4L/DVB (12376): em28xx: fix V4L2 API compliance: don't expose audio …
Browse files Browse the repository at this point in the history
…inputs for devices without it

V4L2 API (chapter 1.5) states that:

	Drivers must implement all input ioctls when the device has one
	or more inputs, all output ioctls when the device has one or more outputs.
	When the device has any audio inputs or outputs the driver must set the
	V4L2_CAP_AUDIO flag in the struct v4l2_capability returned by the
	VIDIOC_QUERYCAP ioctl.

So, devices without audio input should return -EINVAL.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Mauro Carvalho Chehab committed Sep 12, 2009
1 parent 00c1e21 commit 6c428b5
Showing 1 changed file with 9 additions and 1 deletion.
10 changes: 9 additions & 1 deletion drivers/media/video/em28xx/em28xx-video.c
Original file line number Diff line number Diff line change
Expand Up @@ -1005,6 +1005,9 @@ 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");
Expand Down Expand Up @@ -1046,6 +1049,9 @@ static int vidioc_s_audio(struct file *file, void *priv, struct v4l2_audio *a)
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)
Expand Down Expand Up @@ -1464,9 +1470,11 @@ static int vidioc_querycap(struct file *file, void *priv,
cap->capabilities =
V4L2_CAP_SLICED_VBI_CAPTURE |
V4L2_CAP_VIDEO_CAPTURE |
V4L2_CAP_AUDIO |
V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;

if (dev->audio_mode.has_audio)
cap->capabilities |= V4L2_CAP_AUDIO;

if (dev->tuner_type != TUNER_ABSENT)
cap->capabilities |= V4L2_CAP_TUNER;

Expand Down

0 comments on commit 6c428b5

Please sign in to comment.