v4l2_i2c_new_subdev_board(&v4l2->v4l2_dev, adap,
                                              &mt9v011_info, NULL))
                        return -ENODEV;
-               /* probably means GRGB 16 bit bayer */
-               v4l2->vinmode = 0x0d;
+               v4l2->vinmode = EM28XX_VINMODE_RGB8_GRBG;
                v4l2->vinctl = 0x00;
 
                break;
 
                em28xx_initialize_mt9m001(dev);
 
-               /* probably means BGGR 16 bit bayer */
-               v4l2->vinmode = 0x0c;
+               v4l2->vinmode = EM28XX_VINMODE_RGB8_BGGR;
                v4l2->vinctl = 0x00;
 
                break;
                em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->board.xclk);
                em28xx_initialize_mt9m111(dev);
 
-               v4l2->vinmode = 0x0a;
+               v4l2->vinmode = EM28XX_VINMODE_YUV422_UYVY;
                v4l2->vinctl = 0x00;
 
                break;
                /* NOTE: for UXGA=1600x1200 switch to 12MHz */
                dev->board.xclk = EM28XX_XCLK_FREQUENCY_24MHZ;
                em28xx_write_reg(dev, EM28XX_R0F_XCLK, dev->board.xclk);
-               v4l2->vinmode = 0x08;
+               v4l2->vinmode = EM28XX_VINMODE_YUV422_YUYV;
                v4l2->vinctl = 0x00;
 
                break;
 
 #define EM28XX_XCLK_FREQUENCY_24MHZ    0x0b
 
 #define EM28XX_R10_VINMODE     0x10
+         /* used by all non-camera devices: */
+#define   EM28XX_VINMODE_YUV422_CbYCrY  0x10
+         /* used by camera devices: */
+#define   EM28XX_VINMODE_YUV422_YUYV    0x08
+#define   EM28XX_VINMODE_YUV422_YVYU    0x09
+#define   EM28XX_VINMODE_YUV422_UYVY    0x0a
+#define   EM28XX_VINMODE_YUV422_VYUY    0x0b
+#define   EM28XX_VINMODE_RGB8_BGGR      0x0c
+#define   EM28XX_VINMODE_RGB8_GRBG      0x0d
+#define   EM28XX_VINMODE_RGB8_GBRG      0x0e
+#define   EM28XX_VINMODE_RGB8_RGGB      0x0f
+         /*
+          * apparently:
+          *   bit 0: swap component 1+2 with 3+4
+          *                 => e.g.: YUYV => YVYU, BGGR => GRBG
+          *   bit 1: swap component 1 with 2 and 3 with 4
+          *                 => e.g.: YUYV => UYVY, BGGR => GBRG
+          */
 
 #define EM28XX_R11_VINCTRL     0x11
 
 
        /*
         * Default format, used for tvp5150 or saa711x output formats
         */
-       v4l2->vinmode = 0x10;
+       v4l2->vinmode = EM28XX_VINMODE_YUV422_CbYCrY;
        v4l2->vinctl  = EM28XX_VINCTRL_INTERLACED |
                        EM28XX_VINCTRL_CCIR656_ENABLE;