Commit a7b8e9a5 authored by Frank Schaefer's avatar Frank Schaefer Committed by Mauro Carvalho Chehab

[media] em28xx: shed some light on video input formats

CbYCrY has been identified by looking into the tvp5150 driver and the
saa7115 datasheet.
YUV formats have been verified with em2765 + ov2640 (VAD Laplace webcam).
RGB8 formats have been verified with em2710/em2820 + mt9v011 (Silvercrest
webcam 1.3mpix).
I also did some cross-checking with these two camera devices and 0x08-0x0b
are at least 16 bits per pixel formats on em2710/em2820, too, and
0x0c-0x0f are at least 8 bits per pixel formats on em2765, too.
Signed-off-by: default avatarFrank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 85316cf8
......@@ -344,8 +344,7 @@ int em28xx_init_camera(struct em28xx *dev)
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;
......@@ -356,8 +355,7 @@ int em28xx_init_camera(struct em28xx *dev)
em28xx_initialize_mt9m001(dev);
/* probably means BGGR 16 bit bayer */
v4l2->vinmode = 0x0c;
v4l2->vinmode = EM28XX_VINMODE_RGB8_BGGR;
v4l2->vinctl = 0x00;
break;
......@@ -369,7 +367,7 @@ int em28xx_init_camera(struct em28xx *dev)
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;
......@@ -410,7 +408,7 @@ int em28xx_init_camera(struct em28xx *dev)
/* 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;
......
......@@ -93,6 +93,24 @@
#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
......
......@@ -2459,7 +2459,7 @@ static int em28xx_v4l2_init(struct em28xx *dev)
/*
* 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;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment