Skip to content

Commit

Permalink
V4L/DVB (12345): em28xx: fix audio VIDIOC_S_CTRL adjustments on devic…
Browse files Browse the repository at this point in the history
…es without ac97

Even devices without ac97 needs to call analog audio setup function, to
properly set xclk and mute/unmute.

Thanks to Angelo Cano <acano@fastmail.fm> for reporting and testing it.

Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
  • Loading branch information
Mauro Carvalho Chehab committed Sep 12, 2009
1 parent e81516c commit 73c6f46
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions drivers/media/video/em28xx/em28xx-video.c
Original file line number Diff line number Diff line change
Expand Up @@ -1146,11 +1146,25 @@ static int vidioc_s_ctrl(struct file *file, void *priv,
else
rc = 1;

/* It were not an AC97 control. Sends it to the v4l2 dev interface */
/* It isn't an AC97 control. Sends it to the v4l2 dev interface */
if (rc == 1) {
v4l2_device_call_all(&dev->v4l2_dev, 0, core, s_ctrl, ctrl);
/* FIXME: should be returning a meaninful value */
rc = 0;

/*
* In the case of non-AC97 volume controls, we still need
* to do some setups at em28xx, in order to mute/unmute
* and to adjust audio volume. However, the value ranges
* should be checked by the corresponding V4L subdriver.
*/
switch (ctrl->id) {
case V4L2_CID_AUDIO_MUTE:
dev->mute = ctrl->value;
rc = em28xx_audio_analog_set(dev);
break;
case V4L2_CID_AUDIO_VOLUME:
dev->volume = ctrl->value;
rc = em28xx_audio_analog_set(dev);
}
}

mutex_unlock(&dev->lock);
Expand Down

0 comments on commit 73c6f46

Please sign in to comment.