V4L/DVB (10192): em28xx: fix input selection
em28xx were trying to access the third input entry, even for boards that don't support it. This patch reviews the input mux selection fixing this bug and a few other troubles, like not validating the input on one userspace ioctl. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
18e352e4a7
commit
24c3c41584
1 changed files with 27 additions and 22 deletions
|
@ -886,10 +886,10 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int i)
|
||||||
if (0 == INPUT(i)->type)
|
if (0 == INPUT(i)->type)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
|
dev->ctl_input = i;
|
||||||
|
|
||||||
mutex_lock(&dev->lock);
|
mutex_lock(&dev->lock);
|
||||||
|
video_mux(dev, dev->ctl_input);
|
||||||
video_mux(dev, i);
|
|
||||||
|
|
||||||
mutex_unlock(&dev->lock);
|
mutex_unlock(&dev->lock);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -939,6 +939,12 @@ static int vidioc_s_audio(struct file *file, void *priv, struct v4l2_audio *a)
|
||||||
struct em28xx_fh *fh = priv;
|
struct em28xx_fh *fh = priv;
|
||||||
struct em28xx *dev = fh->dev;
|
struct em28xx *dev = fh->dev;
|
||||||
|
|
||||||
|
|
||||||
|
if (a->index >= MAX_EM28XX_INPUT)
|
||||||
|
return -EINVAL;
|
||||||
|
if (0 == INPUT(a->index)->type)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
mutex_lock(&dev->lock);
|
mutex_lock(&dev->lock);
|
||||||
|
|
||||||
dev->ctl_ainput = INPUT(a->index)->amux;
|
dev->ctl_ainput = INPUT(a->index)->amux;
|
||||||
|
@ -1957,23 +1963,6 @@ int em28xx_register_analog_devices(struct em28xx *dev)
|
||||||
(EM28XX_VERSION_CODE >> 16) & 0xff,
|
(EM28XX_VERSION_CODE >> 16) & 0xff,
|
||||||
(EM28XX_VERSION_CODE >> 8) & 0xff, EM28XX_VERSION_CODE & 0xff);
|
(EM28XX_VERSION_CODE >> 8) & 0xff, EM28XX_VERSION_CODE & 0xff);
|
||||||
|
|
||||||
/* Analog specific initialization */
|
|
||||||
dev->format = &format[0];
|
|
||||||
video_mux(dev, 0);
|
|
||||||
|
|
||||||
/* enable vbi capturing */
|
|
||||||
|
|
||||||
/* em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
|
|
||||||
/* em28xx_write_reg(dev, EM28XX_R0F_XCLK, 0x80); clk register */
|
|
||||||
em28xx_write_reg(dev, EM28XX_R11_VINCTRL, 0x51);
|
|
||||||
|
|
||||||
dev->mute = 1; /* maybe not the right place... */
|
|
||||||
dev->volume = 0x1f;
|
|
||||||
|
|
||||||
em28xx_set_outfmt(dev);
|
|
||||||
em28xx_colorlevels_set_default(dev);
|
|
||||||
em28xx_compression_disable(dev);
|
|
||||||
|
|
||||||
/* set default norm */
|
/* set default norm */
|
||||||
dev->norm = em28xx_video_template.current_norm;
|
dev->norm = em28xx_video_template.current_norm;
|
||||||
dev->width = norm_maxw(dev);
|
dev->width = norm_maxw(dev);
|
||||||
|
@ -1981,9 +1970,25 @@ int em28xx_register_analog_devices(struct em28xx *dev)
|
||||||
dev->interlaced = EM28XX_INTERLACED_DEFAULT;
|
dev->interlaced = EM28XX_INTERLACED_DEFAULT;
|
||||||
dev->hscale = 0;
|
dev->hscale = 0;
|
||||||
dev->vscale = 0;
|
dev->vscale = 0;
|
||||||
|
dev->ctl_input = 0;
|
||||||
|
|
||||||
/* FIXME: This is a very bad hack! Not all devices have TV on input 2 */
|
/* Analog specific initialization */
|
||||||
dev->ctl_input = 2;
|
dev->format = &format[0];
|
||||||
|
video_mux(dev, dev->ctl_input);
|
||||||
|
|
||||||
|
/* Audio defaults */
|
||||||
|
dev->mute = 1;
|
||||||
|
dev->volume = 0x1f;
|
||||||
|
|
||||||
|
/* enable vbi capturing */
|
||||||
|
|
||||||
|
/* em28xx_write_reg(dev, EM28XX_R0E_AUDIOSRC, 0xc0); audio register */
|
||||||
|
/* em28xx_write_reg(dev, EM28XX_R0F_XCLK, 0x80); clk register */
|
||||||
|
em28xx_write_reg(dev, EM28XX_R11_VINCTRL, 0x51);
|
||||||
|
|
||||||
|
em28xx_set_outfmt(dev);
|
||||||
|
em28xx_colorlevels_set_default(dev);
|
||||||
|
em28xx_compression_disable(dev);
|
||||||
|
|
||||||
/* allocate and fill video video_device struct */
|
/* allocate and fill video video_device struct */
|
||||||
dev->vdev = em28xx_vdev_init(dev, &em28xx_video_template, "video");
|
dev->vdev = em28xx_vdev_init(dev, &em28xx_video_template, "video");
|
||||||
|
|
Loading…
Reference in a new issue