|
@@ -1070,6 +1070,10 @@ static int vidioc_try_fmt_vid_cap(struct file *file, void *priv,
|
|
|
/* the em2800 can only scale down to 50% */
|
|
|
height = height > (3 * maxh / 4) ? maxh : maxh / 2;
|
|
|
width = width > (3 * maxw / 4) ? maxw : maxw / 2;
|
|
|
+ /* MaxPacketSize for em2800 is too small to capture at full resolution
|
|
|
+ * use half of maxw as the scaler can only scale to 50% */
|
|
|
+ if (width == maxw && height == maxh)
|
|
|
+ width /= 2;
|
|
|
} else {
|
|
|
/* width must even because of the YUYV format
|
|
|
height must be even because of interlacing */
|
|
@@ -2503,6 +2507,7 @@ int em28xx_register_analog_devices(struct em28xx *dev)
|
|
|
{
|
|
|
u8 val;
|
|
|
int ret;
|
|
|
+ unsigned int maxw;
|
|
|
|
|
|
printk(KERN_INFO "%s: v4l2 driver version %s\n",
|
|
|
dev->name, EM28XX_VERSION);
|
|
@@ -2515,8 +2520,15 @@ int em28xx_register_analog_devices(struct em28xx *dev)
|
|
|
|
|
|
/* Analog specific initialization */
|
|
|
dev->format = &format[0];
|
|
|
+
|
|
|
+ maxw = norm_maxw(dev);
|
|
|
+ /* MaxPacketSize for em2800 is too small to capture at full resolution
|
|
|
+ * use half of maxw as the scaler can only scale to 50% */
|
|
|
+ if (dev->board.is_em2800)
|
|
|
+ maxw /= 2;
|
|
|
+
|
|
|
em28xx_set_video_format(dev, format[0].fourcc,
|
|
|
- norm_maxw(dev), norm_maxh(dev));
|
|
|
+ maxw, norm_maxh(dev));
|
|
|
|
|
|
video_mux(dev, dev->ctl_input);
|
|
|
|