Merge branch 'topic/usb-audio' into for-linus
[pandora-kernel.git] / drivers / media / video / em28xx / em28xx-core.c
index c7fcce7..98e140b 100644 (file)
@@ -632,6 +632,9 @@ int em28xx_capture_start(struct em28xx *dev, int start)
                return rc;
        }
 
+       if (dev->board.is_webcam)
+               rc = em28xx_write_reg(dev, 0x13, 0x0c);
+
        /* enable video capture */
        rc = em28xx_write_reg(dev, 0x48, 0x00);
 
@@ -648,28 +651,17 @@ int em28xx_capture_start(struct em28xx *dev, int start)
 int em28xx_set_outfmt(struct em28xx *dev)
 {
        int ret;
-       int vinmode, vinctl, outfmt;
-
-       outfmt  = dev->format->reg;
-
-       if (dev->board.is_webcam) {
-               vinmode = 0x0d;
-               vinctl  = 0x00;
-       } else {
-               vinmode = 0x10;
-               vinctl  = 0x11;
-       }
 
        ret = em28xx_write_reg_bits(dev, EM28XX_R27_OUTFMT,
-                               outfmt | 0x20, 0xff);
+                               dev->format->reg | 0x20, 0xff);
        if (ret < 0)
                        return ret;
 
-       ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, vinmode);
+       ret = em28xx_write_reg(dev, EM28XX_R10_VINMODE, dev->vinmode);
        if (ret < 0)
                return ret;
 
-       return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctl);
+       return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, dev->vinctl);
 }
 
 static int em28xx_accumulator_set(struct em28xx *dev, u8 xmin, u8 xmax,
@@ -731,7 +723,10 @@ int em28xx_resolution_set(struct em28xx *dev)
 {
        int width, height;
        width = norm_maxw(dev);
-       height = norm_maxh(dev) >> 1;
+       height = norm_maxh(dev);
+
+       if (!dev->progressive)
+               height >>= norm_maxh(dev);
 
        em28xx_set_outfmt(dev);